文本表示就是將文本轉化成數學上的向量表示,怎麼把字符串轉化爲向量,就是文本表示的核心問題。
一、離散表示
1、詞袋模型(Bag of Words)
詞袋模型就是將字符串看成一個裝滿詞的袋子,詞是在袋子裏隨機放着的。
假設語料庫爲:
John likes to watch movies. Mary likes too.
John also likes to watch football games.
詞典(袋子)就是:{"John": 1, "likes": 2, "to": 3, "watch": 4, "movies": 5, "also":6, "football": 7, "games": 8, "Mary": 9, "too": 10}
John likes to watch movies. Mary likes too. 就可以表示爲: [1, 2, 1, 1, 1, 0, 0, 0, 1, 1]。
John also likes to watch football games. 就可以表示爲: [1, 1, 1, 1, 0, 1, 1, 1, 0, 0]。
詞袋模型的優點:
(1)、簡單、方便、快捷。
(2)、在語料充足的條件下,對簡單的自然語言處理任務效果不錯,例如文本分類。
詞袋模型的缺點:
(1)、其準確率往往比較低。凡是出現在文本中的詞一視同仁,不能體現不同詞在一句話中的不同的重要性。
(2)、無法關注詞語之間的順序,如“武松打老虎”跟“老虎打武松”在詞袋子模型中是認爲一樣的。
2、TF-IDF(Term Frequency - Inverse Document Frequency)
在文本表示中不僅考慮詞,還考慮出現詞的重要程度,就用到TF-IDF。
每個詞的IDF權重計算公式爲:
其中爲文檔總數,爲包含該詞的文檔總數。那麼:
3、One-hot
One-hot用來對詞向量編碼,假設我們的詞庫總共有個詞,那麼我們就可以用一個的向量表示每一詞,每個詞所在位置的索引位置爲1,其餘位置的元素都爲0。
John: [1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
likes: [0, 1, 0, 0, 0, 0, 0, 0, 0, 0]
...
too : [0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
4、Bi-gram和N-gram
爲2-gram建立索引:
"John likes”: 1,
"likes to”: 2,
"to watch”: 3,
"watch movies”: 4,
"Mary likes”: 5,
"likes too”: 6,
"John also”: 7,
"also likes”: 8,
“watch football”: 9,
"football games": 10,
John likes to watch movies. Mary likes too. 就可以表示爲: [1, 1, 1, 1, 1, 1, 0, 0, 0, 0]
John also likes to watch football games. 就可以表示爲: [0, 1, 1, 0, 0, 0, 1, 1, 1, 1]
優點:考慮了詞的順序
缺點:隨着N的增大,詞表膨脹
5、基於共現矩陣的列向量
自然語言處理的矩陣表示有:(1)詞-文檔矩陣;(2)基於窗口的共現矩陣
I like deep learning.
I like NLP.
I enjoy flying.
給出基於窗口的共現矩陣:
缺點:
(1)、向量隨着字典(文檔)大小呈線性增長
(2)、消耗空間較大
(3)、稀疏問題
二、分佈式表示
1、基於矩陣降維的方法
一般對詞-文檔矩陣,或者共現矩陣進行PCA或者SVD進行降維。將原來 m×n 的矩陣降爲 m×r的矩陣,其中 r<n,即將詞向量的長度進行縮減。下面爲奇異值分解的步驟:
擴展:
基於聚類的分佈表示又稱作分佈聚類(distributional clustering),這類方法通過聚類手段構建詞與其上下文之間的關係。其中最經典的方法是布朗聚類(Brown clustering)。布朗聚類是一種層級聚類方法,聚類結果爲每個詞的多層類別體系。因此可以根據兩個詞的公共類別判斷這兩個詞的語義相似度。不常用,讀者可自行研究。
2、基於神經網絡
(1)、NNLM (Neural Network Language model)
2003年提出了A Neural Probabilistic Language Model,其用前n-1個詞預測第n個詞的概率,並用神經網絡搭建模型。目標函數爲:
使用非對稱的前向窗口,長度爲,滑動窗口遍歷整個語料庫求和,使得目標概率最大化,其計算量正比於語料庫大小。同時,預測所有詞的概率總和應爲1。
網絡結構爲:
樣本的一組輸入是第n個詞的前n-1個詞的one-hot表示,目標是預測第n個詞,輸出層的大小是語料庫中所有詞的數量,然後sotfmax迴歸,使用反向傳播不斷修正神經網絡的權重來最大化第n個詞的概率。當神經網絡學得到權重能夠很好地預測第n個詞的時候,輸入層到映射層,即 這層,其中的權重Matrix C 被稱爲投影矩陣,輸入層各個詞的ont-hot表示法只在其對應的索引位置爲1,其他全爲0,在與Matrix C 矩陣相乘時相當於在對應列取出列向量投影到映射層。
此時的向量就是原詞的分佈式表示,其是稠密向量而非原來one-hot的稀疏向量了。
在後面的隱藏層將這n-1個稠密的詞向量進行拼接,如果每個詞向量的維度爲D,則隱藏層的神經元個數爲 (n-1)×D,然後接一個所有待預測詞數量的全連接層,最後用softmax進行預測。
擴展(我沒做詳細的推導,在這裏不做介紹,有興趣的同學可以自行研究):
(a)2007 年,Mnih和Hinton在神經網絡語言模型(NNLM)的基礎上提出了log雙線性語言模型(Log-Bilinear Language Model,LBL);
(b)循環神經網絡語言模型(RNNLM),該模型就是把NNLM隱層變成RNN,每一個隱層包含此前所有上文信息,RNNLM裏面最厲害的就屬ELMO,順着這個路線,大家可以繼續研究GPT和BERT。
(2)、Word2vec
(a)CBOW(連續詞袋模型)
CBOW是以{"The", "cat", ’over", "the’, "puddle"}爲上下文,來夠預測或產生它們中心的詞語"jumped"。原理圖爲:
損失函數爲:
與NNLM相比:
(a)取消了隱藏層,減少了計算量
(b)採用上下文劃窗而不只是前文劃窗,即用上下文的詞來預測當前詞
(c)投影層不再使用各向量拼接的方式,而是簡單的求和平均
(b)、Skip-gram
Skip-gram是以中心的詞語"jumped"爲輸入,能夠預測或產生它周圍的詞語"The", "cat", ’over", "the”, "puddle"等。原理圖爲:
損失函數爲:
從上面兩個損失函數可以看出,在計算概率時的softmax操作,需要計算隱藏層和輸出層所有V中單詞之間的概率,這是一個非常耗時的操作,因此,爲了優化模型的訓練,minkov文中提到Hierarchical softmax 和 Negative sampling 兩種方法對上述模型進行訓練。在這裏對這兩種方法就不做介紹了,有興趣的同學可以看相關論文。