NLP《詞彙表示方法(二)詞嵌入表示》

用one-hot向量的方式表示詞彙無法得到詞語之間的相似性和聯繫性,這個不符合我們的語言習慣,我們很多詞語都是有聯繫的。

比如:語義上,「橘子」和「蘋果」,都是水果。「你」和「你們」只是複數的區別。「go」和「went」是時態的差異。但是都是具有某種相似性的。然鵝,one-hot向量一開始就把各個代詞看成了各個類別,之間毫無關聯性。除此之外,且維度很高,數據十分稀疏,不利於計算和存儲。
因此我們需要一個更加合理的詞彙表示方式。

一:Word Embedding
詞嵌入最粗淺的理解,每個詞被映射到低維連續向量,如下所示:
爺爺: (-0.065, -0.035, 0.019, -0.026, 0.085,…)
奶奶: (-0.019, -0.076, 0.044, 0.021,0.095,…)
珠江: (0.027, 0.013, 0.006, -0.023, 0.014, …)
這個低維度的空間有這樣的特徵,相似的詞映射到相似方向 – 語義相似性被編碼了,Cosine相似度衡量方向,相類似的詞彙被映射到一個相近的向量位置。這樣一來,我們不再使用稀疏且獨立的one-hot向量了,而是換成了一個低維度稠密的,且可以表徵詞彙相似度的一個向量來表徵一個詞彙。
在這裏插入圖片描述

如上圖所示,具有相似性質的詞彙可以映射到相似位置的向量位置上,這樣能表示出詞彙之間的相似性,這就很符合語言習慣了,有利於後續的一些應用,打好基礎,這個是很有用的,尤其是在語言詞彙上下文中,相似的上下文是希望得到相似的預測結果的。

比如句子預測(語言模型):
句子A:I want one cup of orange juice.
句子B:I want one cup of apple ?.

怎麼猜出這個橫線的詞語是啥?我們能看到上下文的句子是很類似的,如果我們能根據某個語言模型得出,「orange」和「apple」是很類似的向量,那麼就可以通過學習第一句話,就能預測出第二句話的內容也是「juice」,因爲是很相似的一句話。這個有些類似於小時候小學語文中學習的造詞造句,通過類比和相似度進行學習。

再比如NER(命名實體識別)問題:
已知句子A:Tom is an orange farmer. –》Tom是一個人名實體
已知句子B:Mike is an apple farmer. –》Mike是一個人名實體
預測句子C:Robert is a pear cultivator. –》?是一個人名實體
我們能看出來句子的結構很相似,如果我們使用嵌入空間的向量來表示單詞,我們會發現,「orange」和「apple」和「pear」是很相近的詞語,「farmer」和「cultivator」是相似的詞語,那麼通過學習前倆句子的標記,我們也就能順利成章的理解出待預測句子的命名實體了。

如上兩個例子就是嵌入空間,詞彙相似度帶來的好處。

另一方面,假如,我們有詞彙10000個,如果使用one-hot向量,這個向量就是10000維度的,整個詞彙表就是10000X10000的矩陣V。現在我們想將他們映射到一個低維度稠密的空間,假如每個向量是300維度的,那麼嵌入空間的詞彙表的大小就是300X10000的矩陣E,大大減少了存儲空間。也減少了計算量。這個300的空間維度是自定義的,你想多少就多少,一般是取100~500 之間比較常見了,達到了降維的效果(之前學習的人臉檢測中,也是把一個高維度的人臉圖像經過一個CNN映射到一個128維度的向量,用這個向量來表示人臉的距離相似度,吶,跟這個是很類似的概念了,都是把高維稀疏且獨立的數據映射到低維稠密且具有相似度的空間上)。

從另一個角度來看,在V空間內,每一個原始的one-hot向量v_i都表示一個詞彙,在E的低維度嵌入空間,每個e_i也表示同樣一個詞彙,怎麼對應起來呢?由於我們定義他們的詞彙的下標i是一樣的。就是簡單地根據下標look up詞彙表的操作了。如果換成數學計算就是。
e_i = E * v_i。
通過上述式子就能簡單的從one-hot向量轉換到低維空間的表示向量。

詞嵌入的好處是,不僅達到了降維的效果,還能表示詞語之間的相似程度,因爲予以相近的詞彙在嵌入向量空間中更加距離接近(歐式距離或者是餘弦距離)。

最後問題來了,怎麼得到這個空間呢?注意到我們上述的數學計算公式了吧,輸入可以是one-hot向量,參數矩陣是E,誒?參數?說到這裏是不是有點眉目了,初始化參數,學習參數,梯度下降這些概念是不是就出來了。

我們給一下思路啊,我們得先定義一個語言模型,就是預測句子人話的概率,輸入數據就是整個嵌入空間的向量,還要給定上下文,將輸入的數據(嵌入空間的向量作爲參數)進行模型學習,輸出就是應該預測到的那個詞語,通過這樣的監督學習,最大化這個預測模型,求出參數。下面我們將學習神經網絡模型,word2vec模型來學習如何得到這個詞向量。具體做法且看後面的學習。