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 神...