word2vec 相比之前的 Word Embedding 方法好在什麼地方?

之前看覺得word2vec的方法好厲害,用Hierarchical Softmax和負採樣加速訓練計算。

後來發現其實Hierarchical Softmax在Hinton 08的那篇《A scalable hierarchical distributed language model》就提到過,然後負採樣的方法在Collobert 08年的《A Unified Architecture for Natural Language Processing: Deep Neural Networks with Multitask Learning》也有。

之前的這兩篇文章也都是word embedding相關的,也有開源代碼,就想知道為什麼最後是word2vec火了起來,而不是更早的這兩篇文章中的方法。


Word2vec訓練方面採用的HSoftmax以及負採樣確實可以認為是創新不大。但Word2vec流行的主要原因也不在於此。主要原因在於以下3點:

1. 極快的訓練速度。以前的語言模型優化的目標是MLE,只能說詞向量是其副產品。Mikolov應該是第一個提出拋棄MLE(和困惑度)指標,就是要學習一個好的詞嵌入。如果不追求MLE,模型就可以大幅簡化,去除隱藏層。再利用HSoftmax以及負採樣的加速方法,可以使得訓練在小時級別完成。而原來的語言模型可能需要幾周時間。

2. 一個很酷炫的man-woman=king-queen的示例。這個示例使得人們發現詞嵌入還可以這麼玩,並促使詞嵌入學習成為了一個研究方向,而不再僅僅是神經網路中的一些參數。

3. word2vec里有大量的tricks,比如雜訊分布如何選?如何採樣?如何負採樣?等等。這些tricks雖然擺不上檯面,但是對於得到一個好的詞向量至關重要。

舉一個生活中的例子,語言模型和word2vec的關係可以類比於單反相機和美顏手機,它們的受眾不一樣。就照片質量(MLE)而言,單反肯定好。但如果更關心美顏(詞嵌入)和便攜性(訓練速度),美顏手機就更受歡迎。

更多的資料可以參考:

https://nndl.github.io/ch12.pdf


詞嵌入模型效果好不好的關鍵之一,是用上下文詞預測當前詞的formulation,即採用的回歸函數。

Hinton等07年和08年的log bilinear language model之前的工作都採用的是 softmax([上下文詞向量,當前詞向量]的線性變換) 的形式,softmax裡邊可以簡化認為是一些向量的線性和。但幾個向量的線性和不能很好的抓住這幾個向量在隱空間一些維度上取值接近的特點,所以效果並不好。

07年的Three New Graphical Models for Statistical Language Modelling里,三個模型之一是log bilinear language model (LBL), 題目中08年的論文擴展了這個方法,得到Hierarchical Log Bilinear Language model. 為了敘述簡單,下面把這兩種方法統稱為LBL。LBL使用了 softmax(上下文詞向量的線性變換 * 當前詞向量) 的形式,點乘在抓兩個向量在一些維度上取值接近方面,比相加要好得多,這是詞向量模型發展的一個重大突破。

word2vec使用的也是LBL。那麼和之前的方法有什麼區別呢?08年的Hierarchical LBL里,用的是這樣的回歸函數:

P(w_n=w|w_1,cdots,w_{n-1})=sigma(v_w cdot sum_{i=1}^{n-1} C_i v_{w_i} + b_w)

這裡的Ci都是矩陣,不同位置對應不同的矩陣。

word2vec的CBOW用的是(skip-gram我覺得和CBOW基本是等價的,效果也類似,但CBOW的概率解釋好些,所以拿它來比較):

P(w_n=w|w_1,cdots,w_{n-1})=sigma(frac{1}{n-1} v_w cdot sum_{i=1}^{n-1} 	ilde{v}_{w_i})

可見它移除了變換矩陣Ci和偏移量bw. 實際上我們事後諸葛來看,變換矩陣Ci也的確是多餘的,因為 兩個詞經常一塊出現&<=&>兩個詞在某方面有相似語義&<=&>兩個向量在某些維度取值類似,那麼直接點乘就可以了,用Ci變換一下,反而有可能把本來相似的維度變得不同,從而讓學出來的向量不能很好滿足「相似詞在有些維度上取值相近」的訓練效果。

顯而易見,移除Ci會極大的提高運算速度,使word2vec在大語料上訓練非常可行。兩個LBL模型訓練語料都是1000w單詞左右,而word2vec即使用wikipedia這樣&>20億詞規模的語料也只需幾小時,大語料下得出的詞向量當然會抓住更多的語法語義規律,從而更準確。

所以我覺得,word2vec的成功,印證了一句話:Less is more.


《論給演算法起個好名字的重要性》、《論論文最後一位作者是大牛的重要性》。


個人認為核心還是作者在發論文的同時直接提供了一個簡單可用的word2vec源碼實現,那篇論文的公式部分其實寫的有些亂,後來好像還有人寫論文把推導過程寫的更易讀。


推薦閱讀:

在使用relu的網路中,是否還存在梯度消失的問題?
關於語音識別特徵提取該如何入門?
詞向量,LDA,word2vec三者的關係是什麼?_?
預測和回歸的區別是什麼?
語音識別中,如何理解HMM是一個生成模型,而DNN是一個判別模型呢?

TAG:機器學習 | 自然語言處理 |