一、介紹
- word2vec是Google於2013年推出的開源的獲取詞向量word2vec的工具包。它包括了一組用於word embedding的模型,這些模型通常都是用淺層(兩層)神經網絡訓練詞向量。
- Word2vec的模型以大規模語料庫作為輸入,然后生成一個向量空間(通常為幾百維)。詞典中的每個詞都對應了向量空間中的一個獨一的向量,而且語料庫中擁有共同上下文的詞映射到向量空間中的距離會更近。
- word2vec目前普遍使用的是Google2013年發布的C語言版本,現在也有Java、C++、python版本的實現,但是從效果和速度上還是C的更勝一籌,速度很快。
二、Word2Vec中的兩種模型、兩種加速方法
1、CBOW model 和 Skip-Gram model
- CBOW 是 Continuous Bag-of-Words Model 的縮寫,CBOW是通過上下文預測中間詞的模型
- Skip-Gram model與CBOW正好相反,是通過中間詞來預測上下文,一般可以認為位置距離接近的詞之間的聯系要比位置距離較遠的詞的聯系緊密。兩種model如下圖所示。
2、Hierarchical Softmax 和 Negative sampling
-
Negative sampling:負采樣,目的是減少分母的規模,隨機采樣幾個詞,僅計算這幾個詞和預測詞的分類問題,這樣就將一個規模龐大的多元分類轉換成了幾個二分類問題。負采樣用在Skip-Gram model上就是增加共線的詞對出現的頻率,而負采樣不出現的額詞隨機抽樣,降低他們的概率。
-
Hierarchical Softmax:層次化Softmax,將所有的詞放在樹的葉子節點上,構造Huffman樹,使⽤哈夫曼編碼,將計算復雜度較⾼的Softmax過程轉化為多次⼆元分類任
務 。 -
三、Code 和 測試
1、Code
- 地址:https://github.com/bamtercelboo/pytorch_word2vec
- 目前的demo簡單的實現了Skip-Gram + Hierarchical Softmax 、Skip-Gram + Negative sampling、CBOW + Hierarchical Softmax、CBOW + Negative sampling四種方法。
2、測試
- 測試是基於C版本的Word2vec跑出來的詞向量與pytorch跑出來的詞向量進行了簡單的測試,當然兩種都是在相同模型以及相同方法上的測試。
- 評分測試:C版本與pytorch版本的測試結果很接近(結果很低,是因為語料不是很大)
- 測試結果說明,pytortch跑出來的詞向量效果和C版本跑出來的詞向量版本效果是相近的,但是在速度方面C明顯高於pytorch。