002-詞向量,神經網絡模型,CBOW,哈夫曼樹,Negative Sampling
詞向量:
無論是一段話或是一篇文章,詞都是最基本的組成單位。
如何讓計算機利用這些詞?
重點是如何把一個詞轉換成一個想向量
如果在一個二維空間中,had,has,have意思相同,所以要離的比較近。
need,help也是離的比較近
要表現出相同,相關。
比如說下面的例子:
哪些詞離青蛙frog比較近?同義詞
對於兩種不同語言,建模之後語言空間也是很接近的,
所以可以說構建出來的詞向量跟語言類別無關,只是根據語義環(上下文的邏輯)境來建模。
神經網絡模型:
將輸入詞向量進行首尾相接(projection Layer 投影層),在傳給神經網絡進行參數優化,
這裏的輸入向量也需要被優化。
訓練樣本:包括前n-1個詞分別的向量,假定每個詞向量大小m
投影層:(n-1)*m 首尾拼接起來的大向量
輸出:
表示上下文為時,下一個詞恰好為詞典中第i個詞的概率
歸一化:
目的就是要求出每一個詞的詞向量是什麽。
神經網絡的優勢:
S1 = ‘’我今天去網咖’’ 出現了1000次
S2 = ‘’我今天去網吧’’ 出現了10次
對於N-gram模型:P(S1) >> P(S2)
而神經網絡模型計算的P(S1) ≈ P(S2)
神經網絡看來,類似的句子和詞都是一個東西
只要語料庫中出現其中一個,其他句子的概率也會相應的增大
Hierarchical Softmax:
分層的softmax
CBOW:根據上下文得到當前詞
skip-gram:根據當前詞得到上下文。
CBOW:
CBOW 是Continuous Bag-of-Words Model 的縮寫,是一種根據上下文的詞語預測當前詞語的出現概率的模型
如果出現上下文,詞w我們希望它出現的概率應該是越大越好的
我們需要先了解一個叫做哈夫曼樹的東西
哈夫曼樹:
相當於權值乘以步長,把權值最大的放在最前面,在word2vec中,我們可以把詞頻(概率)當做這個權值。
這個二分類可以做softmax分層的判斷,判斷是不是後面要出現的詞,然後把重要的放在第1位,第2位。。。。。。
哈夫曼樹的構造流程
利用哈夫曼樹編碼:
A:111
C:110
B:10
D:0
在哈夫曼樹中,如何決定走向呢?(決定左右)
用以前的知識:邏輯回歸
sigmoid函數
任意數值輸入,得到0~1的輸出,那麽就可以根據這個輸出分類往左還是往右
接著說前文的CBOW
輸入層是上下文的詞語的詞向量,在訓練CBOW模型,詞向量只是個副產品,確切來說,是CBOW模型的一個參數。訓練開始的時候,詞向量是個隨機值,隨著訓練的進行不斷被更新)。
投影層對其求和,所謂求和,就是簡單的向量加法。
輸出層輸出最可能的w。由於語料庫中詞匯量是固定的|C|個,所以上述過程其實可以看做一個多分類問題。給定特征,從|C|個分類中挑一個。
如果我最後需要得到足球這個詞,那麽流程就是:
.
如何求解:
目標函數:
越大越好
求它的最大值也就是求一個梯度上升的問題。
因為和向量和每一個詞向量是線性相關的,所以對和向量更新可以應用到每一個詞向量當中
skip-gram:
還需要考慮的一個問題,如果語料庫非常大,即使用了哈夫曼樹的話,常見的排在最前面,那麽有很多不常見的排在後面,這樣就會使計算復雜度變得非常大。
有一種解決方法叫做Negative Sampling(負采樣):
我們希望預測對的就可能性達到最大化。
累乘的意思就是所有的詞都可以預測對。
所求的值是一樣的,只不過通過另外一種方法描述出來了,前者是通過霍夫曼樹,現在是通過區間取值。
最後更新詞向量
002-詞向量,神經網絡模型,CBOW,哈夫曼樹,Negative Sampling