Khaiii 와 mecab-ko를 함께 사용하였다. 이유 / 품사 정보
BERT - transformer모델의 Encoder 부분을 사용한 사전 훈련 모델
-
구글의 사전훈련 모델을 사용하지 않은 이유
모델 사용 중 전처리 과정에서 NFC 정규화 문제 발견 - 관련된 issue
문제를 해결하는 코드를 pull request, 한국어의 사전훈련이 제대로 되지 않았을 것으로 판단
(현재는 NFC 정규화하지 않은 버전의 모델이 올라와 있음)
*(2019.10.17) KorBERT이 공개 *
-
학습 데이터
Wikipedia 말뭉치를 사용 wikiextractor를 사용해 본문만을 추출하고 추가적인 데이터 정제와 모델 훈련데이터 생성을 위한 형식으로 변경
-
형태소 사전
기존 단어 사전은 다국어 지원으로 사전의 크기가 크며 사용된 wordpiece도 충분히 좋지만 형태소를 분석한 사전을 사용 해보고자 함
- Wiki에서 많이 사용되는 상위 형태소 7449개를 추출
- Wiki 데이터에 대한 지나친 편향을 줄이기 위해 국립국어원의 자주사용되는 한국어 어휘 데이터의 형태소 1842개를 추가하여 9169개의 형태소 사전을 생성
- 결과
- 전체 토큰의 수가 줄어 들었다. (약 1.5%)
- [메나헴], [베긴] 과 같은 흔하지 않은 고유명사가 [UNK] 토큰화 되었다.
- [UNK] 토큰의 수가 증가했다.(0.2% -> 1%)
- 아쉬운 점
- 완전히 재구성하지 말고 기존 wordpiece 사전에 형태소만을 추가하는 방법또한 좋았을 것
- 띄어쓰기 정보X
-
학습
google-research/bert의 텐서플로우 구현코드에 형태소 분석기를 추가하여 학습을 진행했다. 학습 파라미터는 BERT paper를 따라했으며, pretraining tip에 따라 학습데이터의 문장의 길이를 128로 두고 1차 학습한 뒤, 길이 512로 2차 학습을 하였다. 학습은 구글 클라우드 플랫폼의 Nvidia Tesla T4를 사용하였다.
-
인공지능 QA
SQUAD 의 한국판인 KorQUAD의 데이터셋을 사용 KorQuAD introduction
질문과 문단(input)에 대한 문단에서의 정답인덱스의 시작과 끝(output)을 학습
- 1차 학습모델사용(주황색) / 2차 학습모델사용(파란색) 로스
- 평가셋에 대한 F1 score
F1 score Exact Match Loss(smoothed) Epochs 1차 사전훈련 모델(주황선) 74.66 53.06 0.6043 3 2차 사전훈련 모델(파랑선) 83.43 62.57 0.2793 3 최종적으로 평가셋을 포함한 데이터로 학습 (평가셋 F1 score 92.68)
DB에서 tf-idf알고리즘 를 통해 답이 있을 만한 문단을 찾은 뒤, Top 1 문단에서 답을 추론
Q. 한양대의 마스코트 하냥이를 만든 곳은?
A. 토이츄러스
- 감성 분석
Naver sentiment movie corpus데이터를 사용하여 긍, 부정에 대한 학습
하나의 Logistic regression 레이어 추가로 손쉽게 학습데이터 정확도 96%이상, 평가데이터 정확도 93%
*** 1.0 에 가까우면 긍정, 0.0 에 가까우면 부정 ***
- MongoDB 서버 실행
- Server 1 - (CPU)
python app.py --ip --port
- Server 2 - (GPU)
nvidia-docker 설치 이후
인공지능 QA
docker run --runtime=nvidia -p 8501:8501 \
--mount type=bind,source=/home/rhodochrosited/tensor_serving_models/search/,\
target=/models/search -e MODEL_NAME=search -t tensorflow/serving:latest-gpu \
--per_process_gpu_memory_fraction=0.3 &
문장임베딩
docker run --runtime=nvidia -p 8502:8501 \
--mount type=bind,source=/home/rhodochrosited/tensor_serving_models/similarity/,target=/models/similarity -e \
MODEL_NAME=similarity -t tensorflow/serving:latest-gpu \
--per_process_gpu_memory_fraction=0.3 &
감성분석
docker run --runtime=nvidia -p 8503:8501 \
--mount type=bind,source=/home/rhodochrosited/tensor_serving_models/sentiment/,target=/models/sentiment -e \
MODEL_NAME=sentiment -t tensorflow/serving:latest-gpu \
--per_process_gpu_memory_fraction=0.3 &