개요

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

바이너리 이용을 편하게 하기 위해 아래와 같은 설정을 쉘 프로파일에 설정해준다.

export PATH=$PATH:/kwangsiklee/repo/fasttext/fastText-0.1.0

파이썬 사용을 위한 빌드

python 사용을 위한 fasttext는 아래와 같이 빌드 및 설치 가능하다.

$ git clone https://github.com/facebookresearch/fastText.git
$ cd fastText
$ pip install .

모델링

모델링 방법은 아래와 같다. 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를 모델링한 벡터파일이 생긴다.

$ ls README.model*
README.model.bin  README.model.vec

위에서 모델링 할때 단어의 수가 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을 참고하자.