如果每個詞 都用 OneHot(獨熱編碼) 來表示,矩陣會非常稀疏,而且詞之間的關聯性也無法表示(假設詞之間是相互獨立的)。
考慮將 V 維的OneHot向量降維,利用神經網絡來訓練。
本質:簡化版的神經網絡
輸入層: OneHot向量。
隱藏層: 輸入向量與矩陣成績 的簡單累加,沒有激活函數。
輸出層: 接上SoftMax層,降維之後的向量表示
Word2Vec 有兩種形式: CBOW(continuous bag-of-words) skip-gram
CBOW(根據周圍的詞預測中心的詞)
SKIP-GRAM(根據中心的詞,預測周圍的詞)
1.CBOW
輸入層:{要預測詞 的上下文的 OneHot向量}
: 所有的輸入向量 乘 輸入權重矩陣
隱層: 將所有向量簡單累加 求平均,沒有激活函數
: 隱層的輸出向量 乘 輸出權重矩陣
輸出層: 將得到的 向量做SoftMax
誤差反傳:利用交叉熵損失來計算損失,進而 採用梯度下降法 調整權重矩陣
訓練完成後,任何一個單詞的 OneHot向量 和 矩陣 相乘, 就可以得到 N*1維的向量(word embedding)。
2.SKIP-GRAM
輸入: 滑動窗口中的 輸入詞,和窗口中的其它詞組成 多個詞對 來訓練網絡。
參考:
1.簡書:https://www.jianshu.com/p/471d9bfbd72f
2.知乎:https://www.zhihu.com/question/44832436