網上有很多這方面的資源,詳細各位都能夠對於word2vec瞭解了大概,這裏只講講個人的理解,
目的:通過對於一個神經網絡的訓練,得到每個詞對應的一個向量表達
基於: 這個神經網絡,是基於語言模型,即給定T個詞的字符串s,計算s是自然語言的概率p(w1,w2,…,wt)而構建的,更直白點,就是通過輸入wi的上下相鄰的n個詞(n-gram方法),來就算輸出是wi的概率
方案:CBOM和skip-gram兩種,每一種有分別有霍夫曼和nec的2種實現方式,所以總共有4種實現模式。
網絡:
CBOM 霍夫曼:
輸入:與wi相鄰的n個節點的one-hot表達向量維度爲V(V爲語料庫的單詞總數)
過程:
step1:n個V維向量與V*m維權重向量Wc相乘,得到n個m維的向量(m就是最後每個詞所對應的詞向量的維度,自己設定)
step2:n個m維的詞向量求和得到一個m維向量作爲霍夫曼層的輸入
step3:下面就是網上很多資料講解的一個算P(wi|contenti)的過程了,在此不講具體的,霍夫曼樹是爲了是計算P(wi|contenti)的時間複雜度降到log級,樹上的每個非葉子節點上都有一個m維的向量參數,與step2得到的輸出相乘相加通過一個sigmod的激活函數來算的此節點的概率。
輸出: P(wi|contenti)的概率
其中loss是cross-entropy,然後反向傳播,更新網絡中的參數。
而詞向量就是step1中的輸出,一個詞對應一個m維的向量。
CBOM nec:
step1和step2一樣,只不過優化計算P(wi|contenti)的時候,沒有采用霍夫曼樹,而是通過對語料庫的數據採樣來計算,而不是遍歷整個語料庫。
skip-gram和CBOW剛好相反,
輸入是一個單詞
輸出其上下相鄰單詞的概率
詞向量也蘊含在one-hot到m維向量的轉換中。
強烈建議看一下:
word2vec Parameter Learning Explained
* 除此之外附上幾個較爲有用的word2vec資料:*