1. 程式人生 > >stanford nlp第四課“語言模型(Language Modeling)”

stanford nlp第四課“語言模型(Language Modeling)”

一、課程介紹

斯坦福大學於2012年3月在Coursera啟動了線上自然語言處理課程,由NLP領域大牛Dan Jurafsky 和 Chirs Manning教授授課:
https://class.coursera.org/nlp/

以下是本課程的學習筆記,以課程PPT/PDF為主,其他參考資料為輔,融入個人拓展、註解,拋磚引玉,歡迎大家在“我愛公開課”上一起探討學習。

二、語言模型(Language Model)

unigram 一元分詞,把句子分成一個一個的漢字
bigram 二元分詞,把句子從頭到尾每兩個字組成一個詞語
trigram 三元分詞,把句子從頭到尾每三個字組成一個詞語.

在實際應用中,我們經常需要解決這樣一類問題:如何計算一個句子的概率?如:

  • 機器翻譯:P(high winds tonite) > P(large winds tonite)
  • 拼寫糾錯:P(about fifteen minutes from) > P(about fifteen minuets from)
  • 語音識別:P(I saw a van) >> P(eyes awe of an)
  • 音字轉換:P(你現在幹什麼|nixianzaiganshenme) > P(你西安在幹什麼|nixianzaiganshenme)
  • 自動文摘、問答系統、... ...

以上問題的形式化表示如下:

p(S)=p(w1,w2,w3,w4,w5,…,wn)

      =p(w1

)p(w2|w1)p(w3|w1,w2)...p(wn|w1,w2,...,wn-1)//鏈規則

p(S)被稱為語言模型,即用來計算一個句子概率的模型。

那麼,如何計算p(wi|w1,w2,...,wi-1)呢?最簡單、直接的方法是直接計數做除法,如下:

p(wi|w1,w2,...,wi-1) = p(w1,w2,...,wi-1,wi) / p(w1,w2,...,wi-1)

但是,這裡面臨兩個重要的問題:資料稀疏嚴重;引數空間過大,無法實用。

基於馬爾科夫假設(Markov Assumption):下一個詞的出現僅依賴於它前面的一個或幾個詞。

  • 假設下一個詞的出現依賴它前面的一個詞,則有:

p(S)=p(w1)p(w2|w1)p(w3|w1,w2)...p(wn|w1,w2,...,wn-1)

      =p(w1)p(w2|w1)p(w3|w2)...p(wn|wn-1)   // bigram

  • 假設下一個詞的出現依賴它前面的兩個詞,則有:

p(S)=p(w1)p(w2|w1)p(w3|w1,w2)...p(wn|w1,w2,...,wn-1)

      =p(w1)p(w2|w1)p(w3|w1,w2)...p(wn|wn-1,wn-2)  // trigram 

那麼,我們在面臨實際問題時,如何選擇依賴詞的個數,即n。

  • 更大的n:對下一個詞出現的約束資訊更多,具有更大的辨別力
  • 更小的n:在訓練語料庫中出現的次數更多,具有更可靠的統計資訊,具有更高的可靠性。

理論上,n越大越好,經驗上,trigram用的最多,儘管如此,原則上,能用bigram解決,絕不使用trigram。

2)構造語言模型

通常,通過計算最大似然估計(Maximum Likelihood Estimate)構造語言模型,這是對訓練資料的最佳估計,公式如下:

p(w1|wi-1) = count(wi1-, wi) / count(wi-1)

如給定句子集“<s> I am Sam </s>

                 <s> Sam I am </s>

                 <s> I do not like green eggs and ham </s>”

部分bigram語言模型如下所示:

c(wi)如下:

c(wi-1,wi)如下:

則bigram為:

那麼,句子“<s> I want english food </s>”的概率為:

p(<s> I want english food </s>)=p(I|<s>)

                                                ×  P(want|I) 

                                                ×  P(english|want)  

                                                ×  P(food|english)  

                                                ×  P(</s>|food)

                                              =  .000031

為了避免資料溢位、提高效能,通常會使用取log後使用加法運算替代乘法運算。

log(p1*p2*p3*p4) = log(p1) + log(p2) + log(p3) + log(p4)

推薦開源語言模型工具:

推薦開源n-gram資料集:

Total number of tokens: 1,306,807,412,486

Total number of sentences: 150,727,365,731

Total number of unigrams: 95,998,281

Total number of bigrams: 646,439,858

Total number of trigrams: 1,312,972,925

Total number of fourgrams: 1,396,154,236

Total number of fivegrams: 1,149,361,413

Total number of n-grams: 4,600,926,713

  • Chinese Web 5-gram(http://www.ldc.upenn.edu/Catalog/catalogEntry.jsp?catalogId=LDC2010T06)

3)語言模型評價

語言模型構造完成後,如何確定好壞呢? 目前主要有兩種評價方法:

  • 實用方法:通過檢視該模型在實際應用(如拼寫檢查、機器翻譯)中的表現來評價,優點是直觀、實用,缺點是缺乏針對性、不夠客觀;
  • 理論方法:迷惑度/困惑度/混亂度(preplexity),其基本思想是給測試集賦予較高概率值的語言模型較好,公式如下:

由公式可知,迷惑度越小,句子概率越大,語言模型越好。使用《華爾街日報》訓練資料規模為38million words構造n-gram語言模型,測試集規模為1.5million words,迷惑度如下表所示:

4)資料稀疏與平滑技術

大規模資料統計方法與有限的訓練語料之間必然產生資料稀疏問題,導致零概率問題,符合經典的zip'f定律。如IBM, Brown:366M英語語料訓練trigram,在測試語料中,有14.7%的trigram和2.2%的bigram在訓練語料中未出現。

資料稀疏問題定義:“The problem of data sparseness, also known as the zero-frequency problem arises when analyses contain configurations that never occurred in the training corpus.  Then it is not possible to estimate probabilities from observed frequencies, and some other estimation scheme that can generalize (that configurations) from the training data has to be used. —— Dagan”。

人們為理論模型實用化而進行了眾多嘗試與努力,誕生了一系列經典的平滑技術,它們的基本思想是“降低已出現n-gram條件概率分佈,以使未出現的n-gram條件概率分佈非零”,且經資料平滑後一定保證概率和為1,詳細如下:

  • Add-one(Laplace) Smoothing

加一平滑法,又稱拉普拉斯定律,其保證每個n-gram在訓練語料中至少出現1次,以bigram為例,公式如下:

其中,V是所有bigram的個數。

承接上一節給的例子,經Add-one Smoothing後,c(wi-1, wi)如下所示:

則bigram為:

在V >> c(wi-1)時,即訓練語料庫中絕大部分n-gram未出現的情況(一般都是如此),Add-one Smoothing後有些“喧賓奪主”的現象,效果不佳。那麼,可以對該方法擴充套件以緩解此問題,如Lidstone's Law,Jeffreys-Perks Law。

  • Good-Turing Smoothing

其基本思想是利用頻率的類別資訊對頻率進行平滑。調整出現頻率為c的n-gram頻率為c*:

但是,當nr+1或者nr > nr+1時,使得模型質量變差,如下圖所示:

直接的改進策略就是“對出現次數超過某個閾值的gram,不進行平滑,閾值一般取8~10”,其他方法請參見“Simple Good-Turing”。

  • Interpolation Smoothing

不管是Add-one,還是Good Turing平滑技術,對於未出現的n-gram都一視同仁,難免存在不合理(事件發生概率存在差別),所以這裡再介紹一種線性插值平滑技術,其基本思想是將高階模型和低階模型作線性組合利用低元n-gram模型對高元n-gram模型進行線性插值。因為在沒有足夠的資料對高元n-gram模型進行概率估計時,低元n-gram模型通常可以提供有用的資訊。公式如下:

擴充套件方式(上下文相關)為:

λs可以通過EM演算法來估計,具體步驟如下:

  • 首先,確定三種資料:Training data、Held-out data和Test data;

  • 然後,根據Training data構造初始的語言模型,並確定初始的λs(如均為1);
  • 最後,基於EM演算法迭代地優化λs,使得Held-out data概率(如下式)最大化。
  • Kneser-Ney Smoothing
  • Web-scale LMs

如Google N-gram語料庫,壓縮檔案大小為27.9G,解壓後1T左右,面對如此龐大的語料資源,使用前一般需要先剪枝(Pruning)處理,縮小規模,如僅使用出現頻率大於threshold的n-gram,過濾高階的n-gram(如僅使用n<=3的資源),基於熵值剪枝,等等。

另外,在儲存優化方面也需要做一些優化,如使用trie資料結構儲存,藉助bloom filter輔助查詢,把string對映為int型別處理(基於huffman編碼、Varint等方法),float/double轉成int型別(如概率值精確到小數點後6位,然後乘10E6,即可將浮點數轉為整數)。

2007年Google Inc.的Brants et al.提出了針對大規模n-gram的平滑技術——“Stupid Backoff”,公式如下:

資料平滑技術是構造高魯棒性語言模型的重要手段,且資料平滑的效果與訓練語料庫的規模有關。訓練語料庫規模越小,資料平滑的效果越顯著;訓練語料庫規模越大,資料平滑的效果越不顯著,甚至可以忽略不計——錦上添花。

5)語言模型變種

  • Class-based N-gram Model

該方法基於詞類建立語言模型,以緩解資料稀疏問題,且可以方便融合部分語法資訊。

  • Topic-based N-gram Model

該方法將訓練集按主題劃分成多個子集,並對每個子集分別建立N-gram語言模型,以解決語言模型的主題自適應問題。架構如下:

  • Cache-based N-gram Model

該方法利用cache快取前一時刻的資訊,以用於計算當前時刻概率,以解決語言模型動態自適應問題。

-People tends to use words as few as possible in the article. 

-If a word has been used, it would possibly be used again in the future.

架構如下:

猜測這是目前QQ、搜狗、谷歌等智慧拼音輸入法所採用策略,即針對使用者個性化輸入日誌建立基於cache的語言模型,用於對通用語言模型輸出結果的調權,實現輸入法的個性化、智慧化。由於動態自適應模組的引入,產品越用越智慧,越用越好用,越用越上癮。

  • Skipping N-gram Model&Trigger-based N-gram Model

二者核心思想都是刻畫遠距離約束關係。

  • 指數語言模型:最大熵模型MaxEnt、最大熵馬爾科夫模型MEMM、條件隨機域模型CRF

傳統的n-gram語言模型,只是考慮了詞形方面的特徵,而沒有詞性以及語義層面上的知識,並且資料稀疏問題嚴重,經典的平滑技術也都是從統計學角度解決,未考慮語法、語義等語言學作用。

MaxEnt、MEMM、CRF可以更好的融入多種知識源,刻畫語言序列特點,較好的用於解決序列標註問題。

三、參考資料

相關推薦

stanford nlp語言模型Language Modeling

一、課程介紹 斯坦福大學於2012年3月在Coursera啟動了線上自然語言處理課程,由NLP領域大牛Dan Jurafsky 和 Chirs Manning教授授課:https://class.coursera.org/nlp/ 以下是本課程的學習筆記,以課程PPT

斯坦福大學自然語言處理 語言模型Language Modeling筆記

一、課程介紹 斯坦福大學於2012年3月在Coursera啟動了線上自然語言處理課程,由NLP領域大牛Dan Jurafsky 和 Chirs Manning教授授課:https://class.coursera.org/nlp/ 以下是本課程的學習筆記,以課程PPT/

斯坦福大學-自然語言處理入門 筆記 語言模型

一、介紹N-grams 1、概率語言模型 對每個句子給出一個概率,用以判斷機器翻譯中哪個句子是最佳的選擇,拼寫校準中哪個句子可能出現錯誤。 目標:計算句子或者是一系列單詞的概率

斯坦福大學-自然語言處理入門 筆記 關係抽取relation extraction

一、簡介 關係抽取就是從文件中抽取關係,例子如下: 為什麼進行關係抽取 建立新的關係型知識庫(knowledge bases) 增強目前的知識庫(knowledge bases) 支援問題回答(question answering)

斯坦福大學-自然語言處理入門 筆記 資訊抽取information extraction

一、介紹 1、資訊抽取(information extraction) 資訊抽取(IE)系統 找到並理解文字中的有限的相關性 從很多的文件之中收集資訊 產生一個相關資訊的結構化的表徵 目的: 進行資

斯坦福大學-自然語言處理入門 筆記 情感分析sentiment analysis

一、情感分析簡述 情感分析(sentiment analysis),又叫意見抽取(opinion extraction),意見挖掘(opinion mining),情感挖掘(sentiment mining)以及主觀分析(subjectivity analysis)。 情感分

斯坦福大學自然語言處理“情感分析Sentiment Analysis

一、課程介紹 斯坦福大學於2012年3月在Coursera啟動了線上自然語言處理課程,由NLP領域大牛Dan Jurafsky 和 Chirs Manning教授授課:https://class.coursera.org/nlp/ 以下是本課程的學習筆記,以課程PP

斯坦福大學自然語言處理“拼寫糾錯Spelling Correction

今天在我愛機器學習上正好看到這篇文章,和我們現在做的中文拼寫檢查關係密切,就轉過來了,需要細細地看一遍。 一、課程介紹 斯坦福大學於2012年3月在Coursera啟動了線上自然語言處理課程,由NLP領域大牛Dan Jurafsky 和 Chirs Manning教授

python(版閱讀心得)系統工具

pro rename _id multi temporary inter path 運行 pid 本章將會講解python常用系統工具的介紹 python中大多數系統級接口都集中在兩個模塊: sys 和 os 但仍有部分其他標準模塊也屬於這個領域 如: 常見: glob

【練習題】章--互動設計Think Python

1.寫一個函式叫做square(譯者注:就是正方形的意思),有一個名叫t的引數,這個t是一個turtle。用這個turtle來畫一個正方形。寫一個函式呼叫,把bob作為引數傳遞給square,然後再執行這個程式。 code: import turtle def square(t): &n

《機器學習》 周志華學習筆記章 決策樹課後習題python 實現

一、基本內容 1.基本流程 決策樹的生成過程是一個遞迴過程,有三種情形會導致遞迴返回 (1)當前節點包含的yangben全屬於同一類別,無需劃分; (2)當前屬性集為空,或是所有yangben在所有屬性上的取值相同,無法劃分; (3)當前結點包含的yangben集合為空,不能

《機器學習》 周志華學習筆記三章 線性模型課後習題python 實現

線性模型 一、內容 1.基本形式 2.線性迴歸:均方誤差是迴歸任務中最常用的效能度量 3.對數機率迴歸:對數機率函式(logistic function)對率函式是任意階可導的凸函式,這是非常重要的性質。 4.線性判別分析(LDA 是一種降維的方法) 5.多分類學習:

AutoCAD2012從入門到精通中文視訊教程 15 圖案填充個人收藏

首先準備好你要填充的圖案,在此我以簡單的兩個圓來舉例操作,之後複雜的就請自行琢磨一下,方法都是差不多的。 在軟體介面上方的“常用”選單裡找到“圖案填充”工具,圖案如下: AutoCAD的圖案填充工具怎麼用? 點選“圖案填充”工具後,會切換到該工具的設定介面,如

AutoCAD2012從入門到精通中文視訊教程 23 環形陣列個人收藏

1.啟動AutoCAD2012,按Ctrl+O組合鍵開啟一幅影象。在“功能區”選項板中的“常用”選項卡中單擊“修改”面板中“矩形陣列”按鈕,如圖所示。 AutoCAD2012:[13]如何應用矩形和環形陣列物件 2 2.根據命令列的提示,在繪圖區選中酒杯,按E

hihor 學習日記:hiho一下 十六週SG函式

http://hihocoder.com/contest/hiho46/problem/1 這個SG函式算是講的比較易懂了, AC程式碼: #include <bits/stdc++.h> using namespace std; #define LL long l

深度學習課程之文字預處理、詞袋模型、word2vec、語言模型1.9

詞向量和語言模型 深度學習其實最成功的應用是在影象上,有了 CNN 可以很好地提取影象上的特徵,這些特徵經過幾層的神經網路結構可以很好地組合成比較抽象的特徵。 NLP 常見任務 自動摘要:媒體需要的頭條通過 NLP 自動提取 機器翻譯 主題識別 文字分類

2017多校訓練賽場 HDU 6071最短路

Lazy Running Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others) Total Submission(s): 101    Accepted S

編譯原理----章 語法分析自上而下分析

一、感受及總結        語法分析是編譯過程的核心部分,語言的語法結構是用上下文無關描述的。因為自上而下分析可能會存在兩大問題,左遞迴和回溯,所以產生了消除左遞迴和克服回溯的方法----LL(1)分析法。使用LL(1)分析法要涉及FIRST集和FOLLOW集,這是重點。當

《劍指offer》十九題醜數

醜數 exp 第一個 算法 ber 大於 offer return false // 面試題49:醜數 // 題目:我們把只包含因子2、3和5的數稱作醜數(Ugly Number)。求按從小到 // 大的順序的第1500個醜數。例如6、8都是醜數,但14不是,因為它

leecode十六題全排列

ack 二維數組 全排列 vector style 符號 ans 字符 alt class Solution { public: vector<vector<int>> permute(vector<int>&a