fastText

fastText (翻訳/解説)

翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 05/14/2017

  • 本ページは、github 上の facebookresearch/fastText の README.md を動作確認・翻訳した上で
    適宜、補足説明したものです:
    https://github.com/facebookresearch/fastText/blob/master/README.md

  • cite 記載については原文を参照してください。
  • ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。

 

fastText は単語表現とセンテンス分類の効率的な学習のためのライブラリです。

 

要件

fastText は現代的な MacOS と Linux ディストリビューションの上でビルドされます。C++11 機能を使用しますので、良い C++11 サポートを持つコンパイラが必要です。それらは以下を含みます :

  • (gcc-4.6.3 またはそれ以上) または (clang-3.3 またはそれ以上)

コンパイルは Makefile を使用して実行されますので、動作する make を持つことも必要でしょう。単語類似 (word-similarity) 評価スクリプトのためには以下が必要です :

  • python 2.6 またはそれ以上
  • numpy & scipy

 

fastText をビルドする

fastText をビルドするためには、次を使用します :

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

これは主要なバイナリ fasttext に加えてすべてのクラスのためのオブジェクト・ファイルを生成します。デフォルトのシステムワイドなコンパイラを使用することを計画しないのであれば、Makefile の最初で定義された2つのマクロ (CC と INCLUDES) を更新してください。

 

サンプル実行例

このライブラリは2つの主要なユースケースを持ちます : 単語表現学習とテキスト分類です。これらは2つの論文 (1) と (2) に記述されています。(訳注: 後述のリファレンス参照)

単語表現学習

単語ベクトルを学習するためには、(1) に記述されているように、以下を行います :

$ ./fasttext skipgram -input data.txt -output model

ここで data.txt は utf-8 encoded テキストを含む訓練ファイルです。デフォルトでは単語ベクトルは 3 から 6 文字の文字 n-gram を考慮します。最適化の最後にプログラムは2つのファイルを保存します : model.bin と model.vec です。model.vec は、一行に一つ、単語ベクトルを含むテキストファイルです。model.bin は辞書とすべてのハイパー・パラメータに連動するモデルのパラメータを含むバイナリファイルです。バイナリファイルは単語ベクトルを計算したり最適化を再開するために後で使用できます。

未定義語 (out-of-vocabulary words) のための単語ベクトルを得る

事前に訓練されたモデルは未定義語のための単語ベクトルを計算するために使用できます。ベクトルを計算することを望む、単語を含むテキストファイル queries.txt を持つとすると次のコマンドを使用します :

$ ./fasttext print-word-vectors model.bin < queries.txt

これは単語ベクトルを標準出力に、一行毎に一つのベクトルを出力します。これはパイプでも使用できます :

$ cat queries.txt | ./fasttext print-word-vectors model.bin

サンプルとしては提供されているスクリプトを見てください。例えば、以下の実行は :

$ ./word-vector-example.sh

コードをコンパイルし、データをダウンロードし、単語ベクトルを計算して rare words similarity dataset RW [Thang et al. 2013] 上でそれらを評価します。

テキスト分類

ライブラリはまた教師ありテキスト分類にも利用できます、例えばセンチメント解析のためです。(2) に記述されているメソッドを使用してテキスト分類器を訓練するためには、以下のように使用します :

$ ./fasttext supervised -input train.txt -output model

ここで train.txt はラベルと一緒に行毎に訓練センテンスを含むテキストファイルです。デフォルトでは、ラベルは文字列 __label__ で prefix される単語であると仮定します。これは2つのファイルを出力します : model.bin と model.vec です。モデルが訓練されれば、テストセット上で以下を使用することで精度 (precision) と k 再現率 (recall) (P@k と R@k) を計算することでそれを評価できます :

$ ./fasttext test model.bin test.txt k

文かパラグラフのベクトル表現を計算することを望むのであれば、以下のように使用してください :

$ ./fasttext print-sentence-vectors model.bin < text.txt

これはtext.txt ファイルがベクトルを得たいパラグラフを含むことを仮定しています。プログラムはファイルの行毎に一つのベクトル表現を出力します。

次のコマンドでメモリ使用量を減少させるために教師ありモデルを数値化することもまたできます :

$ ./fasttext quantize -output model

これはより小さなメモリ・フットプリント (メモリ使用量) で .ftz ファイルを作成します。テストや予想のような標準的な機能は、数値化されたモデル上でも同じように動作します :

$ ./fasttext test model.ftz test.txt

数値化手続きは (3) で記述されているステップを追随しています。サンプルのためにはスクリプト quantization-example.sh を実行できます。

 

完全な文書化

利用可能な引数とそれらのデフォルト値をリストするためには引数なしでコマンドを起動します :

$ ./fasttext supervised
Empty input or output path.

The following arguments are mandatory:
  -input              training file path
  -output             output file path

  The following arguments are optional:
  -verbose            verbosity level [2]

  The following arguments for the dictionary are optional:
  -minCount           minimal number of word occurences [5]
  -minCountLabel      minimal number of label occurences [0]
  -wordNgrams         max length of word ngram [1]
  -bucket             number of buckets [2000000]
  -minn               min length of char ngram [3]
  -maxn               max length of char ngram [6]
  -t                  sampling threshold [0.0001]
  -label              labels prefix [__label__]

  The following arguments for training are optional:
  -lr                 learning rate [0.05]
  -lrUpdateRate       change the rate of updates for the learning rate [100]
  -dim                size of word vectors [100]
  -ws                 size of the context window [5]
  -epoch              number of epochs [5]
  -neg                number of negatives sampled [5]
  -loss               loss function {ns, hs, softmax} [ns]
  -thread             number of threads [12]
  -pretrainedVectors  pretrained word vectors for supervised learning []
  -saveOutput         whether output params should be saved [0]

  The following arguments for quantization are optional:
  -cutoff             number of words and ngrams to retain [0]
  -retrain            finetune embeddings if a cutoff is applied [0]
  -qnorm              quantizing the norm separately [0]
  -qout               quantizing the classifier [0]
  -dsub               size of each sub-vector [2]

デフォルトはモードにより多様です。 (Word-representation modes skipgram and cbow use a default -minCount of 5.)

 

リファレンス

このコードを学習単語表現のために使用する場合は (1) をまたテキスト分類のために使用する場合は (2) を cite してください。
* 訳注 : cite 記載については原文を参照してください。

Enriching Word Vectors with Subword Information

[1] P. Bojanowski*, E. Grave*, A. Joulin, T. Mikolov, Enriching Word Vectors with Subword Information

Bag of Tricks for Efficient Text Classification

[2] A. Joulin, E. Grave, P. Bojanowski, T. Mikolov, Bag of Tricks for Efficient Text Classification

FastText.zip: Compressing text classification models

[3] A. Joulin, E. Grave, P. Bojanowski, M. Douze, H. Jégou, T. Mikolov, FastText.zip: Compressing text classification models

 

リソース

[2] で使用された前処理された YFCC100M データは https://research.facebook.com/research/fasttext/ で見つかります。

294 言語のための事前学習された単語ベクトルは ここ で利用可能です。

 

以上