1概述

文本表示( text representation)是NLP任務中非常基礎,同時也非常重要的一部分。目前常用的文本表示方式分為:

  1. 離散式表示(Discrete Representation);
  2. 分布式表示(Distributed Representation);

本文旨在介紹這兩類常用的文本表示方式。

2離散式表示(Discrete Representation

  2.1 One-Hot

One-Hot 編碼又稱為“獨熱編碼”或“啞編碼”,是最傳統、最基礎的詞(或字)特徵表示方法。這種編碼將詞(或字)表示成一個向量,該向量的維度是詞典(或字典)的長度(該詞典是通過語料庫生成的),該向量中,當前詞的位置的值為1,其餘的位置為0。

文本使用one-hot 編碼步驟:

  1. 根據語料庫創建 詞典(vocabulary),並創建詞和索引的 映射(stoi,itos);
  2. 將句子轉換為用索引表示;
  3. 創建OneHot 編碼器;
  4. 使用OneHot 編碼器對句子進行編碼;

ne-Hot 編碼的特點如下:

  1. 詞向量長度是詞典長度;
  2. 在向量中,該單詞的索引位置的值為  1 ,其餘的值都是  0 ;
  3. 使用One-Hot 進行編碼的文本,得到的矩陣是稀疏矩陣(sparse matrix

缺點:

  1. 不同詞的向量表示互相正交,無法衡量不同詞之間的關係;
  2. 該編碼只能反映某個詞是否在句中出現,無法衡量不同詞的重要程度;
  3. 使用One-Hot 對文本進行編碼後得到的是高維稀疏矩陣,會浪費計算和存儲資源;

2.2 詞袋模型(Bag Of Word,BOW)

例句:

  1. Jane wants to go to Shenzhen.
  2. Bob wants to go to Shanghai.

在詞袋模型中不考慮語序和詞法的信息,每個單詞都是相互獨立的,將詞語放入一個“袋子”里,統計每個單詞出現的頻率。

詞袋模型編碼特點:

  1. 詞袋模型是對文本(而不是字或詞)進行編碼;
  2. 編碼後的向量長度是詞典的長度;
  3. 該編碼忽略詞出現的次序;
  4. 在向量中,該單詞的索引位置的值為單詞在文本中出現的次數;如果索引位置的單詞沒有在文本中出現,則該值為  0 ;

缺點

  1. 該編碼忽略詞的位置信息,位置信息在文本中是一個很重要信息,詞的位置不一樣語義會有很大的差別(如 “貓愛吃老鼠” 和 “老鼠愛吃貓” 的編碼一樣);
  2. 該編碼方式雖然統計了詞在文本中出現的次數,但僅僅通過“出現次數”這個屬性無法區分常用詞(如:“我”、“是”、“的”等)和關鍵詞(如:“自然語言處理”、“NLP ”等)在文本中的重要程度;

2.3 TF-IDF(詞頻-逆文檔頻率)

為了解決詞袋模型無法區分常用詞(如:“是”、“的”等)和專有名詞(如:“自然語言處理”、“NLP ”等)對文本的重要性的問題,TF-IDF 算法應運而生。

TF-IDF 全稱是:term frequency–inverse document frequency 又稱 詞頻-逆文本頻率。其中:

  1. TF Term Frequency :某個詞在當前文本中出現的頻率,頻率高的詞語或者是重要的詞(如:“自然語言處理”)或者是常用詞(如:“我”、“是”、“的”等);
  2. IDF Inverse Document frequency :逆文本頻率。文本頻率是指:含有某個詞的文本在整個語料庫中所佔的比例。逆文本頻率是文本頻率的倒數;

公式

優點

  1. 實現簡單,算法容易理解且解釋性較強;
  2. IDF 的計算方法可以看出常用詞(如:“我”、“是”、“的”等)在語料庫中的很多文章都會出現,故IDF的值會很小;而關鍵詞(如:“自然語言處理”、“NLP ”等)只會在某領域的文章出現,IDF 的值會比較大;故:TF-IDF 在保留文章的重要詞的同時可以過濾掉一些常見的、無關緊要的詞;

缺點

  1. 不能反映詞的位置信息,在對關鍵詞進行提取時,詞的位置信息(如:標題、句首、句尾的詞應該賦予更高的權重);
  2. IDF 是一種試圖抑制噪聲的加權,本身傾向於文本中頻率比較小的詞,這使得IDF 的精度不高;
  3. 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)。

語料庫:

  1. I like deep learning.
  2. I like NLP.
  3. 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 附件出現且統計數目大概相等,則它們在 語義 和 語法 上的含義大概相同。

優點

  1. 考慮了句子中詞的順序;

缺點

  1. 詞表的長度很大,導致詞的向量長度也很大;
  2. 共現矩陣也是稀疏矩陣(可以使用 SVDPCA 等算法進行降維,但是計算量很大);

3.3 Word2Vec

word2vec 模型是Google團隊在2013年發布的 word representation 方法。該方法一出讓 預訓練詞向量 的使用在NLP 領域遍地開花。

模型

word2vec有兩種模型:CBOWSKIP-GRAM

  • CBOW:利用上下文的詞預測中心詞;
  • SKIP-GRAM:利用中心詞預測上下文的詞;

優點

  1. 考慮到詞語的上下文,學習到了語義和語法的信息;
  2. 得到的詞向量維度小,節省存儲和計算資源;
  3. 通用性強,可以應用到各種NLP 任務中;

缺點

  1. 詞和向量是一對一的關係,無法解決多義詞的問題;
  2. 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/)。

效果

優點

  1. 考慮到詞語的上下文、和全局語料庫的信息,學習到了語義和語法的信息;
  2. 得到的詞向量維度小,節省存儲和計算資源;
  3. 通用性強,可以應用到各種NLP 任務中;

缺點

  1. 詞和向量是一對一的關係,無法解決多義詞的問題;
  2. 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 更能表達在這個上下文中的具體含義,這就解決了靜態詞向量無法表示多義詞的問題。

網絡模型


過程

  1. 上圖中的結構使用字符級卷積神經網絡(convolutional neural network, CNN)來將文本中的詞轉換成原始詞向量(raw word vector) ;
  2. 將原始詞向量輸入雙向語言模型中第一層 ;
  3. 前向迭代中包含了該詞以及該詞之前的一些詞彙或語境的信息(即上文);
  4. 後向迭代中包含了該詞以及該詞之後的一些詞彙或語境的信息(即下文) ;
  5. 這兩種迭代的信息組成了中間詞向量(intermediate word vector);
  6. 中間詞向量被輸入到模型的下一層 ;
  7. 最終向量就是原始詞向量和兩個中間詞向量的加權和;

效果

如上圖所示:

  • 使用glove訓練的詞向量中,與 play 相近的詞大多與體育相關,這是因為語料中與play相關的語料多時體育領域的有關;
  • 在使用elmo訓練的詞向量中,當 play 取 演出 的意思時,與其相近的也是 演出 相近的句子;

4結語

  1. 現在深度學習在NLP 領域中使用的大多是分布式詞向量;
  2. 分布式詞向量的理論基礎是語言模型;
  3. 在進行詞向量選擇時,要考慮到具體任務的特性,word2vec、glove、elmo訓練的詞向量各有優缺點,並沒有哪一種比另兩種效果好很多。

本文轉自公眾號 AI 研習社,原文地址