一文弄懂word2vec 從原始碼解析

2021-09-13 01:11:10 字數 2461 閱讀 9965

三、trick

四、比較

五、最佳實踐

word2vec並非指乙個模型,而是2023年google開源的乙個獲取詞向量的工具包,由於簡單高效,大大降低了詞向量在工業界的應用門檻。我們先來看下word2vec能夠取得的效果:

相似詞:通過向量間距離的遠近來尋找相似詞,如man的相似詞woman;

詞語線性運算:v(king) - v(man) + v(woman) = v(queen)

由此可見,word2vec可以通過上下文將語義較好的嵌入到向量空間中。由於word2vec生成的詞向量將自然語言的特徵較好地融合進了低維度稠密詞向量中,使用詞向量進行後續的各種nlp任務便可以取得較好的結果。

要理解word2vec,我們主要需要了解其中的四個概念:

其中,前兩個代表word2vec中兩種不同的獲取詞向量的策略,或者說模型結構;後兩個則是兩種改進softmax計算複雜度過高問題的方法。

需要提到一點的是,這個詞向量的維度(與隱含層節點數一致)一般情況下要遠遠小於詞語總數 v 的大小,所以 word2vec 本質上是一種降維操作——把詞語從 one-hot encoder 形式的表示降維到 word2vec 形式的表示。

作者**:

word2vec原理分析:

[nlp] 秒懂詞向量word2vec的本質:

cbow(continuous bag-of-words model)是一種根據上下文的詞語**當前詞語的出現概率的模型。以當前詞的周圍詞語作為輸入,當前詞作為輸出。即上下文**當前詞。

參考:使用tensorflow實作word2vec cbow:使用tensorflow實作word2vec-cbow

一種原始碼實現:

skip-gram只是逆轉了cbow的因果關係而已,以當前詞作為輸入,當前詞的周圍詞作為輸出。即當前詞**上下文。

參考:理解 word2vec 之 skip-gram 模型:

基於tensorflow實現skip-gram模型:

一種**實現:

tensorflow官網examples的實現:

模型的最後一層softmax層計算非常耗時,為了加速模型訓練,使模型能夠應用於大規模語料庫。可以採用如下方式優化:

本質是把 n 分類問題變成 log(n)次二分類

hierarchical softmax是一種對輸出層進行優化的策略,輸出層從原始模型的利用softmax計算概率值改為了利用huffman樹計算概率值。一開始我們可以用以詞表中的全部詞作為葉子節點,詞頻作為節點的權,構建huffman樹,作為輸出。從根節點出發,到達指定葉子節點的路徑是唯一的。hierarchical softmax正是利用這條路徑來計算指定詞的概率,而非用softmax來計算。

本質是**總體類別的乙個子集

negative sampling(簡寫neg,負取樣),這是noise-contrastive estimation(簡寫nce,雜訊對比估計)的簡化版本:把語料中的乙個詞串的中心詞替換為別的詞,構造語料 d 中不存在的詞串作為負樣本。在這種策略下,優化目標變為了:最大化正樣本的概率,同時最小化負樣本的概率。

參考:word2vec原理(二) 基於hierarchical softmax的模型:

word2vec原理(三) 基於negative sampling的模型:

根據word2vec作者mikolov的說法,兩者的比較如下:

關於訓練集大小:skip-gram在資料集較小時能取得更好的效果;原因我認為有兩點:1. 資料集較小時,低頻詞較多,skip-gram對低頻詞的表示效果較好;2. 同樣的語料庫,skip-gram能產生更多(子)樣本。

關於訓練速度:cbow訓練速度更快。這是因為,乙個batch中,cbow包含batch_size個中心詞樣本,skip-gram包含batch_size/num_skips個中心詞樣本,同樣的batch_size遍歷一次樣本集,cbow需要更少的step。

參考:bert發展史(三)全方位多角度理解word2vec:

不懂word2vec,還敢說自己是做nlp?

chinese word vectors中文詞向量:

try

: embedding = word2vec_dict[word]

except exception:

embedding = np.random.uniform(low_bound, high_bound, embed_size)

word2vec的原理(一)

最近上了公司的新員工基礎培訓課,又對nlp重新產生的興趣。nlp的第一步大家知道的就是不停的寫正則,那個以前學的還可以就不看了。接著就是我們在把nlp的詞料在傳入神經網路之前的乙個預處理,最經典的就是2013年google提出的那個word2vec演算法,所以最近想再把這個演算法給好好學習一下,然後...

word2vec 中的數學原理詳解(一)目錄和前言

word2vec 是 google 於 2013 年開源推出的乙個用於獲取 word vector 的工具包,它簡單 高效,因此引起了很多人的關注。由於 word2vec 的作者 tomas mikolov 在兩篇相關的 3,4 中並沒有談及太多演算法細節,因而在一定程度上增加了這個工具包的神秘感。...

word2vec 中的數學原理詳解(一)目錄和前言

word2vec 是 google 於 2013 年開源推出的乙個用於獲取 word vector 的工具包,它簡單 高效,因此引起了很多人的關注。由於 word2vec 的作者 tomas mikolov 在兩篇相關的 3,4 中並沒有談及太多演算法細節,因而在一定程度上增加了這個工具包的神秘感。...