Bite Bits/Data Science

한국어 문서 데이타 딥러닝 실습 (feat. doc2vec, mecab-ko)

상영 2018. 8. 1. 17:07

doc2vec 에 대한 강좌 혹은 학습 가능한 글을 찾아보다가 어떤 분의 연재글이 있어 그것을 바탕으로 실습을 진행하는 과정에 대한 내용.



1. 한국어 위키피디아 덤프 다운로드 받기

http://kugancity.tistory.com/entry/한국어-위키피디아-덤프-다운로드-받기

위키피디아 데이터베이스 다운받기 : https://ko.wikipedia.org/wiki/위키백과:데이터베이스_다운로드

데이타 파일 경로 : https://dumps.wikimedia.org/kowiki/latest/kowiki-latest-pages-articles.xml.bz2



2. 위키 덤프 데이터 파싱하기

http://kugancity.tistory.com/entry/한국어-뉴스-데이터로-딥러닝-시작하기-2-위키-덤프-데이터-파싱하기

도구 파일(Python) : https://github.com/attardi/wikiextractor

> python WikiExtractor.py kowiki-latest-pages-articles.xml.bz2



3. 위키 데이터 한국어 형태소 태깅하기

http://kugancity.tistory.com/entry/한국어-뉴스-데이터로-딥러닝-시작하기-위키-데이터-한국어-형태소-태깅하기

* 수행 : mecab-ko, mecab-ko-dic 설치 

mecab 은 리눅스 설치 소스를 제공, 윈도 설치는 다른 방법 필요. (이미 만들어놓은 windows 릴리즈를 설치하는게 편함)

윈도우용 릴리즈 설치 참고 => http://sooyeol86.blogspot.com/2018/01/elasictsearch-with-for-windows_26.html

설치 후, 사용자 사전 추가 : https://github.com/Pusnow/mecab-ko-dic-msvc/blob/master/user-dic/README.md


== 기타 참고 ==

Mingw 를 이용한 설치 : http://hasunjjang.blogspot.com/2017/04/mecab.html  (완벽한 설명 아니고 참고할만 함 VisualStudio 가 필요)

Visual C++ 이용 설치 : https://groups.google.com/forum/#!topic/eunjeon/Dzohqj4n3QI 




C:\mecab>mecab -o v:\mecab_out.txt v:\mecab.txt


== mecab.txt ==

mecab-ko-dic은 MeCab을 사용하여, 한국어 형태소 분석을 하기 위한 프로젝트입니다.


== mecab_out.txt ==

mecab SL,*,*,*,*,*,*,*

- SY,*,*,*,*,*,*,*

ko SL,*,*,*,*,*,*,*

- SY,*,*,*,*,*,*,*

dic SL,*,*,*,*,*,*,*

JX,*,T,은,*,*,*,*

MeCab SL,*,*,*,*,*,*,*

JKO,*,T,을,*,*,*,*

사용 NNG,*,T,사용,*,*,*,*

XSV,*,F,하,*,*,*,*

EC,*,F,여,*,*,*,*

, SC,*,*,*,*,*,*,*

한국어 NNG,*,F,한국어,Compound,*,*,한국/NNG/*+어/NNG/*

형태소 NNG,*,F,형태소,Compound,*,*,형태/NNG/*+소/NNG/*

분석 NNG,*,T,분석,*,*,*,*

JKO,*,T,을,*,*,*,*

VV,*,F,하,*,*,*,*

ETN,*,F,기,*,*,*,*

위한 VV+ETM,*,T,위한,Inflect,VV,ETM,위하/VV/*+ᆫ/ETM/*

프로젝트 NNG,*,F,프로젝트,*,*,*,*

입니다 VCP+EF,*,F,입니다,Inflect,VCP,EF,이/VCP/*+ᄇ니다/EF/*

. SF,*,*,*,*,*,*,*

EOS




4. doc2vec 모델 훈련하기

http://kugancity.tistory.com/m/entry/4-doc2vec훈련하기

* 수행 : python 3.7 (64bit), 패키지 gensim 설치  (word2vec, doc2vec 사용을 위해)

* 자료 다운로드 : https://github.com/roboreport/doc2vec-api/

위 자료 다운로드 페이지에서 "Korean Wikipedia / mecab pos tokenizer / no tag info (535MB)" 부분의 자료를 다운받으면

"wiki_pos_tokenizer_without_taginfo.txt" 파일을 구할 수 있다.

이 파일이 "2.위키 덤프 데이터 파싱하기" 에서 구한 다수의 파일을 합해놓은 -xml 태그를 분리하고- 파일 같다.


gensim 코드를 넣어 프로그램을 돌리면, 

c:\python37\lib\site-packages\gensim\models\base_any2vec.py:618: UserWarning: C extension not loaded, training will be slow. Install a C compiler and reinstall gensim for fast training.

  "C extension not loaded, training will be slow. "

이런 메세지를 보는 경우가 있다. 찾아보니 이건 numpy 대신 cython 을 이용하게 코드를 재작성한 부분이 있는데, 설치 할 때 컴파일러가 있으면 이 기능이 활성화되어 속도를 빠르게 처리할 수 있단다.

(* 참고 : https://radimrehurek.com/gensim/models/word2vec.html )

리눅스의 경우는 대응 방안을 쉽게 검색할 수 있는데, Windows 의 경우, 제법 난감.

참고 사이트를 보고 mingw64 나 visual c++ 경로를 path 에 넣어보기도 했지만..

pip 로 공식 패키지를 설치하면 아래의 코드에서 계속 -1 이 나옴.  ( > pip install gensim )

from gensim.models import word2vec

print(word2vec.FAST_VERSION)


결국, python 패키지 사이트에서 이미 만들어진 패키지를 받아서 설치하고 확인하니 '0' 이 나옴. 

>pip install v:\gensim-3.5.0-cp37-cp37m-win_amd64.whl

이걸로 만족하기로 함.


* 참고 : 

- Word2Vec으로 문장 분류하기, https://ratsgo.github.io/natural%20language%20processing/2017/03/08/word2vec/

- gensim ValueError: You must specify either total_examples.. 관련, https://github.com/RaRe-Technologies/gensim/issues/1956

- Enable C Extension for gensim on Windows, https://bebound.github.io/posts/enable-c-extension-for-gensim-on-windows/


훈련된 모델을 생성하려고 프로그램을 돌렸으나... 너무 오래 걸린다. 

from gensim.models import doc2vec

import sys

import multiprocessing


cores = multiprocessing.cpu_count()


#doc2vec parameters

vector_size = 300

window_size = 15

word_min_count = 2

sampling_threshold = 1e-5

negative_size = 5

train_epoch = 10

dm = 1 # {0:dbow, 1:dmpv}

worker_count = cores  # number of parallel processes


ROOT_DIR = "F:\\work_tmp\\wiki\\"

inputfile = ROOT_DIR + "wiki_pos_tokenizer_without_taginfo.txt" 

modelfile = ROOT_DIR + "model\\wiki_pos_tokenizer_without_taginfo.doc2vec.model"

word2vec_file = modelfile + ".word2vec_format"


sentences = doc2vec.TaggedLineDocument(inputfile)


#build voca

model = doc2vec.Doc2Vec(min_count=word_min_count, vector_size=vector_size, 

                                 alpha=0.025, min_alpha=0.025, seed=1234, workers=worker_count)

model.build_vocab(sentences)


# Train document vectors

model.train(sentences, epochs=model.iter, total_examples=model.corpus_count)

    

# To save

model.save(modelfile)

model.save_word2vec_format(word2vec_file, binary=False)


파일은 생겼다. save 함수 결과인듯 한데.. 명시적으로 지정한 파일 외에 다른 것들이 같이 생겼다.

그리고.. 프로그램 종료메세지가 뜨지 않는다. 30분 정도 프로그램이 돌았을 때, 파일이 생성되었지만,

프로그램 종료 메시지가 보이지 않아 하루밤을 그냥 뒀는데, 그래도 상태는 동일

생성된 파일 사이즈도 변하지 않은듯.. 그냥 프로그램 실행창을 강제종료 시켰다.


* 지금까지 강좌의 흐름을 보면 wiki 에서 파일을 다운받지만, 이것을 태깅하고 doc2vec 기능을 위한 input 파일을 만드는 과정에 대한 설명은 빠져있는 것 같다. 기껏 설치한 mecab 은 독학용으로 남겨둬야 할듯. doc2vec 만을 본다면 4강부터가 진짜인듯. 어쩌면 4강만 일지도.. 


위에서 훈련된 model 을 이용해서 실습을 진행해본다.

import gensim

import sys


ROOT_DIR = "F:\\work_tmp\\wiki\\"

modelfile = ROOT_DIR + "model/wiki_pos_tokenizer_without_taginfo.doc2vec.model"


model = gensim.models.Doc2Vec.load(modelfile)




5. 한국어 word2vec 데모 사이트 만들기

http://kugancity.tistory.com/entry/한국어-뉴스-데이터로-딥러닝-시작하기-5-한국어-word2vec-데모-사이트-만들기


6. doc2vec으로 문사 유사도 측정하기 

http://kugancity.tistory.com/entry/한국어-뉴스-데이터로-딥러닝-시작하기5-doc2vec으로-문사-유사도-측정하기