為什麼要做word embedding
該篇主要是討論為什麼要做word embedding:
gitbook閱讀:Word Embedding介紹
至於word embedding的詳細訓練方法在下一節描述。
目錄
- 單詞表達
- One hot representation
- Distributed representation
- Word embedding
- 目的
- 資料量角度
- 神經網路分析
- 訓練簡述
- 目的
單詞表達
先前在卷積神經網路的一節中,提到過圖片是如何在計算機中被表達的。 同樣的,單詞也需要用計算機可以理解的方式表達後,才可以進行接下來的操作。
One hot representation
程式中編碼單詞的一個方法是one hot encoding。
例項:有1000個詞彙量。排在第一個位置的代表英語中的冠詞"a",那麼這個"a"是用[1,0,0,0,0,...],只有第一個位置是1,其餘位置都是0的1000維度的向量表示,如下圖中的第一列所示。
也就是說,
在one hot representation編碼的每個單詞都是一個維度,彼此independent。
Distributed representation
然而每個單詞彼此無關這個特點明顯不符合我們的現實情況。我們知道大量的單詞都是有關。
語義:girl和woman雖然用在不同年齡上,但指的都是女性。
複數:word和words僅僅是複數和單數的差別。
時態:buy和bought表達的都是“買”,但發生的時間不同。
所以用one hot representation的編碼方式,上面的特性都沒有被考慮到。
我們更希望用諸如“語義”,“複數”,“時態”等維度去描述一個單詞。每一個維度不再是0或1,而是連續的實數,表示不同的程度。
目的
但是說到底,為什麼我們想要用Distributed representation的方式去表達一個單詞呢?
資料量角度
這需要再次記住我們的目的:
機器學習:從大量的個樣本中,尋找可以較好預測未見過 所對應 的函式 。
例項:在我們日常生活的學習中,大量的 就是歷年真題, 是題目,而 是對應的正確答案。高考時將會遇到的 往往是我們沒見過的題目,希望可以通過做題訓練出來的解題方法 來求解出正確的 。
如果可以見到所有的情況,那麼只需要記住所有的 所對應的 就可以完美預測。但正如高考無法見到所有型別的題一樣,我們無法見到所有的情況。這意味著,
機器學習需要從有限的例子中尋找到合理的 。
高考有兩個方向提高分數:
- 方向一:訓練更多的資料:題海戰術。
- 方向二:加入先驗知識:儘可能排除不必要的可能性。
問題的關鍵在於訓練所需要的資料量上。
同理,如果我們用One hot representation去學習,那麼每一個單詞我們都需要例項資料去訓練,即便我們知道"Cat"和"Kitty"很多情況下可以被理解成一個意思。
為什麼相同的東西卻需要分別用不同的資料進行學習?
神經網路分析
假設我們的詞彙只有4個,girl, woman, boy, man,下面就思考用兩種不同的表達方式會有什麼區別。
One hot representation
儘管我們知道他們彼此的關係,但是計算機並不知道。在神經網路的輸入層中,每個單詞都會被看作一個節點。 而我們知道訓練神經網路就是要學習每個連線線的權重。如果只看第一層的權重,下面的情況需要確定4*3個連線線的關係,因為每個維度都彼此獨立,girl的資料不會對其他單詞的訓練產生任何幫助,訓練所需要的資料量,基本就固定在那裡了。
Distributed representation
我們這裡手動的尋找這四個單詞之間的關係。可以用兩個節點去表示四個單詞。每個節點取不同值時的意義如下表。 那麼girl就可以被編碼成向量[0,1],man可以被編碼成[1,1](第一個維度是gender,第二個維度是age)。
那麼這時再來看神經網路需要學習的連線線的權重就縮小到了2*3。同時,當送入girl為輸入的訓練資料時,因為它是由兩個節點編碼的。那麼與girl共享相同連線的其他輸入例子也可以被訓練到(如可以幫助到與其共享female的woman,和child的boy的訓練)。
Word embedding也就是要達到第二個神經網路所表示的結果,降低訓練所需要的資料量。
Word embedding
而上面的四個單詞可以被拆成2個節點的是由我們人工提供的先驗知識,所以才能夠降低訓練所需要的資料量。 但是我們沒有辦法一直人工提供,機器學習的宗旨就是讓機器代替人力去發現pattern。
Word embedding就是要從資料中自動學習到Distributed representation。
訓練方法
問題來了,我們該如何自動尋找到類似上面的關係,將One hot representation轉變成Distributed representation。 我們事先並不明確目標是什麼,所以這是一個無監督學習任務。
無監督學習中常用思想是:當得到資料後,我們又不知道目標(輸出)時,
- 方向一:從各個輸入 { }之間的關係找目標。 如聚類。
- 方向二:並接上以目標輸出 作為新輸入的另一個任務 ,同時我們知道的對應 值。用資料 訓練得到 ,也就是 ,中間的表達 則是我們真正想要的目標。如生成對抗網路。
Word embedding更偏向於方向二。 同樣是學習一個 ,但訓練後並不使用 ,而是隻取前半部分的 。
到這裡,我們希望所尋找的 既有標籤 ,又可以讓 所轉換得到的 的表達具有Distributed representation中所演示的特點。
同時我們還知道,
單詞意思需要放在特定的上下文中去理解。
那麼具有相同上下文的單詞,往往是有聯絡的。
例項:那這兩個單詞都狗的品種名,而上下文的內容已經暗指了該單詞具有可愛,會舔人的特點。
- 這個可愛的 泰迪 舔了我的臉。
- 這個可愛的 金巴 舔了我的臉。
而從上面這個例子中我們就可以找到一個 :預測上下文。
用輸入單詞 作為中心單詞去預測其他單詞 出現在其周邊的可能性。
我們既知道對應的 ,同時該任務 又可以讓 所轉換得到的 的表達具有Distributed representation中所演示的特點。 因為我們讓相似的單詞(如泰迪和金巴)得到相同的輸出(上下文),那麼神經網路就會將泰迪的輸入和金巴的輸入經過神經網路 得到的泰迪的輸出和 金巴的輸出幾乎相同。
用輸入單詞作為中心單詞去預測周邊單詞的方式叫做:Word2Vec The Skip-Gram Model。
用輸入單詞作為周邊單詞去預測中心單詞的方式叫做:Continuous Bag of Words (CBOW)。
Embedding Layer其實就是lookup table,具有降維的作用。輸入到網路的向量常常是非常高的維度的one-hot vector,比如8000維,只有一個index是1,其餘位置都是0,非常稀疏的向量。Embedding後可以將其降到比如100維度的空間下進行運算。
同時還有額外的特點,比如:
詞向量“女人”與“男人”的距離 約定於 “阿姨”與“叔叔”距離。
W(‘‘woman")−W(‘‘man") ≃ W(‘‘aunt")−W(‘‘uncle")
W(‘‘woman")−W(‘‘man") ≃ W(‘‘queen")−W(‘‘king")
更多關於詞向量的內容參考http://colah.github.io/posts/2014-07-NLP-RNNs-Representations/