fastText : README.md (翻訳)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 07/05/2018 (0.1.0)
FAIR の fastText は単語表現とセンテンス分類の効率的な学習のためのライブラリです。
0.1.0 でドキュメントが整備されましたので、再翻訳しています。
* 本ページは、github 上の facebookresearch/fastText の README.md を動作確認・翻訳した上で
適宜、補足説明したものです:
* citation 表記については 原文 を確認してください。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
fastText は単語表現とセンテンス分類の効率的な学習のためのライブラリです。
リソース
モデル
- 最近の最先端技術の 英語単語ベクトル
- Wikipedia と Crawl 上で訓練された 157 言語 のための単語ベクトル
- 言語識別 と様々な 教師ありタスク のためのモデル
補足データ
[2] で使用される前処理された YFCC100M データ。
FAQ
Web サイトで FAQ への回答 を見つけることができます。
チートシート
非常に有用なワンライナーの チートシート もまた提供しています。
要件
私達のライブラリ、CLI そして Python バインディングを circleci を使用して幾つかの docker イメージ下で連続的に構築してテストしています。
一般的には、fastText は現代的な MacOS と Linux ディストリビューションの上でビルドされます。それは C++11 機能を使用しますので、良い C++11 サポートを持つコンパイラが必要です。それらは以下を含みます :
- (g++-4.7.2 またはそれ以上) または (clang-3.3 またはそれ以上)
コンパイルは Makefile を使用して実行されますので、動作する make を持つことも必要でしょう。cmake を使用することを望む場合には少なくとも version 2.8.9 が必要です。
CLI を成功的にビルドしてテストした最も古いディストリビューションの一つは Debian wheezy です。
単語類似 (word-similarity) 評価スクリプトのためには以下が必要です :
- Python 2.6 またはそれ以上
- NumPy & SciPy
python バインディングのためには (サブディレクトリ python 参照) 以下が必要です :
- Python version 2.7 or >=3.4
- NumPy & SciPy
- pybind11
Python バインディングを成功的にビルドしてテストした最も古いディストリビューションの一つは Debian jessie です。
fastText をビルドする
fastText の最新ステーブル版のビルドを議論します。
ソースコードを取得する
最新ステーブル版 を通常の場所で見つけることができます。
最も最新のワークの総てを含む master ブランチもまたありますが、unstable ブランチの通常の caveats 総ても一緒についてきます。貴方が開発者かパワーユーザである場合にはこれを使用することを望むかも知れません。
make を使用して fastText をビルドする (推奨)
$ wget https://github.com/facebookresearch/fastText/archive/v0.1.0.zip $ unzip v0.1.0.zip $ cd fastText-0.1.0 $ make
これは主要なバイナリ fasttext に加えてすべてのクラスのためのオブジェクト・ファイルを生成します。デフォルトのシステムワイドなコンパイラを使用することを計画しないのであれば、Makefile の冒頭で定義された2つのマクロ (CC と INCLUDES) を更新してください。
cmake を使用して fastText をビルドする
今のところこれはリリースの一部ではありませんので、master ブランチを clone する必要があります。
$ git clone https://github.com/facebookresearch/fastText.git $ cd fastText $ mkdir build && cd build && cmake .. $ make && make install
これは fasttext バイナリと総ての関連ライブラリ (共有、静的、PIC) を作成します。
Python のために fastText をビルドする
今のところこれはリリースの一部ではありませんので、master ブランチを clone する必要があります。
$ git clone https://github.com/facebookresearch/fastText.git $ cd fastText $ pip install .
更なる情報とイントロダクションのためには python/README.md を見てください。
サンプル使用事例
このライブラリは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
引数 k はオプションで、デフォルトでは 1 に等しいです。
テキストのピースのための k 最尤ラベルを得るためには :
$ ./fasttext predict model.bin test.txt k
あるいは各ラベルのための確率も得るためには predict-prob を使用します :
$ ./fasttext predict-prob model.bin test.txt k
ここで test.txt は行毎に分類するためのテキストのピースを含みます。そのようにすれば標準出力に各行のための k 最尤ラベルをプリントします。引数 k はオプションで、デフォルトは 1 に等しいです。サンプル・ユースケースのためには classification-example.sh を見てください。ペーパー 2 からの結果を再生成するためには、classification-results.sh を実行してください、これは総てのデータセットをダウンロードして表 1 からの結果を再生成します。
文かパラグラフのベクトル表現を計算することを望むのであれば、以下のように使用してください :
$ ./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 [1] -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 [0] -maxn max length of char ngram [0] -t sampling threshold [0.0001] -label labels prefix [__label__] The following arguments for training are optional: -lr learning rate [0.1] -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} [softmax] -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]
デフォルトはモードにより多様です。 (単語表現モード skipgram と cbow はデフォルト -minCount of 5 を使用します)
リファレンス
このコードを学習単語表現のために使用する場合は (1) をまたテキスト分類のために使用する場合は (2) を cite してください。
* 訳注 : citation 表記については 原文 を確認してください。
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
以上