詞嵌入|深度學習(李宏毅)(七)
一、概述
詞嵌入(Word Embedding)是將自然語言表示的單詞轉換為計算機能夠理解的向量或矩陣形式的技術。在Word Embedding之前,常用的方法有one-hot、n-gram、co-occurrence matrix,但是他們都有各自的缺點。Word Embedding是一種無監督的方法。
Word Embedding的主要任務是輸入收集到的詞彙,然後獲得它的向量表示,其大概過程如下:
Word Embedding不能使用AutoEncoder來做是因為無法為AutoEncoder的輸入找到一個包含可以學習的信息的表示。比如使用獨熱編碼作為AutoEncoder的輸入,由於獨熱編碼的每一維度之間是相互獨立的,且獨熱編碼包含的信息量極少,因此AutoEncoder學不到一些有用的信息。
Word Embedding主要通過訓練數據的上下文來學習文本的信息。Word Embedding假設不同的詞如果處在同樣的上下文位置的話,這兩個詞就會具有一定的相似性。
二、詞嵌入的方法
- Count based
Count based的方法的主要思想是認為如果兩個詞w_{i}與w_{j}頻繁地同時出現,則其詞向量V(w_{i})和V(w_{j})會比較接近。
這種方法的典型模型是GloVe模型,這裡不做重點介紹。
- Prediction based
- 使用的網絡結構
在多層神經網絡中輸入當前詞w_{i-1}的獨熱編碼向量並輸出每個維度表示w_{i}為每個詞的概率的向量,然後取第一個隱藏層的輸入作為詞的編碼向量,其過程如下圖所示:
將獲得的詞的編碼向量進行可視化以後可以看到類似的詞會出現在比較接近的地方:
- 為什麼第一個隱藏層的輸入可以作為詞的編碼
在下面的訓練文本中輸入兩個人名網絡會預測到相同的輸出「宣誓就職」,為了使得神經網絡輸出去同樣的結果,神經網絡就需要將兩個人名經過權重的處理映射到接近的詞向量,然後將這個詞向量作為神經網絡的輸入。
- 共享參數——使用多個詞預測下一個詞
在實際應用中使用一個詞來預測下一次個往往是比較困難的,一個詞後面可能出現的詞的可能結果有千千萬萬種,因此通常將多個詞同時作為網絡的輸入,通常需要輸入至少10個詞才會訓練出效果比較好的模型。
以輸入兩個詞為例,假設輸入的兩個詞向量為x_{i-2}和x_{i-1},其長度均為|V|,第一個隱藏層的輸入為z=W_{1}x_{i-2}+W_{2}x_{i-1},z的長度為|Z|,則兩個權重矩陣的形狀為|Z|\times|V|。
在實際過程中需要使得W_{1}和W_{2}相等,即W_{1}=W_{2}=W,則z=W(x_{i-2}+x_{i-1}),這就是共享參數。對於為什麼需要共享參數有以下兩點解釋:
①參數共享可以保證同樣的詞出現在不同位置時不會使得編碼的結果不同;
②表示詞的獨熱編碼往往維數很高,共享參數可以降低參數的數量。
輸入多個詞的網絡結構如下圖所示,其中相同顏色的權重表示共享的參數:
在訓練時為了保證參數共享,將採用下種方式進行參數更新:
以下為一個舉例,預測下一個詞時使用的是前兩個詞,然後將輸出與預測的詞的獨熱編碼的交叉熵作為損失函數,通過最小化損失來訓練模型:
- 其他變種
Continuous bag of word (CBOW) model
Skip-gram
- 可視化
從訓練得到的模型中獲得詞的編碼向量以後進行可視化可以看到一些規律,比如國家和首都之間有一定的聯繫:
動詞的三種時態之間有一定的規律:
一類動物的詞向量與某一特定品種的該類動物的詞向量的差,以及一類職業的詞向量與某一特定的該類職業的詞向量的差會落在各自的位置:
根據上述特性可以來回答類比的問題。比如我們知道V(Rome)−V(Italy)≈V(Berlin)−V(Germany),就可以回答以下問題:
使V(w)=V(Berlin)-V(Rome) +V(Italy),然後尋找與V(w)最接近的詞向量對應的詞,大概率會找到答案「Germany」。
三、一些其他應用
- 多語種的Embedding
如果分別訓練英文的材料和中文的材料,那麼分別得到的結果就不會有任何聯繫,比如「apple」和「蘋果」的詞向量之間就不會有聯繫。這是因為詞嵌入的方法只根據詞的上下文來建立詞的編碼,如果不將中文和英文的資料放到一起訓練就不會使相同意義的中英文詞彙的詞向量產生任何聯繫。但是如果我們在中英文分別訓練出的詞向量的基礎上繼續訓練一個模型,使得中英文相同意義的詞映射到同一個位置,就可以得到以下結果,這樣的模型可以用來進行類似翻譯這樣的工作:
- 對圖像的Embedding
首先可以對各種類別的詞進行詞嵌入獲得詞的編碼向量,然後可以訓練一個模型使得該模型的輸入是圖片,輸出一個和該圖片類別的詞向量同樣維度的向量並且使得輸出散落在類別的詞向量周圍。通過這樣一種方式就可能實現當這個模型輸入一張沒有訓練過的類別的圖片時可以將該圖片的編碼向量映射到正確的類別的詞向量周圍,從而解決傳統的分類方法只能夠識別訓練過的類別的圖片的局限性。下圖是上述過程的一個舉例,在這裡訓練了車輛、馬和狗的圖片,當貓的圖片輸入到模型中時可以將其映射到「cat」的詞向量周圍:
- 對詞序列的Embedding
詞序列可以指文檔或一段話,可以將不定長的詞向量映射到定長的編碼向量,這個編碼向量就代表了這個序列的語義,這種Embedding的方法可以解決Bag-of-word+AutuEncoder方法的局限性。Bag-of-word+AutuEncoder方法的過程如下圖所示:
Bag-of-word+AutuEncoder的局限性在於Bag-of-word忽略了詞序列中詞的順序所包含的信息。舉例來說下面兩句話雖然包含同樣的詞卻是完全不同的意思,一句是positive的,另一句是negative的:
參考資料
ref:自然語言處理(NLP)之Word Embedding
ref:GloVe模型