doc2vec(gensim) - 目に見えない文のラベルを推測するにはどうすればよいですか?

datascience.stackexchange https://datascience.stackexchange.com/questions/10612

  •  16-10-2019
  •  | 
  •  

質問

https://radimrehurek.com/gensim/models/doc2vec.html

たとえば、DOC2VECをでトレーニングした場合

「aaaaaaaaaaaaaaaaa」 - 「ラベル1」

「bbbbbbbbbbbbbbbbbbb」 - 「ラベル2」

「aaaaaaaaaaaaaaaaa」はdoc2vecを使用してラベル1であると推測できますか?

DOC2VECが単語ベクトルをトレーニングし、ラベルベクターをトレーニングできることを知っています。このベクトルを使用して、目に見えない文(訓練された単語の組み合わせ)を推測できますか?

役に立ちましたか?

解決

この質問のタイトルは、そのテキストの別の質問なので、両方に個別に答えます(一方が他方につながることを考えると)。

  1. 目に見えない文章を推測するにはどうすればよいですか:
# ... trained model stored in var model
list_of_words = ["this", "is", "a", "new","unseen", "sentence"]
inferred_embedding = model.infer_vector(list_of_words)

これはどのように作動しますか ?元の論文に従って(https://cs.stanford.edu/~quocle/paragraph_vector.pdf)ランダム$ w in mathbb {r}^{n times p} $で初期化された2つの重量行列があります。 Mathbb {r}^{m times r} $は、各列または行を文/文書にマップするドキュメントマトリックスです。トレーニング中、固定ウィンドウのソフトマックス分類器$ k $サイズが移動します(ファッションのような移動ウィンドウで)次のログの尤度(マルチクラスのクロスエントロピー)を最小限に抑えます。

$$ frac {1} {m} sum_ {i = 1}^{m} frac {1} {| d_ {i} |} sum_ {t = k}^{| d_ {i-1} | -k} log(p(w_ {t}^{i} | w_ {tk}^{i}、...、w_ {t+k}^{i}、d_ {i})$$

ここで、$ d_ {i} $は、$ i^{th} $文を表すベクトルに対応します。 $ i^{th} $ documentの$ t^{th} $ word。すべてのバックプロパゲーションは、現在ウィンドウのソフトマックスを移動しているドキュメントであり、そのウィンドウの単語とともに行列$ d $の行のみを更新しています。

さらに、トレーニングセットにないものを推測したい場合は、$ w $を修正して、更新されず、新しいランダムに初期化された行で行列$ d $を拡張し、いくつかの反復のためにトレーニングするだけです(新しい行が埋め込みを保持しています推測されたベクトル)。これは質問2につながります。

  1. 目に見えない文はトレーニングセットの文に正確に対応すると推測できますか?

短い答えはノーであり、これはDOC2VECの目的ではありません。ランダムな初期化 +収束とトレーニングの複雑さのために、推測されたベクトルは$ d $の対応するベクトルとまったく同じではありません。これがGensimがこれをサポートする機能を構築していない理由です。十分に訓練されているこれらの2つのベクトルは、互いに任意に近づく必要があるため、それらは非常に似ていると結論付けることができます。

ランダムシードを修正しても機能しない場合でも、収束に影響を与える可能性のある他の多くの変数があります。 https://github.com/rare-technologies/gensim/issues/374 .

いずれにせよ、トレーニングセットを繰り返して推測されたベクトルと類似性を比較するだけで、データセットで最も類似したラベルを推定文に見つけることができます。しかし、なぜあなたはトレーニングセットの何かに正確な一致をしたいのでしょうか?これは、これらのドキュメント埋め込みの目的のための正規表現は、監視されたまたは監視されていない学習タスク(つまり分類とクラスタリング)のためのものです。

他のヒント

私は今日この問題を解決しようとしていましたが、gensim.doc2vecによって与えられたモジュールを見つけて、訓練されたモデルと訓練されたモデルのモデルと訓練されたモデルに類似性を計算するモジュールを見つけます。だから基本的に私はこれをしました。

from scipy import spatial
inferred_vector=model.infer_vector(sentence.split())
for labels in labelled_documents:
    print (1-  spatial.distance.cosine(inferred_vector,model.docvecs[labels]))

Gensim doc2vecに基づいています チュートリアル, 、このようなことができます。

inferred_vector = model_dmm.infer_vector(sentence.split())
sims = model.docvecs.most_similar([inferred_vector], topn=len(model.docvecs))

これにより、各ラベルに属する新しいドキュメントに関連付けられたすべてのラベルを持つタプルのリストが提供されます。次に、最大の価値をラベルとして単純に取ることができます。

ライセンス: CC-BY-SA帰属
所属していません datascience.stackexchange
scroll top