1. 程式人生 > >cbow與skip-gram

cbow與skip-gram

分詞 logs 我們 project 情況 五個 amp 總結 霍夫曼

場景:上次回答word2vec相關的問題,回答的是先驗概率和後驗概率,沒有回答到關鍵點。

詞袋模型(Bag of Words, BOW)與詞向量(Word Embedding)模型

  • 詞袋模型就是將句子分詞,然後對每個詞進行編碼,常見的有one-hot、TF-IDF、Huffman編碼,假設詞與詞之間沒有先後關系。
  • 詞向量模型是用詞向量在空間坐標中定位,然後計算cos距離可以判斷詞於詞之間的相似性。

先驗概率和後驗概率

先驗概率和後驗證概率是基於詞向量模型。首先一段話由五個詞組成:
A B C D E
對C來說:先驗概率指ABDE出現後C出現的概率,即P(C|A,B,D,E)
可以將C用ABDE出現的概率來表示 Vector(C) = [P(C|A), P(C|B), P(C|D), P(C|E) ]
後驗概率指C出現後ABDE出現的概率:即P(A|C),P(B|C),P(D|C),P(E|C)

n-gram

先驗概率和後驗概率已經知道了,但是一個句子很長,對每個詞進行概率計算會很麻煩,於是有了n-gram模型。
該模型基於這樣一種假設,第N個詞的出現只與前面N-1個詞相關,而與其它任何詞都不相關,整句的概率就是各個詞出現概率的乘積。
一般情況下我們只計算一個單詞前後各兩個詞的概率,即n取2, 計算n-2,.n-1,n+1,n+2的概率。
如果n=3,計算效果會更好;n=4,計算量會變得很大。

cbow

cbow輸入是某一個特征詞的上下文相關的詞對應的詞向量,而輸出就是這特定的一個詞的詞向量,即先驗概率。
訓練的過程如下圖所示,主要有輸入層(input),映射層(projection)和輸出層(output)三個階段。
技術分享圖片

skip-gram

Skip-Gram模型和CBOW的思路是反著來的,即輸入是特定的一個詞的詞向量,而輸出是特定詞對應的上下文詞向量,即後驗概率。訓練流程如下:
技術分享圖片

word2vec中的Negative Sampling概述

傳統網絡訓練詞向量的網絡:
技術分享圖片

word2vec訓練方法和傳統的神經網絡有所區別,主要解決的是softmax計算量太大的問題,采用Hierarchical SoftmaxNegative Sampling模型。
word2vec中cbow,skip-gram都是基於huffman樹然後進行訓練,左子樹為1右子樹為0,同時約定左子樹權重不小於右子樹。
構建的Huffman樹如下:
技術分享圖片


其中,根節點的詞向量對應我們的投影後的詞向量,而所有葉子節點就類似於之前神經網絡softmax輸出層的神經元,葉子節點的個數就是詞匯表的大小。在霍夫曼樹中,隱藏層到輸出層的softmax映射不是一下子完成的,而是沿著霍夫曼樹一步步完成的,因此這種softmax取名為"Hierarchical Softmax"。

因為時間有限,暫時總結這些,下一次詳細看一下word2vec中的實現。

參考:
word2vec原理(一) CBOW與Skip-Gram模型基礎
word2vec原理(二) 基於Hierarchical Softmax的模型
自己動手寫word2vec (四):CBOW和skip-gram模型

cbow與skip-gram