2017-05-24 94 views
0

我使用列車(..)訓練了一個doc2vec模型,默認設置。這工作,但現在我想知道如何infer_vector結合跨輸入單詞,它只是個別單詞向量的平均值?doc2vec.infer_vector如何在單詞之間進行合併?

model.random.seed(0) 
model.infer_vector(['cat', 'hat']) 
model.random.seed(0) 
model.infer_vector(['cat']) 
model.infer_vector(['hat']) #doesn't average up to the ['cat', 'hat'] vector 
model.random.seed(0) 
model.infer_vector(['hat']) 
model.infer_vector(['cat']) #doesn't average up to the ['cat', 'hat'] vector 

那些不加起來,所以我想知道我誤解了什麼。

回答

1

infer_vector()不會爲您給定的標記組合向量 - 並且在某些模式下根本不會考慮這些標記的向量。

相反,它將整個Doc2Vec模型視爲針對內部更改進行凍結,然後假定您提供的令牌爲示例文本,並帶有以前未經過訓練的標籤。我們稱之爲隱含但未命名的標籤X

使用類似訓練的過程,它會嘗試爲X找到一個好的向量。也就是說,它從一個隨機矢量開始(就像它對原始訓練中的所有標籤所做的那樣),然後看到該矢量作爲模型輸入預測文本的單詞的程度(通過檢查模型神經網絡對輸入的預測X) 。然後通過遞增梯度下降,它使該候選矢量在預測文本的單詞方面更好更好地更好地更好地用於X

經過足夠的這種推理訓練,矢量將會與預測文本的單詞一樣好(給定剩餘的凍結模型)。因此,即使您將該文本提供爲該方法的「輸入」,在模型內部,您提供的內容將用於挑選算法的目標「輸出」以進行優化。

需要注意的是:

  • 微小的例子(像一個或幾個的話)可能不會給出非常有意義的結果 - 他們鋒利的邊角的情況下,這些種類的密集的基本價值嵌入的表示通常來自許多字的影響的邊際平衡
  • 它可能會幫助做更多的訓練推理週期比infer_vector()默認steps=5 - 有些人已經報告了數十或數百個最適合他們的工作,它可能會對短文本使用更多steps
  • 它也可以幫助使用開始alpha用於推斷更像是散裝培訓(alpha=0.025)使用,而不是默認infer_vector()alpha=0.1
相關問題