web-dev-qa-db-ja.com

文のトークンのWord2vecから文のベクトルを取得する方法

Word2vecを使用して、大きなドキュメントからトークンのリストのベクトルを生成しました。文を指定すると、文のトークンのベクトルから文のベクトルを取得できますか。

61
trialcritic

文ベクトルを取得するには、さまざまな方法があります。

  1. Doc2Vec:Doc2Vecを使用してデータセットをトレーニングしてから、文ベクトルを使用できます。
  2. Word2Vecベクトルの平均:文のすべてのWordベクトルの平均を取ることができます。この平均ベクトルは、文ベクトルを表します。
  3. TF-IDFを使用したWord2Vecベクトルの平均:これは、私が推奨する最良のアプローチの1つです。 Wordベクトルを取得し、TF-IDFスコアで乗算します。平均を取るだけで、それは文ベクトルを表します。
74
neel

文のベクトルを取得する方法はいくつかあります。各アプローチには利点と欠点があります。どちらを選択するかは、ベクターで実行するタスクによって異なります。

まず、Word2vecのベクトルを単純に平均化できます。 Le and Mikolov によれば、このアプローチは「標準的なバッグオブモデルモデルと同じようにワードの順序を失う」と「失敗する」ため、センチメント分析タスクのパフォーマンスが低下します。多くの洗練された言語現象、たとえば皮肉を認識するために」。一方、 Kenter et al。2016 によれば、「テキスト内のすべての単語の単語埋め込みを単純に平均化することは、多数のタスクにわたる強力なベースラインまたは機能であることが証明されています」テキスト類似タスク。バリアントは、最も一般的な単語の影響を減らすために、WordベクトルにTF-IDFを重み付けすることです。

Socher et al。 によって開発されたより洗練されたアプローチは、行列ベクトル演算を使用して、文の解析ツリーで指定された順序でWordベクトルを結合することです。このメソッドは構文解析に依存するため、文の感情分析に有効です。

23

可能ですが、Word2vecからはできません。文(および段落と文書)の高レベルの表現を取得するためのWordベクトルの構成は、非常に活発な研究トピックです。これを行うための最適なソリューションはありません。これらのベクトルをどのタスクに適用するかによって異なります。連結、単純な総和、点ごとの乗算、畳み込みなどを試すことができます。これに関するいくつかの出版物から学ぶことができますが、最終的には実験して自分に最適なものを確認する必要があります。

23
Claudiu

それは使用法に依存します:

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)モデルに教師なしアプローチで未知の(テスト)文の文ベクトルを推定させる場合:

次の論文をご覧ください。

スティーブンドゥーとシーチャン。2016。SemEval-2016でのAicyberタスク4:iベクトルベースの文章表現。第10回国際セマンティック評価国際ワークショップ(SemEval 2016)、サンディエゴ、米国

3)研究者は、RNNまたはLSTMネットワークの特定の層の出力も探しています。最近の例は次のとおりです。

http://www.aaai.org/ocs/index.php/AAAI/AAAI16/paper/view/12195

4)gensim doc2vecについて、多くの研究者は、事前に訓練されたWordベクトルに基づいたdoc2vecを使用した論文に従って、この問題を克服するための良い結果を得ることができませんでした。

Jey Han Lau and Timothy Baldwin(2016)。文書埋め込み世代への実践的洞察によるdoc2vecの経験的評価。NLPの表現学習に関する第1回ワークショップの議事録、2016年。

5) Tweet2vec または sent2vec .

Facebookには、文ベクトルの品質を評価するためのSentEvalプロジェクトがあります。

https://github.com/facebookresearch/SentEval

6)次のペーパーに詳細情報があります。

言い換え同定、意味的テキスト類似性、自然言語推論、および質問応答のためのニューラルネットワークモデル


そして今のところ、「BERT」を使用できます。

Googleはソースコードと事前学習済みのモデルをリリースします。

https://github.com/google-research/bert

そして、以下はbertをサービスとして実行する例です:

https://github.com/hanxiao/bert-as-service

16
Steven Du

トレーニングフェーズ中に文のベクトル表現を取得できます(テストに参加して、単一のファイルで文をトレーニングし、次のリンクから取得した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.pymodel.infer_vector(NewDocument)メソッドを確認してください。

10
kampta

私は以下から良い結果を得ました:

  1. Wordベクトルの合計(tf-idf重み付け)。これはWordの順序を無視しますが、多くのアプリケーションでは十分です(特に短いドキュメントの場合)
  2. Fastsent
2
Zach

GoogleのUniversal Sentence Encoder埋め込みは、この問題に対する更新されたソリューションです。 Word2vecは使用しませんが、競合するソリューションになります。

TFHubとKerasを使用したウォークスルー です。