1. 程式人生 > >NlP之word2vec的發展歷程

NlP之word2vec的發展歷程

#NlP之word2vec 的前世今生
2013年,Google開源了一款用於詞向量計算的工具——word2vec,引起了工業界和學術界的關注。首先,word2vec可以在百萬數量級的詞典和上億的資料集上進行高效地訓練;其次,該工具得到的訓練結果——詞向量(word embedding),可以很好地度量詞與詞之間的相似性。隨著深度學習(Deep Learning)在自然語言處理中應用的普及,很多人誤以為word2vec是一種深度學習演算法。其實word2vec演算法的背後是一個淺層神經網路。
#詞向量的基礎

##one-hot 表示

在很早之前就有用詞向量表示詞,但是詞向量較為冗長,詞向量的維度是整個詞表大小,只有詞對應的位置為一,其餘都是0。詞向量的維度過大,且構成的矩陣極其稀疏,並且one-hot表示會丟掉詞於此之間的關係。

Dristributed representation可以解決One hot representation的問題,它的思路是通過訓練,將每個詞都對映到一個較短的詞向量上來。所有的這些詞向量就構成了向量空間,進而可以用普通的統計學的方法來研究詞與詞之間的關係。這個較短的詞向量維度是多大呢?這個一般需要我們在訓練時自己來指定。如下圖所示,將“red mini van”這個單詞對映到3維向量上,實際是對向量進行了降維處理。

因為使用disturbuted representation表示詞向量,所以可以看出詞於詞之間的關係,有了向量就可以進行向量表示,
(KING)-(MAN)+(WOMAN)=(QUEE)

NNLM

鑑於Ngram等模型的不足,2003年,Bengio等人發表了一篇開創性的文章:A neural probabilistic language model[3]。在這篇文章裡,他們總結出了一套用神經網路建立統計語言模型的框架(Neural Network Language Model,以下簡稱NNLM),並首次提出了word embedding的概念(雖然沒有叫這個名字),從而奠定了包括word2vec在內後續研究word representation learning的基礎。

nnlm模型輸入,投影層,隱藏層和輸出層:

  1. 輸入層是有n個1-V編碼的單詞,v是詞表的維度。將輸入層首先進行對映,使用一個共享對映矩陣C,C是一個N*D維的矩陣,D是對映層的維度,D是遠遠小於詞表的維度的。
  2. 經過對映層後,nnlm有一個擁有一個隱藏層,通過tanh的啟用函式,將權重矩陣和對映層相乘,通過softmax輸出V維的中每個詞的概率向量。我們可以通過最小化cross-entropy的損失函式最小化,從而來調整權重函式。
  3. 最後通過BP反向傳播,求得的矩陣C(N*D維的矩陣)和權重矩陣W,而C就是所謂的詞向量!

為了降低nnlm的計算複雜度,也就是模型中的HxV,我們可以使用hierarchical softmax,將計算複雜度降低到log(V)。但是主要的複雜性實際是由於NDV造成的。NNLM模型在計算NDV上遇到了瓶頸,所以google在2013年,推出了無隱藏層的新模型,CBOW和skip-gram。


#Word2vec之CBOW
CBOW是從,上下context中預測中間值的一個過程,移除前向反饋神經網路中非線性的hidden layer,直接將中間層的embedding layer與輸出層的softmax layer連線。

  1. projection層實際詞向量相加構成了一個詞袋向量,從而比之nnlm模型的投影層更加的簡單,降低了計算複雜性。
  2. 投影層到輸出層是將詞袋模型乘以一個embedding矩陣,從而得到一個連續的embedding向量。

#Word2vec的兩個trick
因此,Skip-gram模型的本質是計算輸入word的input vector與目標word的output vector之間的餘弦相似度,並進行softmax歸一化。我們要學習的模型引數正是這兩類詞向量。
然而,直接對詞典裡的v個詞計算相似度並歸一化,顯然是一件極其耗時的impossible mission。為此,Mikolov引入了兩種優化演算法:層次Softmax(Hierarchical Softmax)和負取樣(Negative Sampling)。

###下篇部落格再說

看了幾篇部落格作為參考,連結如下:
http://http://www.cnblogs.com/iloveai/p/word2vec.html
http://https://zhuanlan.zhihu.com/p/26306795