NLP-基础知识-002 (语言模型)
生活随笔
收集整理的這篇文章主要介紹了
NLP-基础知识-002 (语言模型)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、Noisy Channel Model
p(text|source) = k * p(source|text)P(text) ----> Noisy Channel Model主要通過貝葉斯定理: p(text|source) = p(source|text)*p(text)/p(source)p(source) 為常數應用場景:語音識別、機器翻譯、拼寫糾錯、OCR、密碼破譯機器翻譯: 英文-翻譯成-中文p(中文|英文) = k * p(英文|中文) * p(中文)(語言模型)argmax Translation model拼接糾錯:輸入:錯誤的寫法 輸出:正確的寫法p(正確的寫法|錯誤的寫法) = k * p(錯誤的寫法|正確的寫法) (->類似于編輯距離) * p(正確的寫法)(->語言模型)語音識別:輸入:語音 輸出:轉化為文本p(文本|語音信號) = k * p(語音信號 | 文本) (->Translation model)* p(文本) (->語言模型)密碼破解:輸入:加密字符串 輸出:明文p(明文|加密字符串) = k * p(加密字符串|明文) * p(明文)(->語言模型)?二、語言模型
Language Model(LM)語言模型用來判斷:是否一句話從語法上通順例子:今天是周日 vs 周日是今天 -> 訓練好的語言模型 -> P-LM(今天是周日) > P-LM(周日是今天)全民AI是趨勢 vs 趨勢是全民AI Chain RuleP(A,B,C,D) = P(A)*P(B|A)*P(C|AB)P(D|ABC)P(A,B) = P(A|B)P(B) = p(B|A)P(A)p(休息|今天,是,春節,我們,都) 存在的問題就是"今天,是,春節,我們,都"這么長的字符串很少在文中出現,條件概率很難計算而且大部分都是0,沒有任何意義解決辦法:馬爾科夫假設p(休息|今天,是,春節,我們,都) 約等于 p(休息|都) ("都" 離 "休息" 最近) first order 馬爾科夫假設p(休息|今天,是,春節,我們,都) 約等于 p(休息|我們,都) second order ....p(休息|今天,是,春節,我們,都) 約等于 p(休息|春節,我們,都) third order ....字符串越長,統計出來的字符串越少,結果越小越不準確first order: p(w1,w2,w3,....wn) = p(w1)p(w2|w1)p(w3|w2)......p(wn|wn-1)例子:Language model(use second order)p(是|今天) = 0.01 p(今天) = 0.002 p(周日|是) = 0.001 p(周日|今天) = 0.0001 p(周日)=0.02 p(是|周日) = 0.0002比較:今天是周日 vs 今天周日是p-LM("今天是周日") = p(今天) * p(是|今天) * p(周日|是) = 0.002 * 0.001 * 0.001 = 2 * 10^(-8)p-LM("今天周日是") = p(今天) * p(周日|今天) * p(是|周日) = 4 * 10 ^ (-10)p-LM("今天是周日") > p-LM("今天周日是")語言模型分類(Language Model):Unigram: P(w1,w2,w3,w4,w5....wn) = p(w1)p(w2)p(w3)....p(wn)p(今天,是,春節,我們,都,休息) = p(今天)p(是)p(春節)p(我們)p(都)p(休息)p(今天,春節,是,我們,都,休息) = p(今天)p(春節)P(是)p(我們)p(都)p(休息)p(今天,是,春節,我們,都,休息) = p(今天,春節,是,我們,都,休息) 從上面可以看出,兩個句子的值在算法上是相同的,但是本質上兩個句子的質量是不一樣的,體現出Unigram沒有考慮詞之間的順序信息Bigram(first order 馬爾科夫假設):P(w1,w2,w3,w4,w5....wn) = p(w1)p(w2|w1)p(w3|w2)......p(wn|wn-1)p(今天,是,春節,我們,都,休息) = p(今天)p(是|今天)p(春節|是)....p(今天,春節,是,我們,都,休息) = p(今天)p(春節|今天)p(是|春節)......Bigram考慮到前面一個單詞p(今天,是,春節,我們,都,休息) > p(今天,春節,是,我們,都,休息)N-gramN = 3P(w1,w2,w3,w4,w5....wn) = p(w1)p(w2|w1)p(w3|w1w2)p(w4|w2w3)......一般N不會超過6、7,一般N會采用2三、估計語言模型的概率
p(w1,w2,w3...wn) = p(w1)p(w2)....p(wn)根據語料庫計算每一個單詞的概率Bigram:Estimating Probability語料庫:今天 的 天氣 很好 啊我 很 想 出去 運動但 今天 上午 想 上課訓練營 明天 才 開始"今天 上午 想 出去 運動"p-LM("今天 上午 想 出去 運動") = p-LM("今天")p-LM("上午|今天")p-LM(想|上午)p-LM(出去|想)p-LM(運動|出去) = 1/36p-LM("今天 上午 的 天氣 很好 呢") = p-LM("今天")p-LM("上午|今天")p-LM("的|上午").... = 0p-LM("的|上午") = 0N-gram: Estimating Probablity語料庫:N = 3"今天 上午 有 課程" = p-LM("今天")*p-LM("上午"|"今天")*p-LM("有|今天,上午")*p-LM("課程|上午,有")四、評估語言模型
Evaluation of Language ModelQ:訓練出來的語言模型效果好還是壞?理想情況下:1、假設兩個語言模型 A、B 2、選定一個特定的任務比如拼寫糾錯 3、把兩個模型A,B都應用在此任務中 4、最后比較準確率,從而判斷A,B的表現核心思路:今天 __今天天氣 __今天天氣很好,__........Perplexity:(無監督的方式下,針對文本的評估方法)Perplexity = 2^(-x) x:average log likelihoodPerplexity越小越好假設應用Bigram訓練好的Bigramp(天氣|今天) = 0.01、P(今天) = 0.002、p(很好|天氣) = 0.1、p(適合|很好) = 0.01、p(出去|適合) = 0.02、P(運動|出去) = 0.1likelihood(今天) p(今天) = 0.002 => logp(今天) = a1 今天(天氣) p(天氣|今天) = 0.01 => logp(天氣|今天) = -2 今天天氣(很好) p(很好|天氣) = 0.1 => logp(很好|天氣) = -1 今天天氣很好,(適合) p(適合|很好) = 0.01 => log p(適合|很好) = -2 今天天氣很好,適合(出去) p(出去|適合) = 0.02 => log p(出去|適合) = a2 今天天氣很好,適合出去(運動) p(運動|出去) = 0.1 => log p(運動|出去) = -1x = (a1-2-1-2+a2-1)/6Perplexity = 2^(-x)很多出現概率為0的情況,采取平滑的方法Bigram"今天 訓練營 沒有" = P-LM("今天")*P-LM("訓練營|今天")P-LM(沒有|訓練營) = 0"今天 沒有 訓練營 課程" = 0從語法上可以看出兩個都是0,但是實際質量并不是相同的,第二個會好一些五、平滑(Smoothing)
SmoothingAdd-one SmoothingAdd-k SmoothingInterperationGood-Turning Smoothing總結
以上是生活随笔為你收集整理的NLP-基础知识-002 (语言模型)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NLP-基础知识-001
- 下一篇: NLP-基础知识-003(词性标注)