cbow word2vec 损失_word2vec个人总结-理论篇
word2vec不算新,但是在工業界有廣泛應用。該方法利用詞在各滑動窗口的共現現象建模詞的潛在關系,并最終得到詞向量(word embedding)。如果兩個詞的embedding向量內積較大,則表示它們關系越近。主要參考的是aston zhang的dive into deep learning ,也結合了相關論文和優質博客, 補充一些自己的理解。
word2vec在其思想框架下提出了兩個具體模型,即skip-gram和CBOW。剛開始看的時候以為是word2vec是一個具體算法,skip-gram/CBOW是其中的兩個模塊,實際上它們是word2vec思想框架下的兩種獨立的實現。
假設單詞
有中心詞 和 背景詞 兩種角色,分別用長度為d的詞向量表示,其中i為單詞表V中的單詞下標。以 作為中心,取前后長度為m的窗口,截取一個2m+1個單詞序列,并利用詞在序列內的共現現象挖掘詞的內在聯系。以一定的步長滑動窗口得到訓練集。窗口內除了 ,其他詞都定義為背景詞。具體概念參考下圖:滑動窗口為2,藍色背景為中心詞,其他為背景詞根據最大似然的思想,既然我們看到了一篇文檔,那么我們認為該文檔的產生不是偶然。假設文檔內各單詞獨立生成,則可人為定義每個單詞的生成概率,進一步得到一篇文檔的生成概率,并利用最大似然的思想最大化這個概率,利用滑動窗口內單詞共現這一線索去求每個單詞的兩種詞向量
和 。自此word2vec已完成使命。我們可以利用詞向量去完成其他任務,例如聚類等。跳字模型(skip-gram)
該模型定義已知中心詞
生成背景詞 的概率:公式1其中
是 的背景詞向量, 是 的中心詞向量,該式是一個softmax。假定滑動窗口大小為m,文本序列長度為T, 。則生成文本序列的似然函數為公式2等價的log損失函數為
公式3公式4其中
公式5接下來是自己的一些理解。
先考慮從輸入層到隱藏層的過程。輸入層為
的onehot表示,隱藏層參數矩陣實際上是所有中心詞的詞向量,隱藏層輸出的是的詞向量 ,是一個“查字典的過程”。例子:輸入第四個詞的onehot,與隱藏層矩陣相乘,最后輸出第四個詞作為中心詞的詞向量
。該過程表達的是“已知中心詞為 ”。再考慮從隱藏層到輸出層的過程。隱藏層的輸出是
,輸出層參數矩陣實際上是所有背景詞的詞向量,兩者做向量內積,第i個輸出單元為 的值,最后以softmax形式歸一化。該過程表達的是“已知中心詞為,生成背景詞 的概率”。例子:2. 無標簽的word2vec內部隱含的有監督學習。既然是NN,那么就存在前向傳遞和反向傳播兩個步驟。前者固定參數并計算中間結果,最終輸出預測值。后者根據設定好的損失函數(目標函數),固定中間結果并更新參數。損失函數本質上是關于標簽與預測值的函數
,所以標簽是什么呢?標簽其實就是 中的 。例子:假設
為第四個單詞,左邊是softmax輸出的預測概率,右邊是 的onehot形式的label,由于 真的出現了,所以label為1。從模型的似然函數來看,實際上等價于交叉熵 ,其中
是y_label的第v各分量,因為是onehot形式,化簡即得公式3。3. 為什么一般只使用skip-gram的中心詞向量作為詞的表征向量
感性認識見此鏈接。我嘗試在公式層面用反向傳播過程去理解,但沒想明白。以隨機梯度下降為例,每個樣本產生的損失函數見公式3
該公式是關于任一背景詞向量
, 和中心詞向量 的函數。反向傳播時會更新所有背景詞向量和指定中心詞向量。每個樣本每次反向傳播時,背景詞向量都會更新,那么為什么skip-gram不取背景詞向量作為詞的表征呢?4. 條件概率
中是如何想到用背景詞向量乘中心詞向量 來對條件概率進行建模的向量內積本質上就是cosine距離。從物理意義上來說,skip-gram建模的是中心詞和背景詞的共現,若中心詞
和背景詞 在滑動窗口內同時出現,則兩者隱含語義越接近,向量內積就越大。CBOW
該模型與skip-gram最大的不同在于條件概率的定義。不同于skip-gram,CBOW定義的是已知背景詞等情況下生成中心詞的條件概率。由于背景詞有多個,一般求所有背景詞的平均,然后用skip-gram相同的步驟求解。CBOW一般用背景詞向量來表征單詞。
CBOW訓練速度要比skip-gram快,原因在于一個滑動窗口內只能產生一個sample,而skip-gram可以產生多個。比如滑動窗口含“the man loves his son”, loves為中心詞。對于CBOW,只有一個樣本,該樣本以loves為中心詞,“the man his son”作為背景詞;對于skip-gram,有多個樣本,即<love, the>, <love, man>, <love, his>, <love son>。
skip-gram效果更好一些,尤其是生僻字。原因有兩個,一是上一段提到的樣本的原因。love在skip-gram有四個sample,可以更新四次參數(假設使用隨機梯度下降)。而使用CBOW時"the man his son"只有一個樣本,更新一次參數。此外,CBOW用所有背景詞的均值來表示背景詞信息帶入運算,也會損失精度。
參考資料
總結
以上是生活随笔為你收集整理的cbow word2vec 损失_word2vec个人总结-理论篇的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: openpyxl 绘制饼形图_openp
- 下一篇: python mac os安装教程_教程