GloVe與word2vec的區別

GloVe與word2vec,兩個模型都可以根據辭彙的「共現co-occurrence」信息,將辭彙編碼成一個向量(所謂共現,即語料中辭彙一塊出現的頻率)。兩者最直觀的區別在於,word2vec是「predictive」的模型,而GloVe是「count-based」的模型。具體是什麼意思呢?

Predictive的模型,如Word2vec,根據context預測中間的辭彙,要麼根據中間的辭彙預測context,分別對應了word2vec的兩種訓練方式cbow和skip-gram。對於word2vec,採用三層神經網路就能訓練,最後一層的輸出要用一個Huffuman樹進行詞的預測(這一塊有些大公司面試會問到,為什麼用Huffuman樹,大家可以思考一下)。

Count-based模型,如GloVe,本質上是對共現矩陣進行降維。首先,構建一個辭彙的共現矩陣,每一行是一個word,每一列是context。共現矩陣就是計算每個word在每個context出現的頻率。由於context是多種辭彙的組合,其維度非常大,我們希望像network embedding一樣,在context的維度上降維,學習word的低維表示。這一過程可以視為共現矩陣的重構問題,即reconstruction loss。(這裡再插一句,降維或者重構的本質是什麼?我們選擇留下某個維度和丟掉某個維度的標準是什麼?Find the lower-dimensional representations which can explain most of the variance in the high-dimensional data,這其實也是PCA的原理)。

兩種方法都能學習詞的向量表示,在real world application中,他們效果上有啥差別呢?

答案是performance上差別不大。

兩個模型在並行化上有一些不同,即GloVe更容易並行化,所以對於較大的訓練數據,GloVe更快。

在英文上,glove for GloVe 和 gensim for word2vec是常用的訓練詞向量的python package,完全可以使用自己的訓練語料訓練詞向量。當然,他們都提供了google news(英文)上訓練好的詞向量,大家完全可以下載下來,直接使用。對於中文的訓練語料,可以使用sogou中文新聞語料。

更多關於GloVe和word2vec的區別詳見論文:

Don』t count, predict! A systematic comparison of context-counting vs. context-predicting semantic vectors

本文翻譯自Stephan Gouws from Quora,加入了一點點自己的思考。

當然還是希望大家讀一讀原答案:quora.com/How-is-GloVe-

不得不說,Quora和Medium上有很多優質的資源,對於來自中國的「效仿者」 zhihu和簡書差距還蠻大的。以後也會多多搬運一些Quora和Medium上的資源來跟大家分享。

感謝閱讀!

推薦閱讀:

支持向量機SVM總結之問題描述
【用Sklearn進行機器學習】第一篇 - 介紹Scikit-Learn
損失函數——Hinge
多版本中文停用詞詞表 + 多版本英文停用詞詞表 + python詞表合併程序
Learning Explanatory Rules from Noisy Data 閱讀筆記1

TAG:深度學習DeepLearning | 機器學習 | 自然語言處理 |