關於word2vec我有話要說

2022-05-21 05:51:09 字數 2927 閱讀 2089

寫在前面的話:

總結一下使用word2vec一年來的一些經驗,因為自己在做的時候,很難在網上搜到word2vec的經驗介紹,所以歸納出來,希望對讀者有用。

這裡不介紹word2vec的原理,因為原理介紹的資料網上很多

最後,由於本人知識有限,錯誤之處,還望指正。

1 word2vec 是word embedding 最好的工具嗎?

word2vec並非是效果最好的word embedding 工具。最容易看出的就是word2vec沒有考慮語序,這裡會有訓練效果損失。

由於 word2vec 訓練速度快 ,易用,google出品 等,使得word2vec使用的人多。

訓練快是因為 word2vec只有輸入層和輸出層,砍去了神經網路中,隱藏層的耗時計算(所以word2vec並不算是乙個深度學習演算法)。另外,閱讀word2vec的google的原始碼,會發現裡面有一些提速的trick。如 sigmod函式,採用一次計算,以後查表,減去了大量的重複計算。如詞典hash儲存, 層次softmax等。

易用是因為word2vec 公布了word2vec的**。在tensorflow,gensim,spark mllib包中都有整合,使用方便。

2 word2vec 訓練結果的差異主要來自什麼因素?

2.1 語料影響最大 語料的場景,比如微博的語料和新聞語料訓練的結果差別很大。因為微博屬於個人發帖,比較隨意。而新聞比較官方正式,另外新聞句式相對複雜。經過訓練對比:微博這種短文,訓練的相似詞更多是同級別的相關詞。比如 深圳 相關的是 廣州 。而用新聞語料,訓練得到 深圳 相關的詞 更多是與 深圳 有關聯的詞,比如 深圳大學。

為什麼會出現這種情況呢?

因為 word2vec 的原理就是 乙個詞** 前後詞 或者 前後詞 ** 當前詞,使得概率最大化。

這就導致如下兩個結果:

2.1.1 相似的句子,相同部位的詞 會相似。

比如 句子1 w1 w2 w3 w4 x w5 w6 w7.

句子2 w1 w2 w3 w5 y w5 w6 w7.

因為 x 的向量 受 w1 w2 w3 w4 w5 w6 w7 向量影響決定, y也是受這幾個詞影響決定。

所以 x y 是相似的。

2.1.2 挨著近的詞,也是相似的。

比如 句子 w1 w2 w3 w4 x y w5 w6 w7.

這樣 x y 都是受到 來自 w1 w2 w3 w4 w5 w6 w7 向量影響決定。

所以x y是相似的。

所以,微博和新聞的句子的整體分布是不一樣的。 這裡影響 結論 2.1.1.

其次,新聞長文多,句式複雜,微博短文多,這裡影響結論2.1.2.

2.2 演算法引數的影響。

演算法引數對總體效果影響不大。相對來說,比較重要的引數有以下

2.2.1 負取樣。

負取樣越低,對高頻詞越不利,對低頻詞有利。可以這麼理解,本來高頻詞 詞被迭代50次,低頻詞迭代10次,如果取樣頻率降低一半,高頻詞失去了25次迭代,而低頻詞只失去了5次。一般設定成le-5

2.2. 2 語言模型:skip-gram 和cbow,之前有對比,切詞效果偏重各不相同。從效果來看,感覺cbow對詞頻低的詞更有利。這是因為 cbow是基於周圍詞來**某個詞,雖然這個詞詞頻低,但是他是基於 周圍詞訓練的基礎上,通過演算法來得到這個詞的向量。通過周圍詞的影響,周圍詞訓練的充分,這個詞就會收益。

2.2. 3 視窗大小 視窗大小影響 詞 和前後多少個詞的關係,和語料中語句長度有關,建議可以統計一下語料中,句子長度的分布,再來設定window大小。一般設定成8。

2.2. 4 min-count 最小詞頻訓練閥值,這個根據訓練語料大小設定,只有詞頻超過這個閥值的詞才能被訓練。

根據經驗,如果切詞效果不好,會切錯一些詞,比如 「在深圳」,畢竟切錯的是少數情況,使得這種錯詞詞頻不高,可以通過設定相對大一點的 min-count 過濾掉切錯的詞。

2.2. 5 向量維度

如果詞量大,訓練得到的詞向量還要做語義層面的疊加,比如 句子 的向量表示 用 詞的向量疊加,為了有區分度,語義空間應該要設定大一些,所以維度要偏大。一般 情況下200維夠用。

2.2. 6 其他引數 比如學習率 可以根據需要調。

3 word2vec 影響速度的因素有哪些?

3.1 語言模型:cbow 比skip-gram 更快

為什麼 cbow更快,很重要的乙個原因,cbow是基於周圍詞來**這個單詞本身 。而skip-gram是基於本身詞去**周圍詞。 那麼,cbow只要 把視窗內的其他詞相加一次作為輸入來** 乙個單詞。不管視窗多大,只需要一次運算。而skip-gram直接受視窗影響,視窗越大,需要**的周圍詞越多。在訓練中,通過調整視窗大小明顯感覺到訓練速度受到很大影響。

3.2 迭代次數

影響訓練次數,語料不夠的情況下,可以調大迭代次數。spark 版本有bug,迭代次數超過1,訓練得到的詞向量維度值超大。

3.3 執行緒數

單機版(google word2vec)可以通過設定多執行緒跑,集群版(spark mllib)可以設定多個 partitions.但是從經驗來看,在集群上設定partitions 過多,會影響訓練的效果。

3.4 其他引數

取樣頻率 影響詞的訓練頻率

min-count 最小詞頻 影響 訓練詞的數量

window大小 影響 skip-gram 的 **次數。

向量維度 維度決定了訓練過程中計算的維度

4 怎樣評估word2vec訓練的好壞?

4.1 詞聚類 可以採用 kmeans 聚類,看聚類簇的分布

4.2詞cos 相關性 查詢cos相近的詞

4.3 analogy對比 a:b 與 c:d的cos距離 (man-king woman-queen )

4.4 使用tnse,pca等降維視覺化展示 詞的分布,推薦用google的tensorboard。另外可以用python的matplotlib。

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