Doc2vec的原理以及實戰demo

2021-09-26 04:32:42 字數 2041 閱讀 3971

一,原理

其訓練原理與word2vec很相似。主要的不同如下:

每次從一句話中滑動取樣固定長度的詞,取其中乙個詞作為**詞,其他詞作為輸入。在輸入層,增添了乙個新句子向量paragraph vector,paragraph vector可以被看作是另乙個詞向量,它扮演了乙個記憶,每次訓練滑動擷取句子中一小部分詞來訓練,paragraph vector在同乙個句子的若干次訓練中是共享的,所以同一句話會有多次訓練,每次訓練中輸入都包含paragraph vector。它可以被看作是句子的主旨,有了它,該句子的主旨每次都會被放入作為輸入的一部分來訓練。這樣每次訓練過程中,不光是訓練了詞,得到了詞向量。同時隨著一句話每次滑動取若干詞訓練的過程中,作為每次訓練的輸入層一部分的共享paragraph vector,該向量表達的主旨會越來越準確。

在**新的句子的時候,會先將該paragraph vector隨機初始化,放入模型中再重新根據隨機梯度下降不斷迭代求得最終穩定下來的句子向量。不過在**過程中,模型裡的詞向量還有投影層到輸出層的softmax weights引數是不會變的,這樣在不斷迭代中只會更新paragraph vector,其他引數均已固定,只需很少的時間就能計算出帶**的paragraph vector。

二,測試demo

**如下:

from gensim.test.utils import common_texts

from gensim.models.doc2vec import doc2vec, taggeddocument

def doc2vec_demo():

# 得到文字訓練資料

documents = [taggeddocument(doc, [i]) for i, doc in enumerate(common_texts)]

# 訓練模型

model = doc2vec(documents, vector_size=5, window=2, min_count=1, workers=4)

print(len(documents))

print(documents[0:4])

# 獲取與tag為0的向量最相似的資料

sims = model.docvecs.most_similar(0)

print(sims)

# 計算tag 0,2兩者之間的距離

print(model.docvecs.similarity(0,2))

# 獲取tag 4的向量

print(model.docvecs[4])

輸出結果為:

9

[taggeddocument(words=['human', 'inte***ce', 'computer'], tags=[0]), taggeddocument(words=['survey', 'user', 'computer', 'system', 'response', 'time'],

tags=[1]), taggeddocument(words=['eps', 'user', 'inte***ce', 'system'], tags=[2]), taggeddocument(words=['system', 'human', 'system', 'eps'], tags=[3])]

[(2, 0.38414308428764343), (8, 0.3346472680568695), (4, 0.1297619640827179), (3, 0.05100887268781662), (7, -0.03428802639245987),

(5, -0.20345287024974823), (6, -0.45190441608428955), (1, -0.5631040930747986)]

0.38414308

[-0.0676489 -0.025297 -0.0700455 0.01598585 0.02966787]

三,利用wiki資料訓練英文doc2vec

然後訓練資料;

最後測試。

**:

補充在執行**之前要保證在toy_data/資料夾下有wiki_en.txt檔案和model資料夾。

doc2vec 文件向量

3 doc2vec 總結 4 應用任務 doc2vec 模型的目的 建立文件向量表示 doc2vec 的整體思想 在word2vec的基礎上增加了可訓練句子的矩陣 doc2vec 是無監督學習 模型出自 distributed representations of sentences and doc...

文字特徵提取 Doc2Vec

利用詞袋模型從文字中抽取特徵的主要步驟 countvectorizer類實現了上述步驟中的 tokenzing 和 counting from sklearn.feature extraction.text import countvectorizer corpus this is the firs...

word2vec中數學原理詳解以及原理思考

很久沒有寫部落格了,也沒有寫過相關總結。最近,工作中又開始用到了word2vector,正好就做個相關總結。這方面相關的部落格有很多,我看過的講的最清楚的就是 peghoty的部落格。要理解wordvector的原理,有些知識還是需要提前了解一下。預備知識 背景知識 這裡要著重去理解統計語言模型,n...