- 전체
- Sample DB
- database modeling
- [표준 SQL] Standard SQL
- G-SQL
- 10-Min
- ORACLE
- MS SQLserver
- MySQL
- SQLite
- postgreSQL
- 데이터아키텍처전문가 - 국가공인자격
- 데이터 분석 전문가 [ADP]
- [국가공인] SQL 개발자/전문가
- NoSQL
- hadoop
- hadoop eco system
- big data (빅데이터)
- stat(통계) R 언어
- XML DB & XQuery
- spark
- DataBase Tool
- 데이터분석 & 데이터사이언스
- Engineer Quality Management
- [기계학습] machine learning
- 데이터 수집 및 전처리
- 국가기술자격 빅데이터분석기사
- 암호화폐 (비트코인, cryptocurrency, bitcoin)
[기계학습] machine learning 한국어 BERT, HanBert를 소개합니다.
2020.09.25 22:05
한국어 BERT, HanBert를 소개합니다.
HanBERT Package에는 한국어 BERT와 이를 사용하기 위한 한국어 분석기 Moran, 그리고 기계독해 예제 등이 포함되어 있습니다. HanBert를 이용한 재미있는 [기계독해 데모] 를 방문해 보세요.
HanBert의 상업적인 활용을 위해서는 [상업적 활용] 을 참고해주세요.
Pre-trained Hangul-BERT (HanBert-54kN)
- HanBert-54kN : HanBert 기본 모델 (600만 Step 학습)
- bert_config.json
- checkpoint
- model.ckpt-6000000.data-00000-of-00001
- model.ckpt-6000000.meta
- model.ckpt-6000000.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수 : 600만
- 특허 추가 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를 풀면, 맨처음 해야 하는 일은 moran의 활성화입니다.
- 다른 디렉토리에 사용하고 싶은 경우는 이 글의 아래부분에 설명되어 있습니다.
1
2
3
4
|
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
기계 독해 맛보기
- 미리 학습을 시킨 기계 독해 모델로 느껴보실 수 있도록 학습된 모델을 소개합니다.
- 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 + 기계독해 학습 데이터 (총 253,466건)
- 실행 방법과 예제
- HanBert-54kN-MRC 디렉토리에 있는 bert_config와 model, vocab을 사용하세요.
- src/mrc_test.py 코드에 기본으로 지정되어 있으나, 디렉토리가 변경된 경우에 지정해 주셔야 합니다.

Moran (한국어 문장을 Deep NLP용 한국어 표현으로 변환) 예제
- moran.db, libmoran4dnlp.so의 위치는 /usr/local/moran 입니다.
- MorAn20 패키지 설치를 통해서 DB의 위치와 상관없이 클라우드와 도커환경에서도 사용할 수 있습니다.
- moran.py의 소스코드에서 libmoran4dnlp.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>']
Contacts
- info@tbai.info, 주식회사 투블럭에이아이, https://twoblockai.com/
- HanBert와 Moran의 기술 및 Resouce 도입과 튜닝, 현업 적용 등의 상업적 이용을 위한 문의를 환영합니다.
- HanBERT_MRC, HanBERT_NER의 라이센스에 대한 문의를 환영합니다.
- 자체 보유중인 코퍼스와 투블럭Ai가 보유한 정제된 코퍼스를 통합하여 자체적인 BERT를 개발하기 위한 문의를 환영합니다.
HanBert-54kN [다운로드]
구글 드라이브에서 다운로드 됩니다.
HanBert 굽는데는 일부 TFRC 프로그램의 협찬을 받았습니다.
2019년 개방형 경진대회 우수기업 사업화 지원의 결과물 중 일부 입니다.
본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.