日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何计算给定一个unigram语言模型_n-gram语言模型原理到实践

發(fā)布時(shí)間:2024/4/17 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何计算给定一个unigram语言模型_n-gram语言模型原理到实践 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

最近開始復(fù)習(xí)一些nlp基礎(chǔ)知識,今天來回顧一下自然語言處理的重要技術(shù)語言模型(language model)。

1 什么是語言模型

語言模型就是衡量一句話概率的模型,可以用來判斷這句話為人話的概率。我們可以把一段自然語言文本看作一段離散的時(shí)間序列。假設(shè)一段長度為T的文本中的詞依次為

,那么在離散的時(shí)間序列中, 可看作在時(shí)間步(time step) 的輸出或標(biāo)簽。給定一個(gè)長度為T的詞的序列 ,語言模型將計(jì)算該序列的概率:

語言模型可用于提升語音識別和機(jī)器翻譯的性能。例如,在語音識別中,給定一段“廚房里食油用完了”的語音,有可能會輸出“廚房里食油用完了”和“廚房里石油用完了”這兩個(gè)讀音完全一樣的文本序列。如果語言模型判斷出前者的概率大于后者的概率,我們就可以根據(jù)相同讀音的語音輸出“廚房里食油用完了”的文本序列。在機(jī)器翻譯中,如果對英文“you go first”逐詞翻譯成中文的話,可能得到“你走先”“你先走”等排列方式的文本序列。如果語言模型判斷出“你先走”的概率大于其他排列方式的文本序列的概率,我們就可以把“you go first”翻譯成"你先走"。(摘自《動(dòng)手學(xué)深度學(xué)習(xí)》)

2 語言模型的計(jì)算

既然語言模型很有用,那么我們該如何計(jì)算呢?假設(shè)一段含有4個(gè)詞的文本序列w1,w2,w3,w4,則該序列的概率為

一般的,對于序列

我們有

其中,條件概率

當(dāng)序列非常長的時(shí)候,計(jì)算和存儲多個(gè)詞共同出現(xiàn)的概率的復(fù)雜度會呈指數(shù)級別增長。而且數(shù)據(jù)稀疏十分嚴(yán)重,沒有足夠大的預(yù)料能夠滿足多個(gè)詞的共現(xiàn),即不滿足大數(shù)定律而導(dǎo)致概率失真。并且由Zipf定律(Zipf's Law)知道在自然語言中大部分詞都是低頻詞,很難通過增加數(shù)據(jù)集來避免數(shù)據(jù)稀疏問題。因此多個(gè)詞共同出現(xiàn)的次數(shù)在語料庫中可能為0,導(dǎo)致序列概率直接為0。

3 從聯(lián)合概率鏈到n-gram語言模型

上面我們已經(jīng)討論了語言模型的聯(lián)合概率計(jì)算是很困難的,如何簡化語言模型的計(jì)算呢?這里便引入了馬爾可夫假設(shè):一個(gè)詞的出現(xiàn)只與前面n個(gè)詞相關(guān),即n階馬爾可夫鏈。

如果n=1,那么有

當(dāng)n=1,n=2,n=3時(shí),我們將其分別稱作一元語法(unigram)、二元語法(bigram)和三元語法(trigram)。

對于unigram來說,滿足了獨(dú)立性假設(shè),馬爾可夫假設(shè)可以看做在獨(dú)立性假設(shè)的基礎(chǔ)上加上了條件依賴。

例如,長度為4的序列

在一元語法、二元語法和三元語法中的概率分別為

嚴(yán)格來說,對于2-gram和3-gram來說,這樣計(jì)算的概率有偏差,對于2-gram,w1也應(yīng)該計(jì)算條件概率,這時(shí)需要給句子加上起始和結(jié)束位標(biāo)志。下面舉個(gè)例子計(jì)算2-gram。

<s>I am Sam</s>

<s>Sam I am</s>

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

...

因此

("I am Sam") =

("Sam I am") =

("I am Sam") > ("Sam I am") 可以知道“I am Sam”要比“Sam I am”通順。

但是在實(shí)際情況下,如果要嚴(yán)格計(jì)算語言模型,需要對語料進(jìn)行分句,然后在句首和句尾添加起始符和結(jié)束符,這樣比較麻煩。所以在很多情況下我們會使用上面說的計(jì)算方法來近似,可能也是因?yàn)檫@個(gè)原因我們很少看見加起始符和結(jié)束符的計(jì)算操作,只要句子計(jì)算的標(biāo)準(zhǔn)保持一致,還是能夠準(zhǔn)確判斷概率大小的。(我的觀點(diǎn),不一定準(zhǔn)確,如果有不對的地方歡迎指正~)

4 平滑技術(shù)

為了解決零概率問題呢,我們需要給“未出現(xiàn)的n-gram條件概率分布一個(gè)非零估計(jì)值,相應(yīng)得需要降低已出現(xiàn)n-gram條件概率分布,且經(jīng)數(shù)據(jù)平滑后一定保證概率和為1”。這就是平滑技術(shù)的基本思想。

4.1 拉普拉斯平滑

這是最古老的一種平滑方法,又稱加一平滑法,其保證每個(gè)n-gram在訓(xùn)練語料中至少出現(xiàn)1次。以計(jì)算概率 P(“優(yōu)惠”|“發(fā)票”,“點(diǎn)數(shù)”)為例,公式如下:

在所有不重復(fù)的三元組的個(gè)數(shù)遠(yuǎn)大于(“發(fā)票”,“點(diǎn)數(shù)”)出現(xiàn)的次數(shù)時(shí),即訓(xùn)練語料庫中絕大部分n-gram都是未出現(xiàn)的情況(一般都是如此),拉普拉斯平滑有“喧賓奪主”的現(xiàn)象,效果不佳。

4.2 古德圖靈(Good Turing)平滑

通過對語料庫的統(tǒng)計(jì),我們能夠知道出現(xiàn)r次(r>0)的n元組的個(gè)數(shù)為

。可以令從未出現(xiàn)的n元組的個(gè)數(shù)為 。古德圖靈平滑的思想是:
  • 出現(xiàn)0次的n元組也不能認(rèn)為其是0次,應(yīng)該給它一個(gè)比較小的估計(jì)值,比如為 次。
  • 為了保證總共的(出現(xiàn)和未出現(xiàn)的)n元組的次數(shù)不變,其他所有已出現(xiàn)的n元組的次數(shù)r應(yīng)該打一個(gè)折扣,比如為 次。
  • 然后再用新的 去計(jì)算各個(gè)條件概率。

所以問題的關(guān)鍵是計(jì)算

。為了保證平滑前后n元組的總共出現(xiàn)次數(shù)不變,有:

所以干脆令:

一般來說,出現(xiàn)一次的詞的數(shù)量比出現(xiàn)兩次的多,出現(xiàn)兩次的比三次的多。這種規(guī)律稱為Zipf定律(Zipf’s Law)。下圖是一個(gè)小語料上出現(xiàn)r次的詞的數(shù)量

和r的關(guān)系。

可以看出r越大,詞的數(shù)量

越小,即 。因此,一般情況下 ,而 。這樣就給未出現(xiàn)的詞賦予了一個(gè)很小的非零值,從而解決了零概率的問題。同時(shí)下調(diào)了出現(xiàn)概率很低的詞的概率。

當(dāng)然,在實(shí)際的自然語言處理中,一般會設(shè)置一個(gè)閾值T(一般取8~10),僅對出現(xiàn)次數(shù)小于T的詞做上述平滑。并且,因?yàn)閷?shí)際語料的統(tǒng)計(jì)情況使得

不一定成立, 情況也可能出現(xiàn),所以需要使用曲線擬合的方式替換掉原有的 ,并使用如下Kartz退避公式計(jì)算 :

4.3 組合估計(jì)平滑

不管是拉普拉斯平滑,還是古德圖靈平滑技術(shù),對于未出現(xiàn)的n元組都一視同仁,而這難免存在不合理。 因?yàn)槟呐率俏窗l(fā)生的事件,相互之間真實(shí)的概率也會存在差別。

另一方面,一個(gè)n元組可能未出現(xiàn),但是其(n-1)元組或者(n-2)元組是出現(xiàn)過的,這些信息如果不利用就直接浪費(fèi)掉了。在沒有足夠的數(shù)據(jù)對高元n-gram模型進(jìn)行概率估計(jì)時(shí),低元n-gram模型通常可以提供有用的信息。因此可以利用利用低元n-gram模型的信息對高元n-gram模型進(jìn)行估計(jì):

  • 如果低元n-gram模型的概率本來就很低,那么就給高元n-gram模型一個(gè)較低的估計(jì)值;
  • 如果低元n-gram模型有一個(gè)中等的概率,那么就給高元n-gram模型一個(gè)較高的估計(jì)值。

常用的組合估計(jì)算法有線性差值法和Katz回退法。具體公式比較復(fù)雜,這里就不列了。感興趣的同學(xué)可參考 Christopher D. Manning 的《統(tǒng)計(jì)自然語言處理基礎(chǔ)》

5 動(dòng)手實(shí)現(xiàn)n-gram語言模型(bigram為例)

import pandas as pd import re import jieba from collections import Counteroriginal_data = pd.read_csv('./data/sqlResult_1558435.csv', encoding='gb18030') articles = original_data['content'].tolist()# 去除標(biāo)點(diǎn)符號、英文字符、數(shù)字 def clean(article):clean_article = ''.join(re.findall('w+', str(article))) # 去除標(biāo)點(diǎn)符號pattern = re.compile('[A-Za-zd]+')clean_article = pattern.sub('', str(clean_article)) # 去除英文字符和數(shù)字return clean_article# 將清洗后的文本保存到文件中 def save(articles):with open('./data/article_9k.txt', 'w', encoding='utf-8') as f:for a in articles:f.write(a + 'n')clean_articles = [clean(article) for article in articles] save(clean_articles)# 分詞處理 def cut_text():words_list = []with open('./data/article_9k.txt', 'r') as f:count = 0for line in f:words = list(jieba.cut(line.strip('n')))words_list += wordsreturn words_listwords_list = cut_text() words_count = Counter(words_list) TOKENS_2GRAM = [''.join(words_list[i:i+2]) for i in range(len(words_list)-1)] words_count2 = Counter(TOKENS_2GRAM)words_list_len = len(words_list) unique_words_len = len(words_count) unique_bigram_len = len(words_count2)# 計(jì)算詞獨(dú)立出現(xiàn)的概率,采用拉普拉斯平滑 def prob_1(word):return (words_count[word] + 1) / (words_list_len + unique_words_len)# 計(jì)算條件概率,采用拉普拉斯平滑 def prob_2(word1, word2):return (words_count2[word1+word2] + 1) / (words_count[word1] + unique_bigram_len)# 構(gòu)建2-gram語言模型 def bigram_model(sentence):words = list(jieba.cut(sentence))probility = prob_1(words[0])for index in range(len(words)-1):probility *= prob_2(words[index], words[index+1])return probilitysent1 = "我愛你" sent2 = "我你愛" sent3 = "今天天氣真好" sent4 = "今天真天氣好" sent5 = "你先走" sent6 = "你走先" print(bigram_model(sent1)) print(bigram_model(sent2)) print(bigram_model(sent3)) print(bigram_model(sent4)) print(bigram_model(sent5)) print(bigram_model(sent6))

輸出:

5.9607783295715594e-06
1.2585314454141385e-14
6.751764045254859e-19
6.959695538300923e-24
1.2520998402585423e-15
3.909475699071306e-16

總結(jié)

以上是生活随笔為你收集整理的如何计算给定一个unigram语言模型_n-gram语言模型原理到实践的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 黄色成人影视 | 国产嫩草在线 | 亚洲av无码国产精品麻豆天美 | 久久久久久久久久久久久久av | 日韩一级高清 | 久久国产在线观看 | 日韩欧美中文字幕一区 | 国产三级在线看 | 国产极品999 | 亚洲图片 自拍偷拍 | 国产精品久久久久国产a级 国产一区二区在线播放 | 毛片视频网址 | 色图自拍 | 美脚の诱脚舐め脚视频播放 | 少妇媚药按摩中文字幕 | 国产又粗又猛又爽又黄91 | 国产激情a | 在线免费黄色网 | 国产一区二区三区免费看 | 精品国产一区二区三区日日嗨 | 91久久精品夜夜躁日日躁欧美 | a网站在线 | 亚洲av无码国产精品久久 | 97视频| 全国最大色 | 午夜av导航 | 高清欧美性猛交 | 色偷偷中文字幕 | 精品自拍偷拍 | 亚洲一区二区91 | 国产成人免费在线 | 双性娇喘浑圆奶水h男男漫画 | 日韩有码视频在线 | 久久色网 | 午夜在线免费观看 | 葵司一区二区 | 亚洲综合狠狠 | 国产7777777| 日本美女一区二区三区 | 欧美少妇性生活 | 久久人人爽人人爽人人av | 岛国av片| 九色porny自拍视频在线播放 | 亚洲日日日| 亚洲2022国产成人精品无码区 | 日本福利在线观看 | 欧美孕交视频 | 夜夜嗨av禁果av粉嫩avhd | 黄色片视频免费看 | 日本视频在线观看 | 丝袜视频在线观看 | 五月天av网站 | 欧美黄色录像带 | 亚洲欧美视频在线观看 | 日韩免费a| av大片在线看 | 欧美精品123区 | 99ri国产| 久草这里只有精品 | 无码人妻少妇色欲av一区二区 | 日韩69| 91国内视频 | 男人的天堂2019| 国产人伦精品一区二区三区 | 狠狠艹| 色网站观看 | 黑巨茎大战欧美白妞 | 色噜噜综合网 | 国产精品入口a级 | 91免费大片 | a猛片 | 亚洲精品a级 | 国产精华7777777 | 亚洲区小说区图片区 | 黄色片在线观看视频 | 亚洲乱码一区二区三区 | 一区二区精彩视频 | 国产伦理自拍 | 日本va欧美va欧美va精品 | 天堂一级片 | 香蕉婷婷 | 日韩免费网址 | 国产成人激情视频 | 日本欧美国产一区二区三区 | 欧美放荡办公室videos4k | 人妻少妇精品无码专区 | 国产青青| 国产综合精品一区二区三区 | 国产麻豆一区二区三区在线观看 | 免费欧美视频 | 日韩xxxxxxxxx | 欧洲综合视频 | 96久久| 成人亚洲国产 | 大学生高潮无套内谢视频 | 老牛嫩草二区三区观影体验 | 黄色免费网站在线 | 女女同性女同一区二区三区按摩 | 日日摸日日操 |