深度學習筆記(32):word2vec模型簡介

前因

與使用ASCII或者其他編碼方式編碼的字符能表達萬物,但是對於nlp來講,處理的最小單元是詞彙而不是字符。所以我們必須建立一個字典集合,將所有的出現的詞彙放到其中,然後將他們映射成onehot,但是這麼做的話,每個單詞的維度都是字典集合的大小那麼大,而且一堆零一個一純粹是簡單的先後順序問題,並沒有什麼語義上的實際意義。所以我們需要做若干件事:降維,信息量增大。
要做到這兩點,一個直觀的想法就是去重新設置特徵,然後去編碼,比如對於[‘man’,‘woman’,‘apple’,‘banana’,‘queen’,‘king’]這些詞彙,我們設置[‘gender’,‘food’,‘royal’]這些維度,並且分別爲他們標記,這樣的話,我們就可以得到一個3×8的表格,也就是說我們可以將每一個詞用一個三維向量來表徵,用這個向量去取代onehot的向量,來進行相似度抑或是其他的詞嵌入探究。而這就達到了降維的作用(比如一共有一百萬個詞,那可能也就只有500個特徵就可以了),而且勢必信息量更大,更加準確。但是並不現實,因爲這個二維數組要是人工標註的話未免代價過大,所以我們要找到一種,機器讀入大量文本,自己去找規律的方式,而這就是我們word2vec以及類似機器學習算法的的初衷。

過程

有CBOW和k-gram,時間有限不細述了,可以去看其他資料去學習haffman優化的細節。其實這個訓練過程就是基於一個詞的特徵是靠着周圍的此來決定的這一個原則(事實如此),我們這裏談談優化目標和一些細節:
一定要在心裏清楚,我們想要的是一種詞彙到向量,也就是高維的onehot到低維的特徵向量的映射方式,就和人臉識別一樣,我們真正想要的是權重矩陣。
訓練過程其實還是比較簡單的,比如說我們讀入了一個詞,隨機在他周圍的詞裏面選一個(我們先簡單舉例),比如
“I love you but it hurts”,輸入x爲love,輸入應該是you,然後使用反向傳播更新兩邊的矩陣。(兩個矩陣都是訓練出來的,但我們最後需要的是左邊的去做word2vec映射)
在這裏插入圖片描述
對於k-gram,我們的思想是想訓練出用一個詞推測出周圍關係的矩陣,注意我們使用的W‘是同一個
在這裏插入圖片描述
而對於CBOW,則是利用使用多個詞去推測一個詞的準確性,去訓練權重矩陣的準確性,注意我們使用的W是同一個。

在這裏插入圖片描述
但是值得注意的一點是:當我們將中間的特徵向量映射回到onehot的這個過程實際上是一個softmax層,需要計算高緯度的e指數和求和,這樣的話實際上計算代價是很昂貴的,而這也是其他詞嵌入的優化點所在。

參考資料

https://zhuanlan.zhihu.com/p/26306795
https://blog.csdn.net/yu5064/article/details/79601683

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章