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


13

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

たとえば、doc2vecを次のようにトレーニングした場合

「aaaaaAAAAAaaaaaa」-「ラベル1」

「bbbbbbBBBBBbbbb」-「ラベル2」

Doc2vecを使用して「aaaaAAAAaaaaAA」がラベル1であると推測できますか?

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

回答:


10

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

  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)我々は、ランダムに初期化する2つのウェイト行列有するのすべての列または行Word2Vecから同じマトリックスでありますワードベクトルとにマップD R M × Rの各列または行が文/文書にマップ文書行列です。トレーニング中に、固定ウィンドウkサイズのsoftmax分類器が(ファッションのような移動ウィンドウで)移動して、次の対数尤度(マルチクラスクロスエントロピー)を最小化します。WRN×PDRM×Rk

1Mi=1M1|Di|t=k|Di1|klog(p(wti|wtki,...,wt+ki,Di))

ここで、i t h文を表すベクトルに対応しますD i | そのドキュメント内の単語数とw i ti t hドキュメント内のt t hワードです。バックプロパゲーションはすべて、現在ウィンドウ化されたソフトマックスを移動しているドキュメントであり、そのウィンドウ内の単語とともにマトリックスD内のその行のみを更新します。Diith|Di|wtitthithD

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

  1. 目に見えない可能性のある文がトレーニングセット内の文に正確に対応していると推測できますか?

短い答えはノーであり、これはDoc2Vecの目的ではありません。ランダムな初期化+収束とトレーニングの複雑さのために、推論されたベクトルは対応するベクトルとまったく同じになることはありません。これが、Gensimがこれをサポートする関数を組み込んでいない理由です。訓練されたこれらの2つのベクトルは互いに任意に近いはずです。したがって、これらは非常に似ていると結論付けることができます。D

ランダムシードを修正しても機能しない場合がありますが、収束に影響する可能性のある他の変数が非常に多くあります。https://github.com/RaRe-Technologies/gensim/issues/374の最初の回答を参照してください

いずれの場合でも、トレーニングセットを反復処理し、類似度を推定ベクトルと比較するだけで、データセット内で推定文と最も類似したラベルを見つけることができます。しかし、なぜトレーニングセットの何かと完全に一致させたいのでしょうか?これが、これらのドキュメントの埋め込みを目的とした正規表現とは、教師ありまたは教師なしの学習タスク(つまり、分類とクラスタリング)のことです。


0

私は今日この問題を解決しようとしていましたが、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]))

0

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.