本文根據word2vec 中的數學原理詳解整理而成。
根據word2vec算法的原理,大概總結如下;
1) 由統計語言模型發展到n-gram模型,再由n-gram模型發展到NNLM模型,最後到word2vec模型;
2) word2vec模型包括CBOW模型和Skip-gram模型;
3) 對於CBOW模型和Skip-gram模型,又分別有基於Hierarchical Softmax的模型和基於Negative Sampling的模型
一 模型發展歷程
1. 統計語言模型
統計語言模型是用來計算一個句子出現的概率的模型,它通常基於一個語料庫來構建。假設
W=wT1:=(w1,w2,...,wT)
表示由
T
個詞
w1,w2,...,wT
按順序構成的一個句子,則
w1,w2,...,wT
的聯合概率
p(W)=p(wT1)=p(w1,w2,...,wT)
即爲句子
W
的出現的概率。利用Bayes公式(
P(A|B)=P(AB)P(B)
),上式可以被鏈式分解爲:
p(wT1)=p(w1)⋅p(w2|w1)⋅p(w3|w21)⋯p(wT|wT−11) (1)
其中(條件)概率
p(w1),p(w2|w1),p(w3|w21),⋯,p(wT|wT−11)
就是語言模型的參數,計算這些參數,就可以得到一個句子出現的概率了。
原理很簡單,但計算很複雜。假設語料庫對應詞典D的大小(即詞彙量)爲N,那麼,如果考慮長度爲T的任意句子,理論上就有
NT
種可能,而每種可能都要計算T個參數,總共就需要計算
TNT
個參數(不考慮重複參數的情況下),這個計算量是非常大的。
那麼,這些參數如何計算呢?常見的方法有n-gram模型,神經網絡等方法。首先來看n-gram模型。
2. n-gram模型
考慮
p(wk|wk−11)(k>1)
的近似計算。利用Bayes公式,有
p(wk|wk−11)=p(wk1)p(wk−11),
根據大數定理,當語料庫足夠大時,
p(wk|wk−11)
可近似表示爲
p(wk|wk−11)≈count(wk1)count(C)count(wk−11)count(C)≈count(wk1)count(wk−11), (2)
其中
count(wk1)
和
count(wk−11)
分別表示詞串
wk1
和
wk−11
在語料中出現的次數,
count(C)
表示語料庫中的單詞數量。當k很大時,
count(wk1)
和
count(wk−11)
的統計將會非常耗時。
在統計語言模型中,我們認爲一個詞出現的概率和它前面的所有詞都有關(如公式(1))。n-gram模型的基本思想是:假定一個詞出現的概率只與它前面固定數目的詞相關。它做了一個n-1階的Markov假設,認爲一個詞出現的概率就只與它前面的n-1個詞相關,即
p(wk|wk−11)=p(wk|wk−1k−n+1)
因此公式(2)就變成了
p(wk|wk−11)≈count(wkk−n+1)count(wk−1k−n+1)
以n=2時爲例,可以得到:
p(wk|wk−11)≈count(wk−1,wk)count(wk−1).
通過這樣簡化,可以大大減少要統計的參數數量(統計時需要匹配的詞串更短)。
至於n-gram中的參數n的取值,請看下圖(圖片來源:
word2vec 中的數學原理詳解)
另外,n-gram模型中還需要做平滑化處理。
訓練語料庫中有些n元組沒有出現過,其對應的條件概率就是0,導致一整句話的概率爲0。平滑化處理最簡單的方法Laplace平滑:把每個n元組的出現次數加1,那麼原來出現k次的某個n元組就會被記爲k+1次,原來出現0次的n元組就會被記爲1次。
總結起來,n-gram模型的主要工作就是在語料中統計各種詞串出現的次數以及平滑化處理。概率值計算好之後就存儲起來,下次需要計算一個句子的概率時,只需要找到相關的概率參數,將它們連乘起來就好了。
3. 神經網絡語言模型(Neural Network Language Model)
神經網絡語言模型涉及到一個詞向量的概念:對詞典D中的任意詞w,指定一個固定長度的向量
v(w)∈Rm
,
v(w)
就稱爲w的詞向量,m爲詞向量的長度。
神經網絡語言模型的框架如下圖所示(圖片來源:《A Neural Probabilistic Language Model》):
對於語料C中的任意一個詞w,將Context(w)取爲其前面的n-1個詞(類似於n-gram),這樣二元對(Context(w),w)就是一個訓練樣本了。一旦語料C和詞向量長度m給定後,輸入層和輸出層的規模就確定了,前者爲
(n−1)m
,後者爲
N=|D|
,即語料C的詞彙量大小,而隱藏層的大小
nh
是可調參數,由用戶指定。
輸入層的向量
xw
是這樣構造的:將輸入層的n-1個詞向量按順序首尾相接地拼起來形成一個長向量,因此其長度就是
(n−1)m
。因此,NNLM模型的框架實現過程如下:
⎧⎩⎨⎪⎪⎪⎪zw=tanh(Wxw+p),yw=Uzw+q,p(w|Context(w))=eyw,iw∑Ni=1eyw,i
NNLM模型相對n-gram模型的優勢是:
(1)詞語之間的相似性可以由詞向量來體現;
(2)不需要再做平滑化處理(softmax函數保證
p(w|Context(w))
不會爲0).
那麼,NNLM模型待確定的參數有哪些呢?
(1)詞向量:
v(w)∈Rm,w∈D
以及填充向量;
(2)神經網絡參數:
W∈Rnh×(n−1)m,p∈Rnh;U∈RN×nh,q∈RN
這些參數都可以通過訓練得到。要特別注意的是,通常的機器學習算法中,輸入都是已知的,而在NNLM中,輸入
v(w)
也需要通過訓練才能得到。
接下來我們分析一下模型的運算量。輸入層,隱藏層,輸出層的規模分別是
(n−1)m,nh,N
,其中:
(1)n是一個詞的上下文中包含的詞數,通常不超過5;
(2)m是詞向量長度,通常是10-100的量級;
(3)
nh
由用戶指定,通常不需要取得太大,如100量級;
(4)N是語料庫詞彙量的大小,與語料庫有關,通常是
104−105
量級。
通過分析,我們可以發現,整個模型的大部分計算集中在隱藏層和輸出層之間的矩陣向量運算,以及輸出層上的softmax歸一化處理。word2vec就是針對這部分進行優化。
4. word2vec模型
word2vec包括兩個重要的模型:CBOW模型(Continuous Bag-of-Words Model)和Skip-gram模型(Continuous Skip-gram Model),如下圖所示(圖片來源:word2vec 中的數學原理詳解):
兩個模型都包含三層:輸入層,投影層和輸出層。CBOW模型是在已知當前詞
wt
的上下文
wt−2,wt−1,wt+1,wt+2
的前提下預測當前詞
wt
;而Skip-gram模型與其相反,是在已知當前詞
wt
的前提下,預測其上下文
wt−2,wt−1,wt+1,wt+2
.
二 基於Hierarchical Softmax的模型
基於Hierarchical Softmax的模型跟NNLM模型的一個比較大的區別是在輸出層採用了基於Huffman樹的樹形結構,因此,在講基於Hierarchical Softmax的模型之前,先簡單介紹一下Huffman樹。
結點的權和帶權路徑長度:若爲樹中結點賦予一個具有某種含義的非負數值,則這個數值稱爲該結點的權。結點的帶權路徑長度是指,從根結點到該結點之間的路徑長度與該結點的權的乘積。
具體Huffman樹的構造請看下圖(圖片來源:word2vec 中的數學原理詳解):
2.1 CBOW模型
CBOW模型的網絡結構如下圖所示(圖片來源:word2vec 中的數學原理詳解),它包含三層:輸入層,投影層和輸出層。下面以樣本
(Context(w),w)
爲例(這裏假設Context(w)由w前後各c個詞構成),對這三個層做簡單說明:
(1)輸入層:包含Context(w)中2c個詞的詞向量
v(Context(w)1),v(Context(w)2),...,v(Context(w)2c)∈Rm.
),...,v(Context(w)2c)∈Rm.
m表示詞向量的長度;
(2)投影層:將輸入層的2c個向量做求和累加,即
xw=∑2ci=1