Word2vec之CBOW


一、Word2vec

word2vec是Google與2013年開源推出的一個用於獲取word vecter的工具包,利用神經網絡為單詞尋找一個連續向量看空間中的表示。word2vec是將單詞轉換為向量的算法,該算法使得具有相似含義的單詞表示為相互靠近的向量。

此外,它能讓我們使用向量算法來處理類別,例如着名等式KingMan+Woman=Queen。

 

 

              來源:國王-男人+女人=皇后,背后的詞向量工作原理

 

word2vec一般分為CBOW(Continuous Bag-of-Words 與Skip-Gram兩種模型:

1、CBOW:根據中心詞周圍的詞來預測中心詞,有negative sample和Huffman兩種加速算法;

2、Skip-Gram:根據中心詞來預測周圍詞;

二者的結構十分相似,理解了CBOW,對於Skip-Gram也就基本理解了。下面主要來講講CBOW。

      來源:word2vec原理(一) CBOW與Skip-Gram模型基礎

二、CBOW

 

來源:word2vec是如何得到詞向量的?

 

上圖為CBOW的主要結構形式。對於上圖,假設單詞的向量空間維度為V,上下文單詞個數為C,求解兩個權重均值W和W'。對於上圖的解釋如下:

1、輸入層:上下文單詞的onehot形式;

2、隱藏層:將輸入層所有onehot后的向量乘以第一個權重矩陣W(所有的權重矩陣相同,即共享權重矩陣),然后相加求平均作為隱藏層向量,該向量的大小與輸入層的每一個樣本大小相同;

3、輸出層:將隱藏層向量乘以第二權重矩陣W‘,得到一個V維的向量,然后再通過激活函數(softmax)得到每一維詞的概率分布,概率最大的位置所指示的單詞為預測出的中間詞;

4、一般使用使用的損失函數為交叉熵損失函數,采用梯度下降的方式來更新W和W’;這實際上是一個假任務,即我們需要的只是第一個權重矩陣W。得到第一個矩陣W之后,我們就能得到每個單詞的詞向量了。

 

更具體的結構以及流程如下:

      來源:究竟什么是Word2vec ? Skip-Gram模型和Continuous Bag of Words(CBOW)模型 ?

 

假設我們現在的語料是這一個簡單的只有四個單詞的句子:
I drink coffee everyday
我們使用的window size設為2。
則訓練這么一個句子,我們會需要訓練4個batch,即句子中的單詞個數的batch。
 
首先對單詞onehot則可以得到
X_I = [1,0,0,0];X_drink = [0,1,0,0];X_coffee = [0,0,1,0] ; X_everyday = [0,0,0,1];
 
1、第一個batch:I為中心詞,drink coffee為上下文,即使用單詞drink coffee來預測單詞I,即輸入為X_drink和X_coffee,輸出為X_I,然后訓練上述網絡;
2、第二個batch:drink為中心詞,I和 coffee everyday為上下文,即使用單詞I和coffee everyday,即輸入為X_I和X_coffee、X_everyday,輸出為X_drink,然后訓練上述網絡;
3、第三個batch:coffee為中心詞,I coffee 和 everyday為上下文,同理訓練網絡;
4、第四個batch:everyday為中心詞,drink coffee為上下文,同理訓練網絡。
 
然后重復上述過程(迭代)3-5次(epoehs)左右即得到最后的結果。
 
具體的第三個batch的過程可見 word2vec是如何得到詞向量的?。得到的結果為[0.23,0.03,0.62,0.12],此時結果是以coffee為中心詞的詞向量,每個位置表示的是對應單詞的概率,例如該詞向量coffee的概率為0.62。
需要注意的是每個batch中使用的權重矩陣都是一模一樣的


三、word2vec的python使用

可以使用python中的gensim庫。

具體可以見談談Word2Vec的CBOW模型最后一個部分,以及官網https://radimrehurek.com/gensim/models/word2vec.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM