在瞭解什麼是嵌入(embeddings)之前,我們需要先搞清楚一個詞語在NLP中是如何被表示的
注:本次不涉及任何具體演算法,只是單純對概念的理解
詞彙表徵
One-Hot
詞彙的表示方法有很多,最有名的肯定是獨熱編碼(One-Hot )了。因為不是重點,所以下面只簡單介紹一下
廢話不多說,上圖!
假設我們有10000個詞,Man位於第5391個,Woman位於9853,如果想要唯一表示這些詞怎麼辦?
我們可以根據詞的總量建立一個n行一列的矩陣,在某個詞出現的地方標註為1,其餘都用0填充,這樣就可以唯一表示某個詞了(如上圖中的Man),這就是One-Hot編碼的基本原理
為什麼它常常被提到?可能因為比較好理解吧
但One-Hot其實有很多問題的,例如:
- 資料量大了就炸了
- 詞與詞之間沒有關聯性
關於第二個缺點這裡單獨說明一下
設想你已經有一個訓練好的語言模型,可以預測句子下一個詞是什麼,如:
我想喝可口()#模型會判斷出完整句子為“我想喝可口可樂”
但是換一下
我想喝百事()#這時候你的模型可能不知道“百事”與“可口”之間的聯絡,自然它不會輸出“我想喝百事可樂”的結果
這種情況我們稱為泛化性差。
那麼想要提高泛化性,我們勢必要獲得詞語之間的關係
一種自然的思路就是增加維度
高維詞語表徵
這裡為什麼不說一種具體的方法呢?因為我還是想從舉例入手,避免一步太大扯著蛋
廢話不多說,還是上圖
我們還是沿用之前的例子,只是這裡我們加入了Apple和CS兩個新詞
這次試試用特徵化的表示方法來表示這些詞,因此,我們的學習物件從詞的唯一表示變成了詞的特徵
例如,我們想知道這些詞語與性別(gender)這個特徵之間的關係
因為Man和Woman本質上就是性別的指代,這兩個詞應該最接近性別(gender)特徵,所以我們假設男人的性別值是-1,女人的是1。
King和男人是非常相關的則可設為-0.95,Queen則與女人非常相關,可設為0.97,Apple和CS則與性別沒什麼關係,這顯然是符合我們認知的。
注意:這裡的數字只是為了說明相關性,不是由某種計算得出的(暫時不是),你也可以把King設成-0.91
圖中其餘特徵表示原理類似
又如遊戲(Game)與CS這個詞相關性大,因此CS的數值為0.98,而其餘的就很低,表明他們與遊戲這個特徵沒什麼關係
那麼好了,現在我們把特徵擴充套件到500個
也就是說,我們有了500個維度去衡量一個詞語
此時右邊出現了一些由數值構成的奇怪陣列(你在看glove之類的模型時經常會看見這種東西)
現在,我們還是用一個矩陣表示一個詞,這個矩陣的大小為500行1列,由某個詞的特徵構成從而具有唯一性
由此,Man就可以表示為e_5391,同理可以表示其他詞彙
因此,高維表示會比One-Hot有更好的泛化能力。
這種用300維的特徵去表示一個詞語的方法就稱為嵌入(embeddings),至於為什麼叫嵌入,我猜可能與高維影像的表示有關,類似於一種巢狀。