2019년 5월 8일 수요일

형태소 분석기를 이용한 Bert-Multilingual Model 기반 Korquad 결과의 성능 개선

제목이 논문 제목같다...

차례

1. Konlpy가 설치된 도커 만들기
2. 형태소 분석을 통해 마지막 조사를 제거하도록 run_squad.py 수정
3. codalab에 제출하기

공개된 Multilingual Bert 모델을 써보니 vocab 때문인지 몰라도 조사가 답에 포함되는 경우가 많았다.

예 :
이전 업데이트가 내장 메모리에 저장되었던 것과는 달리 이 업데이트는 최초로 무엇을 요구하는가?
prediction:  저장 장치를 truth :  ['저장 장치']

엑스박스 360의 물품 중  별도로 판매되고 있는 것은?
prediction:  액세서리를 truth :  ['액세서리']

이런 조사 한두글자 덕분에 내 EM이 한 10 정도 낮다...
그래서 예전부터 시도해보려고 한 형태소 분석기를 이용하여 조사를 떼어내어 정확도를 높이는 작업을 해보려고 한다.

Konlpy가 설치된 도커 만들기

일단, konlpy의 코모란을 사용하려고 하는데, codalab에서 konlpy를 이용하려면 konlpy가 설치된 나만의 도커를 만들어서 그 도커를 codalab에서 불러와 실행하야 한다. 그래서 도커를 우선 만들어야 한다.
참고 url : https://github.com/codalab/codalab-worksheets/wiki/Creating-Docker-Images

(새로운 폴더를 만들고,) " Vim Dockerfile"을 입력해 도커파일을 만든다. 파일 내용은 아래와 같다.

# 기본 이미지는 gpu를 쓰기 위해 tensorflow gpu 지원 오피셜 이미지를 쓴다. 파이썬 버전과 tensorflow 버전에 맞춰 쓴다.
FROM tensorflow/tensorflow:1.12.0-gpu-py3
MAINTAINER "dockerhub id" <이메일>
RUN apt-get -y update
# konlpy의 형태소 분석기에 필요한 자바를 설치한다.
RUN apt-get -y install openjdk-8-jdk
# Language pack을 설치하고 환경변수를 설정해주지 않으면 한글을 파일에 쓰지 못한다. 기본 Decoder가 ascii 코드를 쓴다.
RUN apt-get -y install language-pack-ko
ENV LANG ko_KR.UTF-8
RUN pip3 install konlpy

도커 허브에 회원 가입을 한 후에, repository를 만들고, terminal 상에서 "docker login" 명령어를 통해 로그인한다.

이후, "docker build -t 도커허브id/repository이름:태그이름 "을 입력하여 이미지를 생성한다.
그리고 "docker push 도커허브id/repository이름:태그이름 "을 입력하면 konlpy가 설치된 이미지가 docker hub에 업로드 된다.


run_squad.py 수정

이 부분은 사실 크게 중요하지 않은 듯 하다. 알아서 잘 하실 거라 생각한다...

write_predictions 함수 시작 부분에
from konlpy.tag import Komoran
pos_analyzer = Komoran()
를 추가하고,

all_predictions[example.qas_id] = nbest_json[0]["text"]
이 코드에서 사용되는 nbest_json[0]["text"]를 미리 형태소 분석을 통해 마지막에 붙은 조사를 띄어내도록 수정한다.


Codalab에 제출

이전에 작성한 codalab에 korquad 결과를 제출하는 포스트를 참고하여 결과를 확인한다.
--request-docker-image의 값을 내가 생성한 도커로 설정하면 된다.

아직 리더보드에 반영은 되지 않았지만 EM은 확실히 10 정도 올랐다!
F1은 사실 형태소 분석을 통해서 개선되는 부분이 기껏해야 한두글자이고, 많지는 않지만 형태소 분석기가 조사로 잘못 인식해 없애버리는 글자들도 있고 해서 한 1점 정도 올랐다.(로컬 환경과 codalab 상에서 평가한 점수도 차이가 좀 있고)
이정도 점수면 한 16등 할래나... ㅎㅎ

댓글 없음:

댓글 쓰기