1概述
文本表示( text representation)是NLP任務中非常基礎,同時也非常重要的一部分。目前常用的文本表示方式分為:
- 離散式表示(Discrete Representation);
- 分散式表示(Distributed Representation);
本文旨在介紹這兩類常用的文本表示方式。
2離散式表示(Discrete Representation)
2.1 One-Hot
One-Hot 編碼又稱為「獨熱編碼」或「啞編碼」,是最傳統、最基礎的詞(或字)特徵表示方法。這種編碼將詞(或字)表示成一個向量,該向量的維度是詞典(或字典)的長度(該詞典是通過語料庫生成的),該向量中,當前詞的位置的值為1,其餘的位置為0。
文本使用one-hot 編碼步驟:
- 根據語料庫創建 詞典(vocabulary),並創建詞和索引的 映射(stoi,itos);
- 將句子轉換為用索引表示;
- 創建OneHot 編碼器;
- 使用OneHot 編碼器對句子進行編碼;
ne-Hot 編碼的特點如下:
- 詞向量長度是詞典長度;
- 在向量中,該單詞的索引位置的值為 1 ,其餘的值都是 0 ;
- 使用One-Hot 進行編碼的文本,得到的矩陣是稀疏矩陣(sparse matrix);
缺點:
- 不同詞的向量表示互相正交,無法衡量不同詞之間的關係;
- 該編碼只能反映某個詞是否在句中出現,無法衡量不同詞的重要程度;
- 使用One-Hot 對文本進行編碼後得到的是高維稀疏矩陣,會浪費計算和存儲資源;
2.2 詞袋模型(Bag Of Word,BOW)
例句:
- Jane wants to go to Shenzhen.
- Bob wants to go to Shanghai.
在詞袋模型中不考慮語序和詞法的信息,每個單詞都是相互獨立的,將詞語放入一個「袋子」里,統計每個單詞出現的頻率。
詞袋模型編碼特點:
- 詞袋模型是對文本(而不是字或詞)進行編碼;
- 編碼後的向量長度是詞典的長度;
- 該編碼忽略詞出現的次序;
- 在向量中,該單詞的索引位置的值為單詞在文本中出現的次數;如果索引位置的單詞沒有在文本中出現,則該值為 0 ;
缺點
- 該編碼忽略詞的位置信息,位置信息在文本中是一個很重要信息,詞的位置不一樣語義會有很大的差別(如 「貓愛吃老鼠」 和 「老鼠愛吃貓」 的編碼一樣);
- 該編碼方式雖然統計了詞在文本中出現的次數,但僅僅通過「出現次數」這個屬性無法區分常用詞(如:「我」、「是」、「的」等)和關鍵詞(如:「自然語言處理」、「NLP 」等)在文本中的重要程度;
2.3 TF-IDF(詞頻-逆文檔頻率)
為了解決詞袋模型無法區分常用詞(如:「是」、「的」等)和專有名詞(如:「自然語言處理」、「NLP 」等)對文本的重要性的問題,TF-IDF 演算法應運而生。
TF-IDF 全稱是:term frequency–inverse document frequency 又稱 詞頻-逆文本頻率。其中:
- TF (Term Frequency ):某個詞在當前文本中出現的頻率,頻率高的詞語或者是重要的詞(如:「自然語言處理」)或者是常用詞(如:「我」、「是」、「的」等);
- IDF (Inverse Document frequency ):逆文本頻率。文本頻率是指:含有某個詞的文本在整個語料庫中所佔的比例。逆文本頻率是文本頻率的倒數;
公式
優點
- 實現簡單,演算法容易理解且解釋性較強;
- 從IDF 的計算方法可以看出常用詞(如:「我」、「是」、「的」等)在語料庫中的很多文章都會出現,故IDF的值會很小;而關鍵詞(如:「自然語言處理」、「NLP 」等)只會在某領域的文章出現,IDF 的值會比較大;故:TF-IDF 在保留文章的重要詞的同時可以過濾掉一些常見的、無關緊要的詞;
缺點
- 不能反映詞的位置信息,在對關鍵詞進行提取時,詞的位置信息(如:標題、句首、句尾的詞應該賦予更高的權重);
- IDF 是一種試圖抑制雜訊的加權,本身傾向於文本中頻率比較小的詞,這使得IDF 的精度不高;
- TF-IDF 嚴重依賴於語料庫(尤其在訓練同類語料庫時,往往會掩蓋一些同類型的關鍵詞;如:在進行TF-IDF 訓練時,語料庫中的 娛樂 新聞較多,則與 娛樂 相關的關鍵詞的權重就會偏低 ),因此需要選取質量高的語料庫進行訓練;
3分散式表示(Distributed Representation
理論基礎:
- 1954年,Harris提出分散式假說(distributional hypothesis)奠定了這種方法的理論基礎:A word』s meaning is given by the words that frequently appear close-by(上下文相似的詞,其語義也相似);
- 1957年,Firth對分散式假說做出進一步的闡述和明確:A word is characterized by the company it keeps(詞的語義由其上下文決定);
3.1 n-gram
n-gram 是一種 語言模型(Language Model, LM)。語言模型是一種基於概率的判別式模型,該模型的輸入是一句話(單詞的序列),輸出的是這句話的概率,也就是這些單詞的聯合概率(joint probability)。(備註:語言模型就是判斷一句話是不是正常人說的。)
3.2 共現矩陣(Co-Occurrence Matrix)
首先指定窗口大小,然後統計窗口(和對稱窗口)內詞語共同出現的次數作為詞的向量(vector)。
語料庫:
- I like deep learning.
- I like NLP.
- I enjoy flying.
備註: 指定窗口大小為1(即:左右的 window_length=1,相當於 bi-gram)統計數據如下:(I, like),(Iike, deep),(deep, learning),(learning, .),(I, like),(like, NLP),(NLP, .),(I, enjoy),(enjoy, flying), (flying, .)。則語料庫的共現矩陣如下表所示:
從以上的共現矩陣可以看出,單詞 like 和 enjoy 都在單詞 I 附件出現且統計數目大概相等,則它們在 語義 和 語法 上的含義大概相同。
優點
- 考慮了句子中詞的順序;
缺點
- 詞表的長度很大,導致詞的向量長度也很大;
- 共現矩陣也是稀疏矩陣(可以使用 SVD、PCA 等演算法進行降維,但是計算量很大);
3.3 Word2Vec
word2vec 模型是Google團隊在2013年發布的 word representation 方法。該方法一出讓 預訓練詞向量 的使用在NLP 領域遍地開花。
模型
word2vec有兩種模型:CBOW 和 SKIP-GRAM;
- CBOW:利用上下文的詞預測中心詞;
- SKIP-GRAM:利用中心詞預測上下文的詞;
優點
- 考慮到詞語的上下文,學習到了語義和語法的信息;
- 得到的詞向量維度小,節省存儲和計算資源;
- 通用性強,可以應用到各種NLP 任務中;
缺點
- 詞和向量是一對一的關係,無法解決多義詞的問題;
- word2vec是一種靜態的模型,雖然通用性強,但無法真的特定的任務做動態優化;
3.4 GloVe
GloVe 是斯坦福大學Jeffrey、Richard 等提供的一種詞向量表示演算法,GloVe 的全稱是Global Vectors for Word Representation,是一個基於全局詞頻統計(count-based & overall staticstics)的詞表徵(word representation)演算法。該演算法綜合了global matrix factorization(全局矩陣分解) 和 local context window(局部上下文窗口) 兩種方法的優點。
備註:Glove模型的推導公式比較複雜,在這裡不做詳細推導,具體可以查看官網(https://nlp.stanford.edu/projects/glove/)。
效果
優點
- 考慮到詞語的上下文、和全局語料庫的信息,學習到了語義和語法的信息;
- 得到的詞向量維度小,節省存儲和計算資源;
- 通用性強,可以應用到各種NLP 任務中;
缺點
- 詞和向量是一對一的關係,無法解決多義詞的問題;
- glove也是一種靜態的模型,雖然通用性強,但無法真的特定的任務做動態優化;
3.5 ELMO
word2vec 和 glove 演算法得到的詞向量都是靜態詞向量(靜態詞向量會把多義詞的語義進行融合,訓練結束之後不會根據上下文進行改變),靜態詞向量無法解決多義詞的問題(如:「我今天買了7斤蘋果」 和 「我今天買了蘋果7」 中的 蘋果 就是一個多義詞)。而ELMO模型進行訓練的詞向量可以解決多義詞的問題。
ELMO 的全稱是「 Embedding from Language Models 」,這個名字不能很好的反映出該模型的特點,提出ELMO 的論文題目可以更準確的表達出該演算法的特點「 Deep contextualized word representation 」。
該演算法的精髓是:用語言模型訓練神經網路,在使用word embedding 時,單詞已經具備上下文信息,這個時候神經網路可以根據上下文信息對word embedding 進行調整,這樣經過調整之後的word embedding 更能表達在這個上下文中的具體含義,這就解決了靜態詞向量無法表示多義詞的問題。
網路模型
過程
- 上圖中的結構使用字元級卷積神經網路(convolutional neural network, CNN)來將文本中的詞轉換成原始詞向量(raw word vector) ;
- 將原始詞向量輸入雙向語言模型中第一層 ;
- 前向迭代中包含了該詞以及該詞之前的一些辭彙或語境的信息(即上文);
- 後向迭代中包含了該詞以及該詞之後的一些辭彙或語境的信息(即下文) ;
- 這兩種迭代的信息組成了中間詞向量(intermediate word vector);
- 中間詞向量被輸入到模型的下一層 ;
- 最終向量就是原始詞向量和兩個中間詞向量的加權和;
效果
如上圖所示:
- 使用glove訓練的詞向量中,與 play 相近的詞大多與體育相關,這是因為語料中與play相關的語料多時體育領域的有關;
- 在使用elmo訓練的詞向量中,當 play 取 演出 的意思時,與其相近的也是 演出 相近的句子;
4結語
- 現在深度學習在NLP 領域中使用的大多是分散式詞向量;
- 分散式詞向量的理論基礎是語言模型;
- 在進行詞向量選擇時,要考慮到具體任務的特性,word2vec、glove、elmo訓練的詞向量各有優缺點,並沒有哪一種比另兩種效果好很多。
本文轉自公眾號 AI 研習社,原文地址
1 Comment
啞變數不是One-Hot吧。。。。