word2vec中文語料處理及模型訓練實踐

2021-10-08 07:47:50 字數 2075 閱讀 6162

word2vec,是一群用來產生詞向量的相關模型。這些模型為淺而雙層的神經網路,用來訓練以重新建構語言學之詞文字。網路以詞表現,並且需猜測相鄰位置的輸入詞,在word2vec中詞袋模型假設下,詞的順序是不重要的。訓練完成之後,word2vec模型可用來對映每個詞到乙個向量,可用來表示詞對詞之間的關係,該向量為神經網路之隱藏層。

2.python實踐(參考

導入庫

import jieba

import jieba.analyse

from gensim.models import word2vec

from gensim.models.word2vec import linesentence#(說明:對包含句子的檔案進行迭代:一行=一句話。單詞必須經過預處理,並由空格分隔)

from gensim.test.utils import common_texts, get_tmpfile

資料輸入,語料處理

with

open

('1.txt'

,encoding=

'utf-8'

)as f:

document = f.read(

) document_cut = jieba.cut(document)

result =

' '.join(document_cut)

with

open

('./1.txt'

,'w'

,encoding=

"utf-8"

)as f2:

f2.write(result)

#載入語料

sentences = word2vec.linesentence(

'./1.txt'

)#訓練語料

path = get_tmpfile(

"word2vec.model"

)#建立臨時檔案

model = word2vec.word2vec(sentences, hs=

1,min_count=

1,window=

10,size=

100)

#輸入與「上網」相近的100個詞

for key in model.wv.similar_by_word(

'上網'

, topn =

100)

:print

(key)

執行結果

感覺這樣子的處理結果不太符合理想,改進如下:

import numpy as np

from scipy.linalg import norm

defvector_similarity

(s1, s2)

:def

sentence_vector

(s):

words = jieba.lcut(s)

v = np.zeros(

100)

for word in words:

if word not

in model:

v += np.zeros(

100)

else

: v += model[word]

v /=

len(words)

return v

v1, v2 = sentence_vector(s1)

, sentence_vector(s2)

return np.dot(v1, v2)

/(norm(v1)

* norm(v2)

)s1 =

'小學路口下面幾個網咖收容未成年人上網'

s2 =

'小學附近有網咖允許未成年人上網'

vector_similarity(s1, s2)

執行結果:相似度達到了0.986

與word2vec 原來word2vec那麼簡單

說到word2vec,它可謂非結構化資料裡面的佼佼者,尤其是在推薦和nlp當中,足以體現它的優勢所在,並且多年一直備受工業界喜愛.那麼word2vec到底是怎麼個原理的,發現身邊總是有很多人問,確不能準確的說出為什麼是兩個矩陣,到底是怎麼自動反向傳播的,以及對於softmax之後那麼大的維度資料,是...

word2vec學習參考

最近看nlp的東西比較多。就拿現在google 基於神經網路做的 word2vec 作為部落格的開始吧,今後會陸陸續續補充內容。基本是分4塊內容 1.神經網路語言模型 2.語言模型分層優化 3.word2vec 原理 4.google word2vec 看一點寫一點,先扔些參考資料鏈接上去。附上在研...

Word2Vec知識總結

word2vec是乙個產生詞向量的模型,是乙個雙層的神經網路 非常善於找出詞彙的相似度,同時可用於處理之前的技術 像one hot編碼和wordnet 處理不了的語義關係。它可以利用神經網路從大量的無標註的文字中提取有用資訊。我們也可以將它看成是乙個工具,它裡面包含了三種重要的模型 1 nnlm 神...