개요
word2vec을 쉽게 돌릴수 있는 바이너리인 FastText 사용법에 대해 정리해둔다.
글의 전제인 word2vec에 대한 설명이나 정보는 구글링을 통해 따로 공부하면 좋을듯 하다.
fastText 바이너리 빌드
빌드는 아래와 같이 가능하다. 더 최신버전이 있는지는 [Facebook github][https://github.com/facebookresearch/fastText]에서 체크하면 좋을듯 하다.
아래와 같이 빌드하고 나면 해당 디렉토리의 fasttext 바이너리 실행을 통해 fasttext를 이용할 수 있다.
$ wget https://github.com/facebookresearch/fastText/archive/v0.1.0.zip
$ unzip v0.1.0.zip
$ cd fastText-0.1.0
$ make
바이너리 이용을 편하게 하기 위해 아래와 같은 설정을 쉘 프로파일에 설정해준다.
파이썬 사용을 위한 빌드
python 사용을 위한 fasttext는 아래와 같이 빌드 및 설치 가능하다.
모델링
모델링 방법은 아래와 같다. fasttext 디렉토리에 존재하는 README.md 파일을 재미삼아 한번 돌려보자.
$ ./fasttext skipgram -input README.md -output README.model
Read 0M words
Number of words: 54
Number of labels: 0
Progress: 100.0% words/sec/thread: 374 lr: 0.000000 loss: 0.000000 eta: 0h0m
추가적인 fasttext의 사용법은 아래와 같다.
$ ./fasttext --help
usage: fasttext <command> <args>
The commands supported by fasttext are:
supervised train a supervised classifier
quantize quantize a model to reduce the memory usage
test evaluate a supervised classifier
predict predict most likely labels
predict-prob predict most likely labels with probabilities
skipgram train a skipgram model
cbow train a cbow model
print-word-vectors print word vectors given a trained model
print-sentence-vectors print sentence vectors given a trained model
nn query for nearest neighbors
analogies query for analogies
검증하기
모델링이 끝나고 나면 아래와 같이 README.md를 모델링한 벡터파일이 생긴다.
위에서 모델링 할때 단어의 수가 54개라고 분석되었으므로 당연히 54개의 열벡터가 나와야 한다.
이를 확인하기 위해 README.model.vec를 열어보면 첫째줄에 54개의 단어라는 표시가 있고 열벡터의 길이는 100이라고 기재되어 있다.
그 다음줄부터는 단어명 및 벡터값이 정의되어있다.
마지막 줄까지 가보면 55줄임을 알수 있고 메타정보를 언급한 첫째줄을 제외하면 54개의 벡터가 열거되어 있음을 알 수 있다.
README.model.bin의 경우 바이너리 형태로 모델의 파라미터, 모든 단어, 하이퍼파리미터를 포함한다고 github에 기재되어 있다.
또한 이 바이너리 파일은 나중에 단어 벡터를 계산하거나 최적화를 다시 시작할때 쓰이는데 아래와 같은 케이스가 있다.
out-of-vocabulary words 벡터
“apple”이라는 README.md에 없던 단어를 통해 다시 fastText를 돌려보자.
그러면 거기에 맞는 벡터를 생성해준다.
$ echo "apple" | ./fasttext print-word-vectors README.model.bin
apple -0.0021363 0.0025288 -0.00027748 -0.001997 0.00044791 0.0016863 0.00026781 -0.0012486 -0.0023731 0.0010456 3.9853e-05 0.0018177 0.00032286 0.00066807 0.00073083 -0.00057374 0.0017348 -0.000706 -7.552e-06 -0.00026518 0.00244 -7.7464e-05 0.0021417 0.0012285 -0.00037503 1.6474e-06 -0.0012556 0.00053511 -0.00056634 -0.0028791 -0.0012102 -0.00018835 0.0017466 0.0011133 -0.0021728 -0.00048103 -0.002439 -0.00030809 0.00045755 -4.5784e-05 0.00093973 -0.00033661 0.00040459 -2.1527e-05 0.00016973 8.2231e-05 0.003456 0.002827 -0.0014806 0.0018803 0.0010133 0.0003646 0.0030952 -0.0026822 0.00043537 0.0021863 0.00022536 0.0021277 -0.00054426 0.0024552 0.0020147 0.0028089 0.00057189 -0.0031679 -4.1554e-05 0.0017678 -0.00090503 0.00082646 -0.0004677 -0.0011837 0.000221 0.0013353 -8.4692e-05 0.00038216 -6.9659e-05 0.0021196 0.00033327 0.00037883 0.0024317 -0.00076687 -0.0020686 -0.0021792 -0.0022717 -0.00041565 0.0013215 -0.0016099 0.0038082 0.0016801 -0.00047808 -0.0013502 0.0013747 -0.00097712 -0.0014756 -0.0031278 -0.0011097 -0.0050172 -0.0018817 0.0012338 0.00033363 -0.0020754
Text classification
Text classification 방법은 예를들어 Sentimental Analysis등의 Supervised Learning에 fastText를 쓸 수 있다는 것이다.
자세한 방법은 github을 참고하자.