1. 程式人生 > 其它 >通俗易懂講解Word2vec的本質

通俗易懂講解Word2vec的本質

本文首發於微信公眾號「對白的演算法屋」,來一起學AI叭

一、Word2vec

CBOW(Continuous Bag-of-Words):每個詞的含義都由相鄰詞決定。

Skip-gram:依據分佈的相似性,一個詞的含義可以通過上下文獲得。

注:Skip-gram 是預測一個詞的上下文,而 CBOW 是用上下文預測這個詞

1.1 CBOW (one-word context):

1.2 CBOW (Multi-word context):

1.3 Skip-gram:

二、計算效率優化技術

2.1Hierarchical Softmax技術:

誕生背景:word2vec為什麼不用現成的DNN模型,要繼續優化出新方法呢?最主要的問題是DNN模型的這個處理過程非常耗時。我們的詞彙表一般在百萬級別以上,這意味著我們DNN的輸出層需要進行softmax計算各個詞的輸出概率的的計算量很大。

優化思路:使用哈夫曼樹來代替隱藏層和輸出層的神經元,哈夫曼樹的葉子節點起到輸出層神經元的作用,葉子節點的個數即為詞彙表的小大。 而內部節點則起到隱藏層神經元的作用。

由於我們把之前所有都要計算的從輸出softmax層的概率計算變成了一顆二叉哈夫曼樹,那麼我們的softmax概率計算只需要沿著樹形結構進行就可以了。在哈夫曼樹中,隱藏層到輸出層的softmax對映不是一下子完成的,而是沿著哈夫曼樹一步步完成的,因此這種softmax取名為"Hierarchical Softmax"。

現在有一句話:“我喜歡觀看足球世界盃”,我們需要通過Hierarchical Softmax獲得“足球”的詞向量,則哈夫曼樹結構如下所示:

以圖中ω=“足球”為例,從根節點出發到達“足球”這個葉子節點,中間共經歷了4次分支(每條紅色的邊對應一次分支),而每一次分支都可視為進行了一次二分類。

既然是從二分類的角度來考慮問題,那麼對於每一個非葉子節點,就需要為其左右孩子結點指定一個類別,即哪個是正類(標籤為1),哪個是負類(標籤為0)。

Word2vec定義編碼為0是正類,編碼為1是負類。

根據邏輯迴歸,易知一個結點被分為正類的概率是

被分為負類的概率是:

對於從根節點出發到達“足球”這個葉子節點所經歷的4次二分類,將每次分類結果的概率寫出來是:

但是,我們要求的是P(足球|Contex(足球)),它跟著4個概率值有什麼關係呢?關係就是

至此,通過w=“足球”這個例子,Hierarchical Softmax的基本思想其實就已經介紹完了。

總結:對於詞典中任意詞ω,哈夫曼樹中必存在一條從根節點到詞w對應結點的路徑pω(且這條路徑是唯一的)。路徑pω上存在lω-1個分支,將每個分支看做一次二分類,每一次分類就產生一個概率,將這些概率連乘起來,就是所需的P(ω|Context(ω))。

條件概率P(ω|Context(ω))的一般公式可寫為:

將上式代入對數似然函式便得:

為下面梯度推導方便起見,將上式中雙重求和符號下花括號裡的內容簡記為:

以上就是CBOW模型的目標函式。在word2vec中,由於使用的是隨機梯度上升法,所以並沒有把所有樣本的似然乘起來得到真正的訓練集最大似然,僅僅每次只用一個樣本更新梯度,這樣做的目的是減少梯度計算量。

要得到模型中 詞向量和內部節點的模型引數 , 我們使用梯度上升法即可。首先我們求模型引數 的梯度:

同樣的方法,可以求出 的梯度表示式如下:

有了梯度表示式,我們就可以用梯度上升法進行迭代來一步步的求解我們需要的所有的 −1和 。

Hierarchical Softmax的優缺點:

優點:將softmax問題轉化為多層二分類問題。

缺點:當目標詞是一個生僻詞時,從根節點到葉子節點的路徑將會非常長,這無疑增加了計算量。

2.2Negative Sampling技術:

Negative Sampling是NCE(Noise Contrastive Estimation)的一個簡化版本,目的是用來提高訓練速度並改善詞向量的質量(低頻詞)。與Hierarchical Softmax相比,NEG不再使用複雜的哈夫曼樹,而是利用相對簡單的隨機負取樣,能大幅提高效能,因而可作為Hierarchical Softmax的一種替代。

2.2.1 CBOW模型:

在CBOW模型中,已知詞ω的上下文Context(ω),需要預測ω,因此,對於給定的Context(ω),詞ω就是一個正樣本,其它詞就是負樣本了。

2.2.2 負取樣構建訓練集的方法:

最後歡迎大家關注我的微信公眾號:對白的演算法屋(duibainotes),跟蹤NLP、推薦系統和對比學習等機器學習領域前沿。

想進一步交流的同學也可以通過公眾號加我的微信一同探討技術問題,謝謝。