淺談詞嵌入(word embedding)
今天在李巨集毅老師的公開課上學習了word embedding,中文就是詞嵌入的意思。故將學習內容整理一下,方便以後回顧。
1. 引入
計算機如何理解一句話,一篇文章的意思呢?計算機是用來做數值運算的,故需要將單詞或者片語轉換成數字,才能進行存入計算機進行計算機。怎麼將文字轉化成數字呢?
第一種方法是:one-hot方法
比如說有cat,dog,apple三個詞彙。那麼就生成一個三維向量,每個詞佔向量裡面的一個位置,cat:[1,0,0] dog:[0,1,0] apple:[0,0,1]。那麼假如現在一篇文章有1000個單詞,那麼每個詞彙就要用一個1000維的向量來表述,其中只有單詞所在的位置是1,其餘位置全部是0,每個單詞向量之間是無關的。這樣做的好處是簡單,但是不太符合現實情況。它忽略了單詞之間的相關性,忽略了英語單詞的時態,比如get和got都是一個意思,只是時態不一樣而已。
第二種方法:word embedding方法
依舊是假設現在有一篇文章有1000個單詞,但是我們現在不用1000維來表示,而是把這1000個單詞對映到100維或者其他較小的維度,然後每個單詞就是一個100維的向量。每個向量並不像one-hot方法那樣都是稀疏的,而是都有具體的值。如下圖所示,將這幾個單詞對映到2維空間。我們可以看到,對映後的兩個單詞如果在語義上比較相近,比如run和jump,都是動詞,dog和rabbit都是動物。那麼著兩個單詞的詞向量(單詞所在的點與原點連線的直線所在的向量)就離得比較近。這樣做的好處就是同義詞或者時態不同的詞它們的詞向量就會很接近,保留了文章的語義。
此外,詞嵌入還有一個特性,可以做類比,比如
V(“hotter”) - V(“hot”) ≈V(“bigger”) - V(“big”)
V(“king”) - V(“queen”) ≈V(“uncle”) - V(“ant”)
這些都是語義空間的線性關係,可以做加減法,例如:
V(“hotter”) ≈V(“bigger”) - V(“big”) + V(“hot”)
1. 如何做詞嵌入
如圖所示,將一篇文章的詞輸入神經網路,而將兩個詞後面的詞作為結果進行訓練。這樣就會得到一個能夠預測後面將要出現的詞彙的神經網路。實際中可以用前一個或者前n個詞彙作為輸入,不一定是兩個,這裡只是舉例而已。當用前幾個單詞來訓練的時候,可以共享引數來加快訓練速度和簡化模型。如下圖所示
我們可以看到,神經網路中的Z1,Z2…..就是我們剛才提到的降維後的詞向量。
2. 最後
在實際應用中,除了用前面的單詞預測後面的單詞之外,還有其他的訓練和預測方法
用輸入單詞作為中心單詞去預測周邊單詞的方式
Continuous Bag of Words(CBOW)
用輸入單詞作為周邊單詞去預測中心單詞的方式
The Skip-Gram Model