詞向量
NLP 處理文本,所以在進行處理之前,要先解決文本的表示。文本由詞組成,本文討論了表示詞彙的幾種方案。
WordNet
這種方法基於如下思想:用詞彙的意義來代表詞。所以我們可以建立若干個集合,每個集合代表一組同義詞,每個詞都可以映射到某個集合中,表示這個詞彙的意思。
其優點在於可以很好的處理詞彙之間的聯繫,即同義詞。但是缺點同樣明顯:
- 忽略了同義詞之間的差異,忽略了一詞多義性
- 難以迭代更新,忽略詞語的新含義
- 基於主觀判斷
- 需要專家進行手動構造
- 不能準確計算詞彙間的相關性
Discrete Symbols (one-hot code)
這種方法即對詞彙進行獨熱編碼,用一個數字來表示一個詞,但是這種方法中,任何兩個詞的編碼都是完全獨立的,也就是說這種方法無法表徵詞彙之間的相關性。自然語言中一個詞彙和其他詞彙的關係對詞語意義的解釋有着很大的影響,所以這種方法的侷限性也很大。
Word Vector
我們希望得到一種既簡單又能夠很好的表示詞彙間關係的編碼方式。所以我們可以將先前兩種方案的思想結合起來,得到詞向量的編碼方式。這種方法基於如下假設:一個詞彙的含義可以由經常在其邊上出現的詞彙決定。
思想
基於這種編碼方式,我們有Word2Vec框架的核心思想如下:
- 有一個巨大的語料庫
- 每個詞語都被一個定長的向量表示
- 對語料庫中每個詞,稱其爲中心詞(center) ,其周圍定長距離內的詞稱爲上下文(outside)
- 使用詞向量來表示
- 迭代每個詞對應的向量來優化系統
如圖所示,我們可以做出如下陳述,into的詞義由problems,turning,banking,crises等其附近的詞給出。類似地,隨着中心詞後移,可以產生多組這種關係。
定義式
接下來給出這種概念的定量描述:
定義整個詞彙空間爲 表示所有詞彙的集合,其中第 個詞爲 ;向量空間爲 表示所有詞彙對應的詞向量構成的集合。定義 爲語料庫,其中第 個詞爲 。 我們定義相似度 爲詞向量集 在語料庫 上的擬合程度。我們可以認爲 是一個常量,所以只考慮參數 ,相似度有計算式如下:
爲了標準化,可以加入平均值;而log幾乎對所有連乘的目標函數都實用,所以可以得到目標函數:
我們希望最大化詞向量集對這個語料庫的擬合程度,所以可以得到優化目標:
如此便可得到詞向量的計算方式。
從語料庫到詞向量
事實上,我們可以這樣解釋這個過程,我們考慮詞彙空間爲一個離散點集,從每個點出發向其他點連一條有向邊,對於點 指向點 的邊,我們記爲 ,有邊權 。這個概率表示從某個點轉移到其他點的概率分佈,且滿足 ,類似一個馬爾可夫過程。 在上面的計算式中,我們不停累計 ,也就是計算出每條邊出現的次數。現在我們要設置邊權,來使得上式最大化,事實上是希望擬合這樣一個分佈,使得出現次數多的儘量大,在這個情形下,只要將其出現次數最多的後繼邊權置爲1即可,這樣可以得到類似於 WordNet 的一種分類結果。
到目前爲止,似乎都沒有詞向量什麼事,因爲只要設置邊權即可。但是需要注意的是,事實上這些邊權按照順序排序即可得到一個長度等長於向量空間的詞向量,且天然具有歸一化的性質。
特別地說,如果我們對相似性的要求更加嚴格一些,比如規定爲其後特定位置出現的同樣的詞語,那麼我們可以在這個基礎上構建更多的邊,如下一個詞邊,下兩個詞邊,上一個詞邊等等,對應的詞向量也會加長。如果要將一些邊合併,可以將其加權合到同一條邊中。諸如此類。更一般地說,我們可以通過修改對圖上邊的定義來取得對相似性不同的定義。
這種方法可以在某種程度上刻畫詞語的相似性,比如 之後經常出現 , 之後也經常出現 ,則在與 相連的這個向量上,他們的值可能都是1,從而將相似性存儲在編碼中。但是在上述情形下,這種分類過於嚴格,則出現次數次高的詞或者幾種相仿的結果可能被丟掉。
而且但是這樣的話,存儲這些詞向量將需要 的空間, 經常能達到百萬數量級甚至更大,因此,考慮將信息壓縮,也就是說,我們給每個詞一個向量,從而隱式的存儲 的值。假設給每個詞分配長度爲 的向量,則其中一個全局最優解即上面所述的概率模型。但事實上可以分配遠小的多的長度,如100,則複雜度降低爲 ,因爲一個詞作爲中心詞和邊緣詞不同,一種解決方案是將其拆開,用 表示中心詞, 表示上下文。可以用下式來代替 :
即一個softmax函數,其有如下優勢:
- 保序性,原概率分佈順序不變
- 歸一性,可以隱式的計算出
- 結果是soft的,不至於丟失過多非max的信息
結果
可以梯度下降法等優化方法求解,對於某個o,可以使用鏈式法則暴力展開求偏導如下:
這個偏導恰好表示表示o本身的向量,和從c轉移一次後的期望向量之差。做梯度下降實質上在降低這個差。
而對於J的偏導數,因爲結果上由log,所以直接對所有的o的 求和即可。