web-dev-qa-db-ja.com

テキスト分類に事前トレーニング済みの単語ベクトルを使用したFastText

私はテキスト分類の問題に取り組んでいます。つまり、テキストが与えられた場合、特定のラベルを割り当てる必要があります。

Facebookの高速テキストライブラリを使用してみました。これには、次の2つのユーティリティがあります。

A)事前にトレーニングされたモデルを使用した単語ベクトル

B)テキスト分類ユーティリティ

ただし、これら2つのユーティリティをマージするチュートリアルが見つからなかったため、これらは完全に独立したツールのようです。

私が欲しいのは、Word-Vectorsの事前にトレーニングされたモデルを利用して、いくつかのテキストを分類できるようにすることです。これを行う方法はありますか?

8
JarvisIA

FastTextのネイティブ分類モードは、既知のクラスのテキストを使用して、Wordベクトルを自分でトレーニングするかどうかに依存します。したがって、単語ベクトルは、トレーニング中に観察される特定の分類に役立つように最適化されます。そのため、このモードは通常、事前にトレーニングされたベクトルで使用されます使用されません

事前にトレーニングされた単語ベクトルを使用する場合は、何らかの方法でそれらを自分でテキストベクトルに構成し(たとえば、テキストのすべての単語を平均することによって)、別の分類子(多くのオプションの1つなど)をトレーニングします。 scikit-learnから)これらの機能を使用します。

2
gojomo

FastTextの教師ありトレーニングには、次のように使用できる-pretrainedVectors引数があります。

$ ./fasttext supervised -input train.txt -output model -Epoch 25 \
       -wordNgrams 2 -dim 300 -loss hs -thread 7 -minCount 1 \
       -lr 1.0 -verbose 2 -pretrainedVectors wiki.ru.vec

考慮すべき点はほとんどありません。

  • 埋め込みの選択された次元は、事前にトレーニングされたベクトルで使用される次元に適合している必要があります。例えば。 for Wikiワードベクトル は300でなければなりません。これは-dim 300引数によって設定されます。
  • 2018年2月中旬の時点で、Python API(v0.8.22)は事前トレーニング済みベクトルを使用したトレーニングをサポートしていません(対応するパラメーターは無視されます)。したがって、CLI(コマンドラインインターフェイス)バージョンを使用する必要があります。ただし、事前にトレーニングされたベクトルを使用してCLIによってトレーニングされたモデルは、Python APIによってロードされ、予測に使用できます。
  • 多数のクラス(私の場合は340個ありました)の場合、CLIでさえ例外を除いて破損する可能性があるため、階層的なソフトマックス損失関数(-loss hs)を使用する必要があります。
  • 階層型ソフトマックスは通常のソフトマックスよりもパフォーマンスが悪いため、事前にトレーニングされた埋め込みから得られるすべてのゲインを放棄する可能性があります。
  • 事前にトレーニングされたベクトルでトレーニングされたモデルは、トレーニングされていないモデルよりも数倍大きくなる可能性があります。
  • 私の観察では、事前にトレーニングされたベクトルでトレーニングされたモデルは、トレーニングされていないモデルよりも早く過剰適合します。
29