首先,使用one-hot編碼表示的詞,詞與詞之間的相似度是無法用向量的距離來衡量的,為什麼使用word2vec得出的詞向量,可以用向量的距離來衡量詞相似度?
因為:
如果設它們都是單位向量,則
which is in line with the training objective of word2vec.
在理解word2vec之前首先需要理解one-hot、word embedding、CBOW模型、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的演算法工具。