在了解什么是嵌入(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維的特征去表示一個詞語的方法就稱為詞嵌入(word embeddings),至於為什么叫嵌入,我猜可能與高維圖像的表示有關,類似於一種嵌套。