2017-02-15 41 views
3

我只是在使用gensim的Doc2Vec,分析stackexchange轉儲以分析問題的語義相似性以識別重複項。Doc2Vec:區分句子和文檔

Doc2Vec-Tutorial上的教程似乎將輸入描述爲帶標記的句子。

但原文:Doc2Vec-Paper聲稱該方法可用於推斷段落/文檔的固定長度向量。

有人可以解釋在這種情況下,句子和文檔之間的差異,以及我會如何推斷段落向量。

由於一個問題有時可能會跨越多個句子,我認爲,在培訓期間,我會給同一個問題帶來相同標籤的句子,但那麼我會如何做到這一點,推理看不見的問題?

而且這款筆記本:Doc2Vec-Notebook

似乎是培訓訓練和測試文檔的載體,可以有人解釋這樣做的理由,我也應該這樣做?

回答

1

Gensim's Doc2Vec期望您提供與示例TaggedDocument類相同對象形狀的文本示例:同時具有wordstags屬性。

words是文本的字符串標記的有序序列 - 它們可能是一個單獨的文本,或者一個段落或一個長文檔,這取決於您。

tags是從文本中學習的標籤列表 - 例如純整數或字符串標記,以某種方式命名相應的文本。在原來的「段落向量」紙,他們只是每個文本唯一的ID - 如整數從0單調遞增(所以第一TaggedDocument可能只是一個[0]tags,下[1]等)

該算法僅適用於大量文本,並不知道文章/段落/文檔等可能是什麼。 (爲了Doc2Vec的目的,只要將它們全部視爲「文檔」,您就可以決定從您的語料庫中選擇正確的「文檔」)。標記化將標點符號(如句子之間的句點)保留爲獨立標記。經由infer_vector()方法,它接受一個強制參數doc_words,這應該是發生

推斷列表的字符串的令牌就這樣在訓練期間被提供作爲文本words那些。

您不會在推斷的文本上提供任何標籤:Doc2Vec只會給您一個原始矢量,該矢量在模型學習的關係中很好地適合文本。 (也就是說:矢量很好地預測了文本的單詞,就像在批量訓練期間學習的矢量和內部模型權重在預測訓練文本的單詞方面一樣。)

請注意,很多人已經發現更好通過增加可選的steps參數(並且可能將開始alpha的推斷減少爲更像是開始α的批量訓練,0.025至0.05)推斷的結果。

doc2vec-IMDB演示筆記本嘗試複製原始Paragraph Vectors文件中的一個實驗,因此它遵循這裏描述的內容以及其中一位作者(Mikolov)發佈的演示腳本。由於'測試'文檔(沒有他們的目標標籤/已知情緒)在培訓時可能仍然可用,爲了幫助改進文本建模,在無監督的Doc2Vec培訓期間包含其原始文本可能是合理的。 (它們的已知標籤是而不是,用於訓練使用doc-vectors的分類器時使用)。

(請注意,此刻,2017年2月,doc2vec-IMDB演示筆記本有點過期相比目前的gensim Doc2Vec默認&最佳做法 - 尤其是模型沒有給出正確的顯式iter=1值,以使後面的手動循環和train()只做正確的訓練通行證。)