目錄
- Doc2vec簡介
- Doc2vec模型
- 總結
一句話簡介:doc2vec(又叫Paragraph Vector)是google的兩位大牛Quoc Le和Tomas Mikolov在2014年提出的,是一種非監督式算法,可以獲得 sentences/paragraphs/documents 的向量表達,是 word2vec 的拓展。類似有PV-DM和PV-DBOW兩種方式。
一、Doc2vec簡介
(閱讀本文前,建議讀NLP系列的另一篇:Word2vec)學出來的向量可以通過計算距離來找 sentences/paragraphs/documents 之間的相似性,可以用於文本聚類,對於有標簽的數據,還可以用監督學習的方法進行文本分類,例如經典的情感分析問題。和word2vec一樣,Doc2vec也有兩種訓練方式,一種是PV-DM(Distributed Memory Model of paragraph vectors段落向量的分布式記憶的版本)類似於word2vec中的CBOW模型,另一種是PV-DBOW(Distributed Bag of Words of paragraph vector 段落向量的分布式詞袋版本)類似於word2vec中的skip-gram模型
二、Doc2vec模型
2.1 PV-DM
類似於word2vec中的CBOW模型。
doc2vec的目標是創建文檔的向量化表示,而不管其長度如何。 但與單詞不同的是,文檔並沒有單詞之間的邏輯結構,因此必須找到另一種方法。Mikilov和Le使用的概念很簡單但很聰明:他們使用了word2vec模型,並添加了另一個向量(下面的段落ID),如下所示(圖的來源也是CBOW類似):
相比於word2vec的c-bow模型,區別點有:
• 訓練過程中新增了paragraph id,即訓練語料中每個句子都有一個唯一的id。paragraph id和普通的word一樣,也是先映射成一個向量,即paragraph vector。paragraph vector與word vector的維數雖一樣,但是來自於兩個不同的向量空間。在之后的計算里,paragraph vector和word vector累加或者連接起來,作為輸出層softmax的輸入。在一個句子或者文檔的訓練過程中,paragraph id保持不變,共享着同一個paragraph vector,相當於每次在預測單詞的概率時,都利用了整個句子的語義。
• 在預測階段,給待預測的句子新分配一個paragraph id,詞向量和輸出層softmax的參數保持訓練階段得到的參數不變,重新利用梯度下降訓練待預測的句子。待收斂后,即得到待預測句子的paragraph vector。
2.2 PV-DBOW
類似於word2vec中的skip-gram模型
還有一種訓練方法是忽略輸入的上下文,讓模型去預測段落中的隨機一個單詞。就是在每次迭代的時候,從文本中采樣得到一個窗口,再從這個窗口中隨機采樣一個單詞作為預測任務,讓模型去預測,輸入就是段落向量。如下所示:
2.3 小結
在上述兩種方法中,我們可以使用PV-DM或者PV-DBOW得到段落向量/句向量。對於大多數任務,PV-DM的方法表現很好,但我們也強烈推薦兩種方法相結合。
在論文中,作者建議使用兩種算法的組合,盡管PV-DM模型是優越的,並且通常會自己達到最優的結果。
doc2vec模型的使用方式:對於訓練,它需要一組文檔。 為每個單詞生成詞向量W,並為每個文檔生成文檔向量D. 該模型還訓練softmax隱藏層的權重。 在推理階段,可以呈現新文檔,並且固定所有權重以計算文檔向量。
注意:與word2Vec的名稱和圖片貌似有點區別。
三、Doc2Vec主要參數詳解
D2V 的API:
model_dm = Doc2Vec(x_train,min_count=1, window = 3, size = size, sample=1e-3, negative=5, workers=4)
參數:
min_count:忽略所有單詞中單詞頻率小於這個值的單詞。
window:窗口的尺寸(句子中當前和預測單詞之間的最大距離)
size:特征向量的維度
sample:高頻詞匯的隨機降采樣的配置閾值,默認為1e-3,范圍是(0,1e-5)。
negative: 如果>0,則會采用negativesampling,用於設置多少個noise words(一般是5-20)。默認值是5。
workers:用於控制訓練的並行數。
model_dm.train(x_train, total_examples=model_dm.corpus_count, epochs=70)
total_examples:統計句子數
epochs:在語料庫上的迭代次數(epochs)。
三、總結
Doc2vec是基於Word2vec基礎上構建的,相比於Word2vec,Doc2vec不僅能訓練處詞向量還能訓練處句子向量並預測新的句子向量:在輸入層上多增加了一個Paragraph vector句子向量,該向量在同一句下的不同的訓練中是權值共享的,這樣訓練出來的Paragraph vector就會逐漸在每句子中的幾次訓練中不斷穩定下來,形成該句子的主旨。這樣就訓練出來了我們需要的句子向量。
在預測新的句子向量時,是需要重新訓練的,此時該模型的詞向量和投影層到輸出層的soft weights參數固定,只剩下Paragraph vector用梯度下降法求得,所以預測新句子時雖然也要放入模型中不斷迭代求出,相比於訓練時,速度會快得多。
優點:
- 接受不同長度的句子做訓練樣本
- 該算法用於預測一個向量來表示不同的文檔,該模型的結構潛在的克服了詞袋模型的缺點
- 加入Paragraph vector向量,相當於增加了句子主旨,使得詞和句子互相影響,表達趨於更優
缺點:
- 數據依賴:由於Doc2vec是建立在Word2vec的基礎上,所以它自然也繼承了Word2vec的影響,模型只有在大文本數據上運算才能夠很好地捕捉到文檔中的語義和句法。Doc2vec缺乏統計學的運用,如果數據不足夠,這也會一定程度上影響最后段落向量質量的好壞
- 運行速率:即使相比於神經網絡語言模型來說,Doc2vec省時很多,但是訓練大量的文本數據是會消耗一定時間
參考文獻
【1】論文:https://cs.stanford.edu/~quocle/paragraph_vector.pdf https://arxiv.org/pdf/1405.4053.pdf
【2】原理及實踐 https://blog.csdn.net/u010417185/article/details/80654558