Study

한국어 임베딩 - 3.한국어 전처리

빨간당무 2019. 12. 21. 15:43

이 글은 이기창 님의 저서인 한국어 임베딩 내용을 라마인드 하기 위해 정리한 문서입니다. 

https://github.com/ratsgo/embedding/


3. 한국어 전처리 (p.79~)

3.1 데이터 확보 (p.80~)

3.1.1 한국어 위키백과 (p.80~)

코드 3-1 한국어 위키백과 다운로드 (bash) (p.81)

코드 3-2 한국어 위키백과 전처리 (python) (p.81)

코드 3-4 사용자 정의, 한국어 위키 토크나이저 (python) (p.84)

코드 3-5 한국어 위키백과 전과정 자동 전처리 (bash) (p.85)

wikiextractor : 위키백과 정제 라이브러리

https://github.com/attardi/wikiextractor


3.1.2 KorQuAD (p.86~)

한국어 기계 독해(Machine Reading Comprehension)를 위한 데이터셋

https://korquad.github.io/category/1.0_KOR.html v1.0

https://korquad.github.io/ v2.0

코드 3-6 KorQuAD 말뭉치 다운로드 (bash) (p.87)

코드 3-8 KorQuAD 전처리 (python) (p.88)

코드 3-9 KorQuAD 전과정 자동 전처리 (bash) (p.89)


3.1.3 네이버 영화 리뷰 말뭉치 (p.90~)

네이버 영화 페이지의 영화 리뷰들을 평점과 함께 수록한 한국어 말뭉치임. 감성 분석(Sentiment Analysis)과 문서 분류(DocumentClassification)에 적합한 데이터셋

감성은 긍정, 부정으로만 구분함

https://github.com/e9t/nsmc

코드 3-10 네이버 영화 리뷰 데이터셋 다운로드 (bash) (p.90)

코드 3-11 네이버 영화 리뷰 전처리 코드 (python) (p.91)

코드 3-12 네이버 영화 리뷰 자동 전처리 (bash) (p.92)


3.1.4 전처리 완료된 데이터 다운로드 (p.92~)

코드 3-13 전처리 완료된 데이터 다운로드 (bash) (p.92)

표 3-1 전처리 오나료된 데이터 목록 (p.92)


3.2 지도 학습 기반 형태소 분석 (p.93~)

품질 좋은 임베딩을 만들기 위해서는 문장이나 단어의 경계를 컴퓨터에 알려줘야 함.

지도 학습(Supervised Learning)이란 정답이 있는 데이터의 패턴을 학습해 모델이 정답을 맞도록 하는 기법

이번 절에서 설명하는 형태소 분석기들은 언어학 전문가들이 태깅한 형태소 분석 말뭉치로부터 학습된 지도 학습 기반 모델임


3.2.1 KoNLPy 사용법 (p.94~)

KoNLPy는 은전한닢, 꼬꼬마, 한나눔, Okt, 코모란 등 5개 오픈소스 형태소 분석기를 파이썬 환경에서 사용할 수 있도록 인터페이스를 통일한 한국어 자연어 처리 패키지임

https://konlpy-ko.readthedocs.io/ko/v0.4.3/

코드 3-16 get_tokenizer 함수 (python) (p.96)


3.2.2 KoKLPy 내 분석기별 성능 차이 분석

표 3-2 KoNLPy 내 분석기별 속도(단위 : 초) (p.97)

그림 3-1 문자 개수 대비 실행 시간 (p.97)

표 3-3 형태소 분석 품질 비교 (p.98)


3.2.3 Khaiii 사용법 (p.98~)

Khaiii (Kakao Hangul Analyzer III)는 카카오가 공개한 오픈소스 한국어 형태소 분석기임

https://github.com/kakao/khaiii

코드 3-17 Khaiii 클래스 선언 (python) (p.99)

코드 3-18 Khaiii 형태소 분석 (python) (p.99)

코드 3-19 Khaiii의 품사 정보 확인 (python) (p.100)


3.2.4 은전한닢에 사용자 사전 추가하기 (p.100~)

코드 3-20 은전한닢 형태소 분석 예시 (python) (p.100)

코드 3-21 은전한닢 사용자 사전 컴파일 (bash) (p.101)


3.3 비지도 학습 기반 형태소 분석 (p.101)

비지도 학습(Unsupervised Learning)이란 데이터의 패턴을 모델 스스로 학습하게 함으로써 형태소를 분석하게 하는 방법임


3.3.1 soynlp 형태소 분석기

soynlp는 형태소 분석, 품사 판별 등을 지원하는 파이썬 기반 한국어 자연어 처리 패키지임

데이터 패턴을 스스로 학습하는 비지도 학습 접근법을 지향하기 때문에 하나의 문장 혹은 문서에서보다는 어느 정도 규모가 있으면서 동질적인 문서 집합(Homogeneous Documents)에서 잘 작동함

https://github.com/lovit/soynlp

soynlp 패키지에 포함된 형태소 분석기는 데이터의 통계량을 확인해 만든 단어표로 작동함. 단어 점수는 응집 확률(Cohesion Probability)과 브랜칭 엔트로피(Branching Entropy)를 활용함

즉, 주어진 문자열이 유기적으로 연결돼 함께 자주 나타나고(응집 확률이 높을 때), 그 단어 앞뒤로 다양한 조사, 어미 혹은 다른 단어가 등장하는 경우(브랜칭 엔트로피가 높을 때) 해당 문자열을 형태소로 취급함

기존 지도학습 기반 형태소에 반해 말뭉치의 통계량을 바탕으로 하기 때문에 별도의 학습 과정을 거쳐야함

코드 3-22 soynlp 단어 점수 학습 (python) (p.102)

코드 3-23 soynlp 형태소 분석 (python) (p.103)

코드 3-24 soynlp 형태소 분석 전체 실행 스크립트 (bash) (p.104)


3.3.2 구글 센텐스피스

센텐스피스(Sentencepiece)는 구글에서 공개한 비지도 학습 기반 형태소 분석 패키지임

https://github.com/google/sentencepiece

바이트 페어 인코딩(BPE, Byte Pair Encoding) 기법등을 지원함

기본 원리는 말뭉치에서 가장 많이 등장한 문자열을 병합해 문자열을 압축하는 것임

바이트 페어 인코딩을 이용한 토크나이즈는 핵심은 우선 원하는 어휘 집합 크기가 될 때 까지 반복적으로 고빈도 문자열들을 병합해 어휘 집합에 추가함. 이것이 BPE 학습임.

학습이 끝난 이후의 예측 과정은 문장 내 각 어절(띄어쓰기로 문장을 나눈 것)에 어휘 집합에 있는 서브워드(Subword)가 포함돼 있을 경우 해당 서브워드를 어절에서 분리함(최장 일치 기준). 이후 어절의 나머지에서 어휘 집합에 있는 서브워드를 다시 찾고, 또 분리함. 어절 끝까지 찾았는데 어휘 집합에 없으면 미등록 단어(Unknown Word)로 취급함

예를 들어 BPE로 학습한 결과 고빈도 서브워드가 '학교', '밥', '먹었' 등으로 가정할 때

학교에서 밥을 먹었다 → _학교, 에서, _밥, 을, _먹었, 다 (_는 해당 어절의 첫 번째 서브워드임)

코드 3-25 BPE 학습 (python) (p.105)

BERT 모델은 BPE로 학습한 어휘 집합을 사용함

코드 3-26 BERT 어휘 집합 만들기 (bash) (p.106)

코드 3-27 BERT FullTokenizer (python) (p.106)


3.3.3 띄어쓰기 교정 (p.107~)

soynlp는 띄어쓰기 교정 모듈도 제공함. 이 모듈은 말뭉치에서 띄어쓰기 패턴을 학습한 뒤 해당 패턴대로 교정을 수행함

코드 3-28 soynlp 띄어쓰기 모듈 학습 (python) (p.107)

코드 3-29 soynlp 띄어쓰기 교정 (python) (p.107)

soynlp 형태소 분석이나 BPE 방식의 토크나이즈 기법은 띄어쓰기에 따라 분석 결과가 크게 달라지기 때문에 이들 모델을 학습하기 전 띄어쓰기 교정을 먼저 적용하면 그 분석 품질이 개선됨


3.3.4 형태소 분석 완료된 데이터 다운로드

코드 3-30 형태소 분석이 완료된 데이터 다운로드 (bash) (p.108)

표 3-4 형태소 분석 완료된 데이터 목록 (p.108)


3.4 이 장의 요약

- 임베딩 학습용 말뭉치는 라인 하나가 문서면 좋음. 한국어 위키백과, KorQuAD, 네이버 영화 리뷰 말뭉치 등을 이같이 전처리함

- 지도 학습 기반의 형태소 분석 모델은 언어학 전문가들이 태깅한 형태소 분석 말뭉치로부터 학습된 기법들임. 이 모델들은 문자열이 주어졌을 때 사람이 알려준 정답 패턴에 최대한 가깝게 토크나이즈함. KoNLPy, Khaiii 등이 이 부류에 속함

- 비지도 학습 기반의 형태소 분석 모델은 데이터의 패턴을 모델 스스로 학습하게 함으로써 형태소를 나누는 기법임. 데이터에 자주 등장하는 단어들을 형태소로 인식함. soynlp, 구글 센텐스피스 등이 이 부류에 속함