Word2Vec 是 google 在2013年提出的詞向量模型,通過 Word2Vec 可以用數(shù)值向量表示單詞,且在向量空間中可以很好地衡量兩個單詞的相似性。
1.? 詞向量
讓計算機理解人類的語言是一件很 Cool 的事情,而首先要做的就是將單詞表示成一個數(shù)值向量(稱為詞向量),以方便計算機處理。比較直觀的做法有one-hot 編碼和共現(xiàn)矩陣等。
1.1 one-hot 編碼
one-hot 編碼,首先構(gòu)造一個容量為 N 的詞匯表,每個單詞可以用一個 N 維的詞向量表示,詞向量中只有單詞在詞匯表的索引處取值為 1,其余為 0。
one-hot 編碼主要的缺點是:當(dāng)詞匯表的容量變大時,詞向量的特征空間會變得很大;另外 one-hot 編碼不能區(qū)分單詞之間的相似度。

1.2 共現(xiàn)矩陣
還是剛剛的詞匯表,假設(shè)現(xiàn)在語料庫中只有三個句子 “I have a cat”、“cat eat fish”、“I have a apple”,則可以構(gòu)造出單詞間的共現(xiàn)矩陣?A。例如 “I” 和 “have” 在兩個句子中共同出現(xiàn)過,因此在?A?中的權(quán)重為 2;而 “I” 和 “cat“ 只在一個句子中共現(xiàn),?A?中權(quán)重為 1 。
矩陣?A?的每一行就代表了一個單詞的詞向量,與 one-hot 編碼類似,使用共現(xiàn)矩陣的詞向量的維度也非常大。也可以使用 SVD (奇異值分解) 對?A進(jìn)行分解,從而得到更低維度的詞向量,但是 SVD 算法的時間復(fù)雜度較高,對 n×n 的矩陣進(jìn)行 SVD 分解的復(fù)雜度為 O(n^3) 。

2. Word2Vec

Word2Vec 是一種淺層神經(jīng)網(wǎng)絡(luò),包含輸入層?x,隱藏層?h和輸出層?o。輸入層、輸出層的維度為 N? (詞匯表的大小),隱藏層維度為 D (詞向量的維度)。輸入層與隱藏層之間的網(wǎng)絡(luò)權(quán)重矩陣為?V(N×D),輸入層與隱藏層之間的網(wǎng)絡(luò)權(quán)重矩陣為?V'(N×D)。

Word2Vec 輸入層?x?接收單詞 a 的 one-hot 編碼,輸出層?o?計算出所有單詞出現(xiàn)在單詞 a 上下文的概率,概率用 softmax 計算。Word2Vec 在語料庫中訓(xùn)練,使單詞出現(xiàn)的條件概率盡可能符合語料庫中的分布。訓(xùn)練完后,神經(jīng)網(wǎng)絡(luò)的權(quán)重向量矩陣?V就是最終的詞向量矩陣,而?V'?是詞作為預(yù)測輸出時的向量矩陣。

Word2Vec 有兩種模型 CBOW 和 Skip-Gram,兩種模型的區(qū)別在于 CBOW 使用上下文詞預(yù)測中心詞,而 Skip-Gram 使用中心詞預(yù)測其上下文單詞。圖為 Word2Vec 論文中的 CBOW 和 Skip-Gram 模型圖,接下來介紹 Skip-Gram 和 CBOW。

2.1 CBOW
注意下面的描述中?w(x) 表示第 x 個單詞,v(x) 表示第 x 個單詞對應(yīng)的詞向量, v'(x) 表示預(yù)測輸出時對應(yīng)第 x 個單詞的權(quán)重向量
給定一個句子 [w(1), w(2), w(3), ..., w(T)],對于任意一個單詞 w(t),其上下文單詞包括 [w(t-c), ..., w(t-1), w(t+1), ..., w(t+c)],c 為上下文窗口的大小。

CBOW 希望通過上下文單詞 [w(t-c), ..., w(t-1), w(t+1), ..., w(t+c)] 預(yù)測中心詞是 w(t) 的概率,因此輸入到神經(jīng)元的有 2c 個 one-hot 編碼。實際上是把上下文單詞 [w(t-c), ..., w(t-1), w(t+1), ..., w(t+c)] 對應(yīng)的詞向量的均值傳入神經(jīng)網(wǎng)絡(luò)的隱藏層?h(如下公式),然后計算輸出單詞 w(t) 的概率。

因此對于一個句子 [w(1), w(2), w(3), ..., w(T)],CBOW 需要最大化以下目標(biāo)函數(shù),其中概率使用 softmax 計算:

2.2 Skip-Gram
Skip-Gram 與 CBOW 不同,給定一個句子 [w(1), w(2), w(3), ..., w(T)],對于任意一個中心詞 w(t),需要計算上下文單詞的 [w(t-c), ..., w(t-1), w(t+1), ..., w(t+c)] 的概率。因此需要最大化以下目標(biāo)函數(shù):

3. 優(yōu)化方法
優(yōu)化 CBOW 和 Skip-Gram 都需要計算 softmax,其中需要在所有單詞上進(jìn)行求和,效率低下,一般可以采用兩種優(yōu)化方法:Hierarchical softmax 和 Negative sampling。
3.1 Hierarchical softmax
對于一個 N 分類問題,softmax 可以求出每一個類的概率,并且 N 個類的概率之和為1。Hierarchical softmax 簡化了 softmax 的計算,采用二叉樹結(jié)構(gòu) (可以使用霍夫曼樹優(yōu)化),把一個 N 分類問題轉(zhuǎn)換成 log N 個二分類問題。

其中 n 表示節(jié)點,n(w, j) 表示從根節(jié)點到單詞 w 路徑上的第 j 個節(jié)點,n(w, 1) 表示從根節(jié)點,L(w) 表示從根節(jié)點到單詞 w 的路徑長度。
輸入單詞的詞向量為 v(x),則到達(dá)某一節(jié)點 n(w, j) 后往左子樹走和往右子樹走的概率分別為:

而通過單詞 v(x) 觀察到其上下文單詞 w 的概率可以如下計算:

3.2 Negative sampling
Negative sampling 是負(fù)采樣算法,給定訓(xùn)練樣本單詞 x 和 x 的上下文單詞 pos。負(fù)采樣算法將 pos 作為 x 的正樣本,然后從詞匯表中隨機采樣 k 個單詞 neg 構(gòu)成負(fù)樣本,然后最大化通過 x 觀察到 pos 的概率,最小化通過 x 觀察到負(fù)樣本 neg 的概率。需要最大化如下目標(biāo)函數(shù):

每個單詞被采樣作為負(fù)樣本的概率如下:

4. 總結(jié)
Word2Vec 的優(yōu)點:模型簡單;訓(xùn)練速度快;訓(xùn)練中會考慮單詞的上下文。
Word2Vec 的缺點:上下文窗口較小,也沒有使用全局的單詞共現(xiàn)信息;每個單詞的詞向量是固定的,無法解決一詞多義的問題。
參考文獻(xiàn)
《Distributed Representations of Sentences and Documents》
《Efficient estimation of word representations in vector space》
《word2vec Parameter Learning Explained》