為什麼NLP中需要詞嵌入 word embeddings(學習心得)

NLP 中一個關鍵理念就是詞嵌入。這是語言表示的一種方式。讓機器理解詞語的對應關係。
1.jpg
我們的詞表,比如有 10000 個詞,如果我們都是用 one-hot vector 來表示

比如兩個 one-hot vector,分別是 man 和 woman
比如 Man 這個單詞,在 5391 處是 1,其他位置都是 0
Woman,在 9853 處是 1,其他位置為 0
這種方法把每個詞孤立起來了。演算法對相關詞的泛化能力 generalize the cross words 不強
這是因為任何兩個 one-hot vector 的內積為 0。也就是兩者無關。

任意兩個 vector 之間的距離都一樣!所以每個詞都是不相關的。
這樣的結果就是,演算法覺得吃蘋果和吃橘子沒有關係。而事實上「蘋果」和「橘子」具有某種相關性,而演算法如果能學習到這種相關性,就能提高泛化能力。
2.jpg
這裡設置多個維度,每個維度設置為 -1~1 的區間,以參數的大小來衡量極性。
這裡假設我們設置了 300 個不同的衡量維度,即每個單詞對應一個 300 維的向量
這個時候我們獲得的「蘋果」「橘子」的向量就不一樣了,兩個向量會有相關性

比如某些屬性上,顏色不太一樣,但是水果屬性都很高,食物屬性等大多數屬性都非常類似
當演算法理解到什麼是蘋果的時候,很容易理解橘子是什麼,即獲得了更好的泛化效果
這就能夠比 one-hot vector 更好地表示不同的單詞

  • 但是我們最終獲得的屬性,並不會像這裡的例子一樣好解釋,因為是機器自己學到的
    3.jpg

有趣的是,可以把 300 維的向量內嵌到一個二位空間裡面,以便於 visualize

常用的演算法叫做 t-SNE 演算法,來自於 Laurens van der Maaten 和 Geoff Hinton 的論文
我們會發現有聚類效果,比如都是人的會靠的比較近,都是數字的在一堆,水果在另一堆
把詞在高維空間中表示,這個過程就叫做 embeddings 嵌入,這就好比把每一個單詞拿出來,嵌入到一個 300 維/或更高維度的空間裡面