詞轉化為詞向量

  • 2019 年 10 月 4 日
  • 筆記

前言

2013年末,Google發布了word2vec工具,引起了熱捧,大家幾乎都認為它是深度學習在NLP的一項了不起的應用,並且很多互聯網公司也開始跟進,使用word2vec解決實際問題。

NLP的相關任務中,要將我們能看懂的語言交給電腦來處理,通常需要首先將語言數學化,只有這樣機器才能認得出,而詞向量正是將我們看懂的詞進行數學化的一種方法,就是把一個詞語表示成一個向量。

一般將詞語轉化為向量的方法有兩種:

One-Hot Representation

Distributed Representation

下面分別介紹這兩種方法

1 One-Hot Representation

這種方法很暴力,直接將詞典的長度標記為向量的長度,每個詞向量的分量只有一個為1,其餘全為0,1的位置對應該詞在詞典的位置,比如:

adore 表示為 [0,0,0,1,…,0,0]

respect表示為 [0,0,0,…,0,1,0,..0,0]

這種表示方法的優點是簡潔清晰,用哈希表給每個詞分配一個編號就可以了,比如 adore編號為102,respect編號為34214,然後配合上最大熵,SVM等演算法可以完成NLP的一些任務,但是它的缺點也很明顯:

1). 維數災難,這種方法容易受到這方面的困擾,尤其是用DL的一些演算法時;

2.) 不能很好地刻畫詞語與詞語間的相似性,稱為「辭彙鴻溝」,因為從adore和respect的詞向量,編號上,我們看不出它們之間是否存在某種關係,比如為同義詞,反義詞等,儘管adore和respect是一對同義詞

2 Distributed Representation

這種表示是Hinton,在1986年提出的,它解決了One-Hot Representation的問題,其基本思想就是直接用一個普通的向量表示一個詞,維度一般不長,比如50維,這個向量怎麼表示是要經過訓練的,訓練方法較多,Google開發的word2vec便是其中一個,比如向量長這樣 [0.452, 0.256, 0.912,…],當然訓練的預料庫不一樣,或者方法不一樣,最終得到了某個詞的向量長的也不一樣。

顯然,這種方法獲得了 adore 和 respect 兩個詞的詞向量,這樣他倆組成了一個詞向量空間,而每一個向量則為該空間中的一個點,即向量的終端點,那麼adore和repect這兩個點的距離,我們就可以拿來分析了,如果它們很近,就可證明 adore和respect的語法,語義之間的相似性,這樣的特性使得詞向量很有意義,因此google的Mikolov等人研究出了word2vec。也就是說距離近的詞,相似性可能越高。

利用這個特性,可以用於機器翻譯領域,通過向量空間,把一種語言轉變成另一種語言,舉個別人的例子,將英語中的one, two, …, five自動轉化為西班牙語,怎麼做呢,首先得到這5個詞的詞向量,如下圖所示:

詞向量

然後,訓練另一套即西班牙語表示的語料庫,得到了每個詞的詞向量,找到與英語one最相近的西班牙單詞為:uno,所以one對應西班牙語的uno,依次利用這種距離相近的方法找出其他的詞的對應。

英語轉西班牙語