NLP概念:詞袋模型(BOW)和詞向量模型(Word Embedding)介紹
例句:
James wants to go to Shenzhen.
Bill wants to go to Shanghai.
一、詞袋模型
所謂詞袋,就是將所有詞語裝進一個"袋子"裡,不考慮其詞法和語序的問題,即每個詞語都是獨立的。例如上面2個例句,就可以構成一個詞袋,袋子裡包括James、wants、to、go、Shenzhen、Bill、Shanghai。假設建立一個數組(或詞典)用於對映匹配。
1 [Jane, wants, to, go, Shenzhen, Bob, Shanghai]
那麼上面兩個例句就可以用以下兩個向量表示,對應的下標與對映陣列的下標相匹配,其值為該詞語出現的次數
1 [1,1,2,1,1,0,0]
2 [0,1,2,1,0,1,1]
這兩個詞頻向量就是詞袋模型,可以很明顯的看到語序關係已經完全丟失。
二、詞向量模型
詞向量模型是考慮詞語位置關係的一種模型。通過大量語料的訓練,將每一個詞語對映到高維度(幾千、幾萬維以上)的向量當中,通過求餘弦的方式,可以判斷兩個詞語之間的關係,例如例句中的James和Bill在詞向量模型中,這兩個詞的餘弦值可能就接近1,因為這兩個都是人名,Shenzhen和Bill的餘弦值可能就接近0,因為一個是人名一個是地名。
現在常用word2vec構成詞向量模型,它的底層採用基於CBOW和Skip-Gram演算法的神經網路模型。
1. CBOW模型
CBOW模型的訓練輸入是某一個特徵詞的上下文相關的詞對應的詞向量,而輸出就是這特定的一個詞的詞向量。
比如上面的第一句話,將上下文大小取值為2,特定的這個詞是"go",也就是我們需要的輸出詞向量,上下文對應的詞有4個,前後各2個,這4個詞是我們模型的輸入。
由於CBOW使用的是詞袋模型,因此這4個詞都是平等的,也就是不考慮他們和我們關注的詞之間的距離大小,只要在我們上下文之內即可。
這樣我們這個CBOW的例子裡,我們的輸入是4個詞向量,輸出是所有詞的softmax概率(訓練的目標是期望訓練樣本特定詞對應的softmax概率最大),對應的CBOW神經網路模型輸入層有4個神經元,輸出層有詞彙表大小個神經元。隱藏層的神經元個數我們可以自己指定。
通過DNN的反向傳播演算法,我們可以求出DNN模型的引數,同時得到所有的詞對應的詞向量。當我們有新的需求,要求出某4個詞對應的最可能的輸出中心詞時,我們可以通過一次DNN前向傳播演算法並通過softmax啟用函式找到概率最大的詞對應的神經元即可。
2.Skip-Gram模型
Skip-Gram模型原理是:輸入是特定的一個詞的詞向量,而輸出是特定詞對應的上下文詞向量。還是上面的例子,我們的上下文大小取值為2, 特定的這個詞"go"是我們的輸入,而這4個上下文詞是我們的輸出。
這樣我們這個Skip-Gram的例子裡,我們的輸入是特定詞, 輸出是softmax概率排前4的4個詞,對應的Skip-Gram神經網路模型輸入層有1個神經元,輸出層有詞彙表大小個神經元。隱藏層的神經元個數我們可以自己指定。
通過DNN的反向傳播演算法,我們可以求出DNN模型的引數,同時得到所有的詞對應的詞向量。這樣當我們有新的需求,要求出某1個詞對應的最可能的4個上下文詞時,我們可以通過一次DNN前向傳播演算法得到概率大小排前4的softmax概率對應的神經元所對應的詞即可。