한국어 BERT, HanBert를 공개합니다.


한국어 BERT와 이를 사용하기 위한 한국어 분석기 Moran, 그리고 기계독해 예제 등이 포함되어 있습니다. [기계독해 데모]

검색이나 홈페이지에서 찾으신 분은 찬찬히 읽어보신 후에 맨 아래부분에서 다운로드해주세요.

GitHub에서 오신 분들은 별표 하나 눌러주시고 다운로드 해주세요. ^^ [별누르러 다시 가기]

HanBert-54kN [다운로드]

구글 드라이브에서 다운로드 됩니다.


Pre-trained Hangul-BERT (HanBert-54kN)

  • HanBert-54kN : HanBert 기본 모델 (300만 Step 학습)
    • bert_config.json
    • checkpoint
    • model.ckpt-3000000.data-00000-of-00001
    • model.ckpt-3000000.meta
    • model.ckpt-3000000.index
    • vocab_54k.txt
  • HanBert-54kN-IP : 특허문서를 추가하여 만들어진 기본 모델 (기본 500만 + 특허 100만)
    • bert_config.json
    • checkpoint
    • model.ckpt-6000000.data-00000-of-00001
    • model.ckpt-6000000.meta
    • model.ckpt-6000000.index
    • vocab_54k.txt
  • HanBert-54kN-MRC : 기계독해 학습 데이터로 Fine-tuning된 모델 (mrc_test.py에서 사용)
    • bert_config.json
    • checkpoint
    • model.ckpt-60000.data-00000-of-00001
    • model.ckpt-60000.meta
    • model.ckpt-60000.index
    • vocab_54k.txt
  • usr_local_moran : 한국어 분석 라이브러리와 DB
    • libmoran4dnlp.so
    • moran.db
    • udict.txt
    • uentity.txt
  • src :
    • 구글에서 배포한 프로그램
      • modeling.py
      • optimization.py
    • 구글에서 배포한 프로그램을 구미에 맞게 수정한 프로그램 by TwoBlock Ai
      • mrc_test.py : 기계 독해 맛보기
      • run_korquad_1.0.py : 기계 독해 (KorQuAD 1.0 학습 프로그램)
    • 구글에서 배포한 프로그램을 구미에 맞게 수정한 프로그램 by TwoBlock Ai
      • tokenization.py : 한글 토크나이저 (moran 구동 모듈 포함)
      • tokenization_test.py : 한글 토크나이저 테스트
    • 투블럭Ai에서 배포하는 형태소 분석 구동 프로그램 by TwoBlock Ai
      • moran.py
      • moran_test.py


Training Settings

  • 학습 코퍼스 (일반 문서)
    • size : 3.5억개 문장, 113억개 형태소, 70G바이트
    • Dup : 1 ~ 10 (코퍼스 성격에 따라 조합)
  • 학습 코퍼스 (특허 문서)
    • size : 3.7억개 문장, 150억개 형태소, 75G바이트
    • Dup : 2
  • 학습 환경
    • Google TPU V3-8
    • 기본 학습 Step수 : 500만 (공개 버젼은 300만)
    • 특허 추가 Step수 : 600만 (일반 500만 + 특허문서 100만)
  • 한국어 형태소 분절
    • moran wiki 버젼 : moran-2013 버젼 형태소 분석기의 Deep NLP 버젼
    • 품사를 표시하지 않고 음절단위로 분절 및 ~기호 부착
    • 앞의 형태소에 붙여야 하는 경우 ~, 그런데 기능어였던 경우 ~~
    • moran.db (126M) : 기본 지식 (64만단어 + 57만 기분석사전 + 174만 명칭어) + wiki 표제어 (445,701 단어)
    • 초당 0.5M 수준의 분절 속도 (형태소 분석후, 분절 + 기호 부착)
  • Vocab
    • 크기 : 총 54000표제어 : 53800개 단어 + 200개의 여유 공간


Requirements

  • Python : 3.6.8
  • tensorflow-gpu : 1.11.0
  • OS : ubuntu 18.04

How to Install

  • 모델과 DB File의 크기가 4G입니다. Git 배포 용량을 초과합니다.
  • 윈도우 버젼이나, ubuntu 18.04와 호환되지 않는 환경은 코드를 지원하고 있지 않습니다.
  • 글의 아래부분에 있는 [다운로드]를 눌러서 hanbert54kN.tar.gz를 다운로드합니다.
  • hanbert54kN.tar.gz를 풀면, 맨처음 해야 하는 일은 moran의 활성화입니다.
  • moran을 사용하기 위해서는 아래와 같이 특정 디렉토리에 복사가 필요합니다.
  • 복사만 하면, 그대로 사용할 수 있습니다.
  • 다른 디렉토리에 사용하고 싶은 경우는 이 글의 아래부분에 설명되어 있습니다.
tar xvfz hanbert.tar.gz
cd HanBert-54kN/
sudo mkdir /usr/local/moran
cp usr_local_moran/* /usr/local/moran
  • Moran의 동작여부 확인
    • $ python src/tokenization_test.py
    • Cat.12가 600 Mbps,
    • 12 ~~가 600 ~mbps
    • ['cat.12', '~~가', '600', 'mbps', ',']
    • cat.12 ~~가 600 mbps , Cat.12가 600 Mbps
    • ['나', '~~는', '걸어가', '~~고', '있', '~~는', '중', '~~입', '~~니다', '.', '나는걸어', '가', '~~고', '~있', '~~는', '중', '~~입', '~~니다', '.', '잘', '분류', '~~되', '~~기', '~~도', '한', '~~다', '.', '잘', '먹', '~~기', '~~도', '한', '~~다', '.']
    • 나 ~~는 걸어가 ~~고 있 ~~는 중 ~~입 ~~니다 . 나는걸어 가 ~~고 ~있 ~~는 중 ~~입 ~~니다 . 잘 분류 ~~되 ~~기 ~~도 한 ~~다 . 잘 먹 ~~기 ~~도 한 ~~다 .
    • ['나', '~~는', '걸어가', '~~고', '있', '~~는', '중', '~~입', '~~니다', '.', '나', '##는걸', '##어', '가', '~~고', '~있', '~~는', '중', '~~입', '~~니다', '.', '잘', '분류', '~~되', '~~기', '~~도', '한', '~~다', '.', '잘', '먹', '~~기', '~~도', '한', '~~다', '.']
  • HanBert에 대해서는 더 이상의 필요사항이 없습니다.
  • 추가적인 사항들은 구글에서 공개한 https://github.com/google-research/bert 실행 환경과 동일합니다.
    • Python : 3.6.8
    • tensorflow-gpu : 1.11.0
  • KorQuAD 1.0 학습 (https://korquad.github.io/category/1.0_KOR.html)
    • KorQuAD 1.0의 데이터를 다운로드 받으세요. KorQuAD_v1.0_train.json, KorQuAD_v1.0_dev.json
    • 평가용 프로그램을 다운로드 받으세요. KorQuAD_v1.0_dev.json
    • 예제로 나와있는 코드를 실행해 보세요
      • python src/run_korquad_1.0.py --init_checkpoint=HanBert-54kN --bert_config_file=HanBert-54kN/bert_config.json --vocab_file=HanBert-54kN/vocab_54k.txt --do_train=true --do_predict=true --train_batch_size=16 --num_train_epochs=1.0 --learning_rate=3e-5 --train_file=korquad.1.0/KorQuAD_v1.0_train.json --predict_file=korquad.1.0/KorQuAD_v1.0_dev.json --output_dir=result python evaluate-v1.0.py korquad.1.0/KorQuAD_v1.0_dev.json result/predictions.json

기계 독해 맛보기

  • GPU가 없어도, 실행해 볼 수 있습니다.
  • 미리 학습을 시킨 기계 독해 모델로 느껴보실 수 있도록 학습된 모델을 공개합니다.
    • Model명 : HanBert-54kN-MRC
    • epochs : 3.0
  • 학습 데이터가 서로 다른 지침으로 작성되어서 동일한 형식의 질문에 각각 다른 답변의 유형이 존재합니다.
    • 학습데이터의 품질에 대해서도 의구심이 있지만, 공개되어 있는 학습데이터를 사용하여 학습하였습니다.
      • 문제시 되는 것들 :
      • 예 : 어디에서 출발해? A) 부산 B) 부산에서
  • 학습 데이터
    • HanBert-54kN + 기계독해 학습 데이터 (총 253,466건)
      • NIA의 기계독해 데이터 : 162,632건
      • KorQuAD 1.0의 데이터 : 66,181건
      • KorQuAD 2.0의 데이터 : 24,653건
  • 실행 방법과 예제
  • HanBert-54kN-MRC 디렉토리에 있는 bert_config와 model, vocab을 사용하세요.
  • src/mrc_test.py 코드에 기본으로 지정되어 있으나, 디렉토리가 변경된 경우에 지정해 주셔야 합니다.

Moran (한국어 문장을 Deep NLP용 한국어 표현으로 변환) 예제

  • moran.db, libmoran4dnlp.so의 기본 위치는 /usr/local/moran 입니다.
  • moran.py의 소스코드에서 해당 DB와 so의 위치를 수정하실 수 있습니다.
  • udict.txt는 사용자 기분서-사전입니다. 띄어쓰기 단위인 어절에 대한 분석 결과를 등록할 수 있습니다.
  • uentity.txt는 사용자 명칭어 사전입니다. 현재버젼에서는 제공되지 않는 기능이므로, 그대로 두시면 됩니다.
>>> import moran
>>> moran_tokenizer = moran.MoranTokenizer()
>>> x = '한국어 BERT를 공개합니다.'
>>> moran_line = moran.text2moran(x, moran_tokenizer)
>>> print(moran_line)
['한국어', 'bert', '~~를', '공개', '~~합', '~~니다', '.']
>>> x = '<table> <tr> <td> 한국어 BERT를 공개합니다. </td> </tr> </table>'
>>> moran_line = moran.text2moran(x, moran_tokenizer)
>>> print(moran_line)
['<table>', '<tr>', '<td>', '한국어', 'bert', '~~를', '공개', '~~합', '~~니다', '.', '</td>', '</tr>', '</table>']

KorQuAD 1.0 학습과 추론

  • 구글의 Code를 일부 수정하였습니다.
  • 아래와 같이 KorQuAD 1.0 데이터에 대해서 학습하고 점수가 확인되면 OK 입니다.
   $ python src/run_korquad_1.0.py --init_checkpoint=HanBert-54kN/HanBert-54kN --bert_config_file=HanBert-54kN/HanBert-54kN/bert_config.json --vocab_file=HanBert-54kN/HanBert-54kN/vocab_54k.txt --do_train=true --do_predict=true --train_batch_size=16 --num_train_epochs=5.0 --learning_rate=3e-5 --train_file=KorQuAD_v1.0_train.json --predict_file=KorQuAD_v1.0_dev.json --output_dir=54kN-result
   $ time python src/run_korquad_1.0.py --init_checkpoint=HanBert-54kN/HanBert-54kN-IP --bert_config_file=HanBert-54kN/HanBert-54kN-IP/bert_config.json --vocab_file=HanBert-54kN/HanBert-54kN-IP/vocab_54k.txt --do_train=true --do_predict=true --train_batch_size=16 --num_train_epochs=5.0 --learning_rate=3e-5 --train_file=KorQuAD_v1.0_train.json --predict_file=KorQuAD_v1.0_dev.json --output_dir=54kN-IP-result
   real	130m5.984s
   user	54m54.364s
   sys	28m56.004s

   $ python evaluate-v1.0.py KorQuAD_v1.0_dev.json 54kN-result/predictions.json
   EM = 83.495     F1 = 93.146 

   $ python evaluate-v1.0.py KorQuAD_v1.0_dev.json 54kN-IP-result/predictions.json
   EM = 81.902     F1 = 92.026 

HanBert-54kN의 추가 학습

  • 자체적인 코퍼스를 moran을 통해서 분석한 후에, 학습용 레코드를 만들어서 추가학습이 가능합니다.
  • 다양한 도메인의 코퍼스로 학습하여 보세요.
  • 특허 분야의 코퍼스로 추가학습한 모델을 공개하여 드립니다.
    • HanBert-54kN-IP

Version History

  • v.0.1 : 초기 모델 릴리즈

Contacts

info@tbai.info, 주식회사 투블럭에이아이, https://twoblockai.com/


License

  • KorQuAD 1.0 학습과 추론 코드는 원저자의 정책과 동일하게 Apache-2.0 라이선스 하에 공개되어 있습니다.
  • HanBert 모델과 Moran은 비상업적 목적으로 한정합니다. 상업적인 목적을 위해서는 위의 Contacts와 협의해 주세요.
  • HanBert 모델에 추가 학습한 경우에도 비상업적 목적으로 한정합니다. 상업적인 목적을 위해서는 위의 Contacts와 협의해 주세요.
  • 교육의 목적은 상업적인 목적으로 보지 않습니다. 교육을 위해서라면 자유롭게 사용하셔도 좋습니다.
  • HanBert와 Moran의 기술 및 Resouce 도입과 튜닝, 현업 적용 등의 상업적 이용을 위한 문의를 환영합니다. ^^

HanBert-54kN [다운로드]

구글 드라이브에서 다운로드 됩니다.


HanBert 굽는데는 일부 TFRC 프로그램의 협찬을 받았습니다.

2019년 개방형 경진대회 우수기업 사업화 지원의 결과물 중 일부 입니다.

댓글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google photo

Google의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중

%d 블로거가 이것을 좋아합니다: