1 one-word context
假設:
詞彙表裏面有3個單詞 ‘今天’,‘天氣’,‘不錯’; 即V=3
隱藏層具有2個節點;即N=2
目的是當輸入一個單詞,我們來預測其下一個單詞?
則在input layer由one-hot編碼:
- 今天······[1,0,0]
- 天氣······[0,1,0]
- 不錯······[0,0,1]
接着我們需要初始化一下輸入矩陣和輸出矩陣
這裏的值你可以任意定義,反正最後都會由梯度下降到最低點的:
首先以‘天氣‘爲例:
1.由公式可以推出:
2.接着由公式可以推出:(爲矩陣中的第列)
3.再由公式:
更新隱藏層→輸出層權重的等式
我們知道‘天氣’後面正確的輸出應該是‘不錯’,所以真實值爲:
則 可以理解爲,當等於不錯時等於1,其餘等於0;
由公式得:
再由:和可得:
這裏假設學習率
更新隱藏層→輸出層權重的等式
由公式和公式可得:
對比一下更新前與更新後:
輸入單詞‘天氣’:
更新前:
更新後
期望輸出單詞‘不錯’:
更新前:
更新後:
餘弦相似度距離:
更新前:
In [1]:cosine_similarity([3,4],[3,6])
Out[1]: 98.39
更新後:
In [1]:cosine_similarity([x1,y1],[x2,y2])
Out[1]: 98.39
已經很接近了所以幾乎沒變。
再看看 輸入 天氣 輸出 今天 的相似度變化:
更新前:
In [1]:cosine_similarity([3,4],[1,4])
Out[1]: 92.16
更新後:
In [1]:cosine_similarity([x1,y1],[x2,y2])
Out[1]: 92.12
從結果來看,因爲不是期望的輸出,所以距離越來越遠了。
2.CBOW
還是以上面例子爲例:
由3個單詞組成的句子:
- 今天······[1,0,0]
- 天氣······[0,1,0]
- 不錯······[0,0,1]
不過我們的規則變爲:
當給予附近單詞,來預測中心單詞?
對應這裏就是給予 今天/不錯 來預測 中心詞是 天氣 的概率。
接着依然初始化一下輸入矩陣和輸出矩陣:
由公式可以得到:
(emmm,運氣這麼好,湊的結果與之前一模一樣....因爲h的值與前面one-word-text的一樣,推到更新過程也是一模一樣的,使用就不寫了,其實就是複製上面的粘貼下來)
---------------------------略---------------------------
3.skip-gram
在skip-gram中我們的規則變爲:
當給予中心單詞,來預測附近單詞?
對應這裏就是給予 天氣 來預測 附近詞是 今天,不錯 的概率。