1. 程式人生 > >Word Embedding理解

Word Embedding理解

一直以來感覺好多地方都吧Word Embeddingword2vec混起來一起說,所以導致對這倆的區別不是很清楚。

 其實簡單說來就是word embedding包含了word2vec,word2vec是word embedding的一種,將詞用向量表示。

1.最簡單的word embedding是把詞進行基於詞袋(BOW)的One-Hot表示。這種方法,把詞彙表中的詞排成一列,對於某個單詞 A,如果它出現在上述詞彙序列中的位置為 k,那麼它的向量表示就是“第 k 位為1,其他位置都為0 ”的一個向量。但是這種表示方法學習不到單詞之間的關係(位置、語義),並且如果文件中有很多詞,詞向量可能會很長。對於這兩個問題,第一個問題的解決方式是ngram,但是計算量很大,第二個問題可以通過共現矩陣(Cocurrence matrix

)解決,但還是面臨維度災難,所以還需降維。

2.現在較常用的方法就是通過word2vec訓練詞彙,將詞彙用向量表示。該模型涉及兩種演算法:CBOW和Skip-Gram。

cbow是給定上下文來預測中心詞,skip-gram是通過中心詞預測上下文,兩者所用的神經網路都只需要一層hidden layer.

他們的做法是:

cbow:

將一個詞所在的上下文中的詞作為輸入,而那個詞本身作為輸出,也就是說,看到一個上下文,希望大概能猜出這個詞和它的意思。通過在一個大的語料庫訓練,得到一個從輸入層到隱含層的權重模型。如下圖所示,第l個詞的上下文詞是i,j,k,那麼i,j,k作為輸入,它們所在的詞彙表中的位置的值置為1。然後,輸出是l,把它所在的詞彙表中的位置的值置為1。訓練完成後,就得到了每個詞到隱含層的每個維度的權重,就是每個詞的向量。

skip-gram

將一個詞所在的上下文中的詞作為輸出,而那個詞本身作為輸入,也就是說,給出一個詞,希望預測可能出現的上下文的詞。通過在一個大的語料庫訓練,得到一個從輸入層到隱含層的權重模型。如下圖所示,第l個詞的上下文詞是i,j,k,那麼i,j,k作為輸出,它們所在的詞彙表中的位置的值置為1。然後,輸入是l,把它所在的詞彙表中的位置的值置為1。訓練完成後,就得到了每個詞到隱含層的每個維度的權重,就是每個詞的向量。

具體的細節在學習過程中感覺這位使用者的部落格https://www.cnblogs.com/pinard/p/7243513.html 寫的挺好的。

對於我上面的理解如果覺得有幫助,點個贊咯~~~~~~