Word2vecを使用して、大きなドキュメントからトークンのリストのベクトルを生成しました。文を指定すると、文のトークンのベクトルから文のベクトルを取得できますか。
文ベクトルを取得するには、さまざまな方法があります。
文のベクトルを取得する方法はいくつかあります。各アプローチには利点と欠点があります。どちらを選択するかは、ベクターで実行するタスクによって異なります。
まず、Word2vecのベクトルを単純に平均化できます。 Le and Mikolov によれば、このアプローチは「標準的なバッグオブモデルモデルと同じようにワードの順序を失う」と「失敗する」ため、センチメント分析タスクのパフォーマンスが低下します。多くの洗練された言語現象、たとえば皮肉を認識するために」。一方、 Kenter et al。2016 によれば、「テキスト内のすべての単語の単語埋め込みを単純に平均化することは、多数のタスクにわたる強力なベースラインまたは機能であることが証明されています」テキスト類似タスク。バリアントは、最も一般的な単語の影響を減らすために、WordベクトルにTF-IDFを重み付けすることです。
Socher et al。 によって開発されたより洗練されたアプローチは、行列ベクトル演算を使用して、文の解析ツリーで指定された順序でWordベクトルを結合することです。このメソッドは構文解析に依存するため、文の感情分析に有効です。
可能ですが、Word2vecからはできません。文(および段落と文書)の高レベルの表現を取得するためのWordベクトルの構成は、非常に活発な研究トピックです。これを行うための最適なソリューションはありません。これらのベクトルをどのタスクに適用するかによって異なります。連結、単純な総和、点ごとの乗算、畳み込みなどを試すことができます。これに関するいくつかの出版物から学ぶことができますが、最終的には実験して自分に最適なものを確認する必要があります。
それは使用法に依存します:
1)既知のデータの文ベクトルのみを取得する場合。これらの論文の段落ベクトルをご覧ください。
Quoc V. LeとTomas Mikolov。 2014.文章と文書の分散表現。 Eprint Arxiv、4:1188–1196。
A. M. Dai、C。Olah、およびQ. V. Le。 2015. Paragraph VectorsによるDocumentEmbedding。 ArXiv e-prints、7月。
2)モデルに教師なしアプローチで未知の(テスト)文の文ベクトルを推定させる場合:
次の論文をご覧ください。
3)研究者は、RNNまたはLSTMネットワークの特定の層の出力も探しています。最近の例は次のとおりです。
http://www.aaai.org/ocs/index.php/AAAI/AAAI16/paper/view/12195
4)gensim doc2vecについて、多くの研究者は、事前に訓練されたWordベクトルに基づいたdoc2vecを使用した論文に従って、この問題を克服するための良い結果を得ることができませんでした。
Facebookには、文ベクトルの品質を評価するためのSentEvalプロジェクトがあります。
https://github.com/facebookresearch/SentEval
6)次のペーパーに詳細情報があります。
言い換え同定、意味的テキスト類似性、自然言語推論、および質問応答のためのニューラルネットワークモデル
そして今のところ、「BERT」を使用できます。
Googleはソースコードと事前学習済みのモデルをリリースします。
https://github.com/google-research/bert
そして、以下はbertをサービスとして実行する例です:
トレーニングフェーズ中に文のベクトル表現を取得できます(テストに参加して、単一のファイルで文をトレーニングし、次のリンクから取得したWord2vecコードを実行します)。
Statement2vecのコードは、Tomas Mikolov here によって共有されています。行の最初のWordが文IDであると想定しています。を使用してコードをコンパイルします
gcc Word2vec.c -o Word2vec -lm -pthread -O3 -march=native -funroll-loops
を使用して実行します
./Word2vec -train alldata-id.txt -output vectors.txt -cbow 0 -size 100 -window 10 -negative 5 -hs 0 -sample 1e-4 -threads 40 -binary 0 -iter 20 -min-count 1 -sentence-vectors 1
編集
Gensim(開発版)には、新しい文のベクトルを推測する方法があるようです。 https://github.com/gojomo/gensim/blob/develop/gensim/models/doc2vec.py のmodel.infer_vector(NewDocument)
メソッドを確認してください。
私は以下から良い結果を得ました:
GoogleのUniversal Sentence Encoder埋め込みは、この問題に対する更新されたソリューションです。 Word2vecは使用しませんが、競合するソリューションになります。