NLP常見語言模型總結

目錄

一、詞的離散表示

1、One-hot編碼(獨熱編碼)

2、Bag of Words(BOW,詞袋模型)

3、N-gram語言模型

二、詞的分佈式表示(Distributed Representation)

1、共現矩陣(Co-currence Matrix)

2、神經網絡語言模型(Neural Network Language Model,NNLM)

3、Word2Vec,GloVe,Doc2Vec,Fasttext,Elmo,Bert,Flair


一、詞的離散表示

語料庫:(1)John likes to watch movies. Mary likes too.     (2)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}

字典包含10個單詞,每個單詞有唯一索引;在詞典中的順序和在句子中的順序沒有關聯

1、One-hot編碼(獨熱編碼)

One-Hot編碼是分類變量作爲二進制向量的表示。這首先要求將分類值映射到整數值。然後,每個整數值被表示爲二進制向量,除了整數的索引之外,其它都是零值,它被標記爲1。

使用one-hot編碼,將離散特徵的取值擴展到了歐式空間,離散特徵的某個取值就對應歐式空間的某個點

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]

from sklearn.preprocessing import OneHotEncoder

2、Bag of Words(BOW,詞袋模型)

BOW模型忽略了文本的語法和語序,用一組無序的單詞(words)來表達一段文字或一個文檔。(文檔的向量表示可以直接將各詞的詞向量加和表示)

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]

這兩個向量共包含10個元素, 其中第i個元素表示字典中第i個單詞在句子中出現的次數. 因此BOW模型可認爲是一種統計直方圖 (histogram)。在文本檢索和處理應用中, 可以通過該模型很方便的計算詞頻。

from sklearn.feature_extraction.text import CountVectorizer

缺陷:“詞彙鴻溝”現象,稀疏方式存儲,其獨立性假設不太符合語言文字實際分佈情況,忽略了單詞間的語法和順序,無法瞭解單詞間的關聯程度。 

解決:採用高階(2階以上)統計語言模型:Bi-Gram、Tri-Gram等。

3、N-gram語言模型

N-gram是計算機語言學和概率論範疇內的概念,是指給定的一段文本或語音中N個項目(item)的序列。項目(item)可以是音節、字母、單詞或鹼基對。通常N-grams取自文本或語料庫。

N=1時稱爲unigram,N=2稱爲bigram,N=3稱爲trigram,以此類推。

(1)N-gram原理

N-Gram是基於一個假設:第n個詞出現與前n-1個詞相關,而與其他任何詞不相關。(這也是隱馬爾可夫當中的假設。)整個句子出現的概率就等於各個詞出現的概率乘積。各個詞的概率可以通過語料中統計計算得到。

假設句子T是有詞序列w1,w2,w3...wn組成,用公式表示N-Gram語言模型如下:

P(T)=P(w1)*p(w2)*p(w3)***p(wn)=p(w1)*p(w2|w1)*p(w3|w1w2)***p(wn|w1w2w3...)

一般常用的N-Gram模型是Bi-Gram和Tri-Gram。分別用公式表示如下:

Bi-Gram:   P(T)=p(w1|begin)*p(w2|w1)*p(w3|w2)***p(wn|wn-1)

Tri-Gram:  P(T)=p(w1|begin1,begin2)*p(w2|w1,begin1)*p(w3|w2w1)***p(wn|wn-1,wn-2)

注意上面概率的計算方法:P(w1|begin)=以w1爲開頭的所有句子/句子總數;p(w2|w1)=w1,w2同時出現的次數/w1出現的次數。以此類推。

(2)N-gram語言模型學習(可參看統計自然語言處理)

N-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的關係如下表

n 模型參數數量
1(unigram)

2*10^{5}

2(Bi-gram) 4*10^{10}
3(Tri-gram) 8*10^{15}
4(4-gram) 16*10^{20}

一句話(詞組合)出現的概率

Unigram/1-gram :P(Mary likes too) = P(too | Mark, likes) * P(likes | Mary) * P(Mary) = P(too) * P(likes) * P(Mary)

Bi-gram/2-gram  :P(Mary likes too) = P(too | Mark, likes) * P(likes | Mary) * P(Mary) = P(too | likes) * P(likes | Marry) * P(Mary)

注意(One-hot,BOW,n-gram)離散表示的問題:

 無法衡量詞向量之間的關係;詞表維度隨着語料庫增長而膨脹;n-gram語言模型考慮了詞的順序,但是 n-gram詞序列隨語料庫膨脹的更快;數據稀疏問題等。

可以使用KenLm這個工具訓練統計n-gram語言模型。

二、詞的分佈式表示(Distributed Representation)

詞的分佈式表示核心是:上下文的表示以及上下文與目標詞之間的關係的建模。

1、共現矩陣(Co-currence Matrix)

基於矩陣的分佈表示主要是構建“詞-上下文”矩陣,通過某種技術從該矩陣中獲取詞的分佈表示。矩陣的表示詞,表示上下文,每個元素表示某個詞和上下文共現的次數,這樣矩陣的一行就描述了該詞的上下文分佈。

常見的上下文有:(1)文檔,即“詞-文檔”矩陣;(2)上下文的每個詞,即“詞-詞”矩陣;(3)n-元詞組,即“詞-n-元組”矩陣。

經典模型代表:Global Vector模型(GloVe)是一種對“詞-詞”矩陣進行分解從而得到詞表示的方法。

GloVe模型(Global Vectors for Word Representation

(1)共現矩陣的表示

詞-文檔(Word-Document)的共現矩陣主要用於發現主題(topic),用於主題模型,如LSA(Latent Semantic Analysis)。

詞-詞(Word-Word)共現矩陣可以挖掘語法和語義信息。

例如:語料庫如下:

• I like deep learning.

• I like NLP.

• I enjoy flying.

則共現矩陣表示如下:(使用對稱的窗函數(左右window length都爲1) )

例如:“I like”出現在第1,2句話中,一共出現2次,所以= 2; 對稱的窗口指的是,“like I”也是2次。

將共現矩陣行(列)作爲詞向量表示後,可以知道like,enjoy都是在I附近且統計數目大約相等,他們意思相

 

(2)共現矩陣表示存在的問題

將共現矩陣的行列作爲詞向量:向量維數隨着詞典大小線性增長;存儲整個詞典的空間消耗非常大;一些模型如文本分類模型會面臨稀疏問題;模型會欠穩定。

解決辦法:構造低維稠密向量作爲詞的分佈式表示(25~1000維),如使用奇異值分解SVD(Singular Value Decomposition)對共現矩陣向量做降維。

2、神經網絡語言模型(Neural Network Language Model,NNLM)

3、Word2Vec,GloVe,Doc2Vec,Fasttext,Elmo,Bert,Flair

詳見:NLP詞向量和句向量方法總結及實現

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章