NLP基礎學習7-word2vec

這次實在沒有時間我偷一點懶,寫的簡略些。雖然這一次的任務是NLPer熟悉的不能再熟悉的word2vec, 具體來看:

  1. 文本表示:從one-hot到word2vec。
  2. 詞袋模型:離散、高維、稀疏。
  3. 分佈式表示:連續、低維、稠密。word2vec詞向量原理並實踐,用來表示文本。

從one-hot 到word2vec

獨熱編碼即 One-Hot 編碼,又稱一位有效編碼,其方法是使用N位狀態寄存器來對N個狀態進行編碼,每個狀態都有它獨立的寄存器位,並且在任意時候,其中只有一位有效。
**優點:**解決了分類器不好處理離散數據的問題,並且在一定程度上也起到了擴充特徵的作用。
缺點: 在文本特徵表示上有些缺點就非常突出了。首先,它是一個詞袋模型,不考慮詞與詞之間的順序(文本中詞的順序信息也是很重要的);其次,它假設詞與詞相互獨立(在大多數情況下,詞與詞是相互影響的);最後,它得到的特徵是離散稀疏的。更大的問題是其不滿足我們前面的期望——相似的詞的距離較近而不相似的較遠。對於one-hot向量來說,相同的詞距離是0,而不同的詞距離是1。這顯然是有問題的,因爲cat和dog的距離肯定要比cat和apple要遠。但是在one-hot的表示裏,cat和其它任何詞的距離都是1

爲了解決上述缺陷,提出了word2vec。其實這基於Firth 教授在1957年提出一個分佈式語義的假設,即A word’s meaning is given by the words that frequently appear close-by (一個詞的語義是由它周圍經常出現的詞決定的)。 word2vec的本質就是求詞向量的框架。這裏對於每一個詞用一個低緯度的稠密向量來表示,詞是由所有維度共同表示,單獨一維並沒有的獨立的含義。

從數學角度看, word2vec的目標函數: J(θ)=1Tlog(L(θ))J(\theta)= -\frac{1}{T}log(\mathcal{L}(\theta))
其中,L(θ)=t=1Tmjm;j!=mP(wt+1wt;θ)\mathcal{L}(\theta)=\prod_{t=1}^T \prod_{-m \le j \le m; j != m}P(w_{t+1}|w_t;\theta)

對於word2vec的具體求解,目前主流的是兩種方法,即 CBOW 和 skip-gram。兩種都採用了滑動窗口,前者是用窗口內的其他詞去預測中心詞,而後者則是用中心詞去預測窗口的其他詞。現實中,兩者的效果接近。

CBOW
Skip-gram
從實現的角度,採用的是最基本的神經網絡(輸入層->隱藏層->輸出層),如下圖所示CBOW的實現:
CBOW實現
關於其他word2vc的方式,比如glove, 我會在後面有時間補上。

參考文獻

  1. 郭耀華的blog,NLP之——Word2Vec詳解,https://www.cnblogs.com/guoyaohua/p/9240336.html
  2. cs224n, lecture 2
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章