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 言語のための事前学習された単語ベクトルは ここ で利用可能です。
以上