首先,使用one-hot編碼表示的詞,詞與詞之間的相似度是無法用向量的距離來衡量的,為什麼使用word2vec得出的詞向量,可以用向量的距離來衡量詞相似度?


因為:

[公式]

如果設它們都是單位向量,則

[公式]

which is in line with the training objective of word2vec.


在理解word2vec之前首先需要理解one-hotword embeddingCBOW模型Skip-gram模型等幾個概念。

one-hot中文叫獨熱編碼,由於在NLP中,字詞都是離散的,因此用一個句子長度相同的向量來表達每個單詞是最容易想到的方法,例如Jack wants to eat an apple.這句話用one-hot的表達方式可以是如下

Jack -&> [1,0,0,0,0,0]
wants -&> [0,1,0,0,0,0]
to -&> [0,0,1,0,0,0]
eat -&> [0,0,0,1,0,0]
an -&> [0,0,0,0,1,0]
apple -&> [0,0,0,0,0,1]

每個詞都是一個一維向量,整個句子就是個矩陣。但是我們仔細觀察下每個向量,就會發現一些問題: - 每個向量之間相互正交的即內積為0,也就是說詞與詞之間是沒有任何關係的。 - 每個詞向量的維度和總的詞數相關,而且每個詞向量只有一個非零的位,所以在文章較長的情況下,詞向量會是一個非常高維稀疏的矩陣。 - 詞與詞之間沒有關係,詞向量高維稀疏導致計算量激增。

所以為了解決one-hot的幾個問題,便有人提出了更叫高效的詞向量表達方式,那就是word-embedding(詞嵌入)。word embedding簡單來說其實就是將高維稀疏的向量降維成稠密的低維向量,一種高維到低維的映射方式。

那麼問題又來了如何實現word embedding呢,word2vec簡單來說就是一個高效的實現word embedding的演算法工具。

如上圖所示,word2vec模型其實就是一個簡單化的神經網路,輸入是One-Hot向量,Hidden Layer沒有激活函數,也就是線性的單元。Output Layer維度跟Input Layer的維度一樣,用的是Softmax回歸。當這個模型訓練好以後,我們並不會用這個訓練好的模型處理新的任務,我們真正需要的是這個模型通過訓練數據所學得的參數,例如隱層的權重矩陣。

這個模型是如何定義數據的輸入和輸出呢?這個時候就需要提到CBOW(Continuous Bag-of-WordsSkip-Gram兩種模型。

- CBOW模型的訓練輸入是某一個特徵詞的上下文相關的詞對應的詞向量,而輸出就是這特定的一個詞的詞向量。 

- Skip-Gram模型和CBOW的思路是反著來的,即輸入是特定的一個詞的詞向量,而輸出是特定詞對應的上下文詞向量。CBOW對小型資料庫比較合適,而Skip-Gram在大型語料中表現更好。

如上圖所示,左右兩張圖分別從不同角度代表了輸入層-隱層的權重矩陣。左圖中每一列代表一個10000維的詞向量和隱層單個神經元連接的權重向量。右圖中,每一行實際上代表了每個單詞的詞向量。

如果我們將一個1 x 10000的向量10000 x 300的矩陣相乘,它會消耗相當大的計算資源,為了高效計算,隱層權重矩陣看成了一個"查找表"(lookup table),進行矩陣計算時,直接去查輸入向量中取值為1的維度下對應的那些權重值。隱層的輸出就是每個輸入單詞的word embedding vector,如下圖所示。

所以我們可以看出,word2vec得出的詞向量其實就是訓練後的一個神經網路的隱層的權重矩陣,在經過CBOW或者Skip-Gram模型的訓練之後,詞義相近的詞語就會獲得更為接近的權重,因此可以用向量的距離來衡量詞的相似度。

Reference

[1] Word Embeddingword2vec

[2] 通俗理解word2vec

[3] word2vector 理解入門


漢堡老師,你是認真的?

如果你真的是認真的,可以看下我這篇博客:

CeruleanW:重拾基礎 - Word2Vec?

zhuanlan.zhihu.com圖標

如果快速回答你的問題的話,大概是這樣的:

直覺上你想想啊,無論你用跳字模型還是連續詞袋,我隨便舉一個例子:

蘋果是甜的。

西瓜是甜的。

在你word2vec訓練完,取獨熱編碼輸入的隱含層得到詞向量的時候,這兩句話的Label都是一樣的,詞性也一樣,即使是在其他句子里,大概率它們都是能互換的。回到訓練過程,是不是作為樣本輸入時候,它們計算的Loss和貢獻的梯度差不多?那天然的最後訓練完取詞向量的時候這倆向量很相似呢?


從實現角度可以看出來,中間一層是多詞向量sum,後面再做分類,所以從這裡看出,詞向量的每一維度具備獨特涵義,從而您也可以用其來計算詞與詞之間距離!


因為word2vec是有前提假設的,它假設了「具有相同上下文的中心詞具有可替換性」,這與word2vec的兩種訓練模式cbow和skip-gram這是完全吻合的。

————————————————————

舊答案:

one-hot是一種離散表徵方式,可以表徵的詞語就是你所看見的這些詞語,沒法表徵未登錄詞;

另外,one-hot本身就不考慮詞語之間的聯繫,而是為了區分詞語;

而word embedding是一種連續表徵方式,所有詞語(包括你看見的和還未看見的)對應的向量構成一個連續空間,未登錄詞可有已知詞的向量來表示;

另word2vec是遵循「同義可替換」假設的,本質就是為了建模詞語之間的聯繫。


推薦閱讀:
相关文章