53 語(yǔ)言模型【動(dòng)手學(xué)深度學(xué)習(xí)v2】

語(yǔ)言模型
- 語(yǔ)言模型是 NLP 中最經(jīng)典的模型,假設(shè)給定長(zhǎng)度為 T 的文本序列 x1,x2, ... ,xT(可能是詞序列,也可能是字符序列),xt (1 <= t <= T)可以被認(rèn)為是文本序列在時(shí)間步 t 處的觀測(cè)或者標(biāo)簽。語(yǔ)言模型的目標(biāo)是估計(jì)序列的聯(lián)合概率 p(x1,x2, ... xT)
- 序列模型的核心就是整個(gè)序列文本所出現(xiàn)的概率
語(yǔ)言模型
- 目前所面對(duì)的問(wèn)題是如何對(duì)一個(gè)文檔,甚至是一個(gè)詞元序列進(jìn)行建模
- 為了訓(xùn)練語(yǔ)言模型,需要計(jì)算單詞的概率以及給定前面幾個(gè)單詞后出現(xiàn)某個(gè)單詞的條件概率(這些概率本質(zhì)上就是語(yǔ)言模型的參數(shù))
假設(shè)訓(xùn)練數(shù)據(jù)集是一個(gè)大型的文本語(yǔ)料庫(kù),訓(xùn)練集中詞的概率可以根據(jù)給定詞的相對(duì)詞頻來(lái)計(jì)算:一種稍微不太精確的方法是統(tǒng)計(jì)單詞在數(shù)據(jù)集中的出現(xiàn)次數(shù),然后將其除以整個(gè)語(yǔ)料庫(kù)中的單詞總數(shù)
- 由于連續(xù)單詞對(duì)的出現(xiàn)頻率出現(xiàn)頻率低得多,特別是對(duì)于一些不常見(jiàn)的單詞組合,要想找到足夠的出現(xiàn)次數(shù)來(lái)獲得準(zhǔn)確的估計(jì)可能都不容易
- 對(duì)于三個(gè)或者更多的單詞組合,情況可能會(huì)變得更糟,許多合理的三個(gè)單詞所組成的單詞組合可能是存在的,但是在數(shù)據(jù)集中可能找不到
- 對(duì)于上述情況,如果數(shù)據(jù)集很小,或者單詞非常罕見(jiàn),那么這類單詞出現(xiàn)一次的機(jī)會(huì)可能都找不到,除非能夠提供某種解決方案將這些單詞組合指定為非零計(jì)數(shù),否則將無(wú)法在語(yǔ)言模型中使用它們
- 一種常見(jiàn)的策略是執(zhí)行某種形式的拉普拉斯平滑(Laplace smoothing),在所有的計(jì)數(shù)中添加一個(gè)小常量。但是這樣的模型很容易變得無(wú)效,因?yàn)樾枰鎯?chǔ)所有的計(jì)數(shù),而且完全忽略了單詞的意思,最后,長(zhǎng)單詞序列大部分是沒(méi)出現(xiàn)過(guò)的,因此一個(gè)模型如果只是簡(jiǎn)單地統(tǒng)計(jì)先前看到的單詞序列頻率,那么模型面對(duì)這種問(wèn)題肯定是表現(xiàn)不佳的
語(yǔ)言模型的應(yīng)用
- 做預(yù)訓(xùn)練模型(如 BERT,GPT-3):給定大量的文本做預(yù)訓(xùn)練,然后訓(xùn)練模型預(yù)測(cè)整個(gè)文本出現(xiàn)的概率,因此能夠得到比較多的訓(xùn)練數(shù)據(jù)(文本不需要進(jìn)行標(biāo)注,因此會(huì)比圖像便宜,只需要拿出一定量的文本即可)來(lái)做比較大的模型
- 生成文本,給定前面幾個(gè)詞,不斷使用 xt ~ p( xt | x1,x2, ... x(t-1) ) 來(lái)生成后續(xù)文本(給定前面幾個(gè)詞,不斷地采樣下一個(gè)詞,然后一直預(yù)測(cè)下去),對(duì)模型的要求比較高,否則誤差會(huì)不斷累積
- 判斷多個(gè)序列中哪個(gè)更常見(jiàn):使用語(yǔ)言模型判斷哪一個(gè)序列出現(xiàn)的概率更高(在打字的時(shí)候,輸入法自動(dòng)補(bǔ)全也是根據(jù)語(yǔ)言模型來(lái)判斷句子出現(xiàn)的概率,還可以針對(duì)特定用戶打字的習(xí)慣來(lái)進(jìn)行個(gè)性化定制,根據(jù)用戶之前的使用習(xí)慣來(lái)進(jìn)行補(bǔ)全和糾錯(cuò))
使用計(jì)數(shù)來(lái)建模
- 語(yǔ)言模型可以使用計(jì)數(shù)來(lái)進(jìn)行建模
假設(shè)序列長(zhǎng)度為 2 ,可以預(yù)測(cè)

- n:總詞數(shù)(或者 token 的個(gè)數(shù)),也就是采集到的所有樣本
- n(x):x 在整個(gè)詞中出現(xiàn)的個(gè)數(shù)
- n(x,x'):連續(xù)單詞對(duì)的出現(xiàn)次數(shù)
- P(x):統(tǒng)計(jì) x 在數(shù)據(jù)集中的出現(xiàn)次數(shù),然后將其除以整個(gè)語(yǔ)料庫(kù)中的總詞數(shù)(這種方法對(duì)于頻繁出現(xiàn)的單詞效果還是不錯(cuò)的)
拓展到序列長(zhǎng)度為 3 的情況

N 元語(yǔ)法
- 當(dāng)序列很長(zhǎng)時(shí),因?yàn)槲谋玖坎粔虼?,很可?n( x1, ... ,xT) <= 1
- 在序列長(zhǎng)度比較長(zhǎng)的情況下,可以使用馬爾科夫假設(shè)
- 對(duì)于 N 元語(yǔ)法來(lái)說(shuō),所要看的子序列的長(zhǎng)度是固定的,N 越大,對(duì)應(yīng)的依賴關(guān)系越長(zhǎng),精度越高,但是空間復(fù)雜度比較大
- 二元語(yǔ)法、三元語(yǔ)法比較常見(jiàn)
如果

成立,則序列上的分布滿足一階馬爾科夫性質(zhì),且階數(shù)越高,對(duì)應(yīng)的依賴關(guān)系就越長(zhǎng)
一元語(yǔ)法(unigram)
- 馬爾科夫假設(shè)中的 τ 為 0 ,也就是說(shuō)每次計(jì)算 xt 的概率時(shí),不用考慮 xt 之前的數(shù)據(jù)
- 使用一元語(yǔ)法計(jì)算 p( x1,x2,x3,x4):可以認(rèn)為這個(gè)序列中每個(gè)詞是獨(dú)立的

二元語(yǔ)法(bigram)
- 馬爾科夫假設(shè)中的 τ 為 1 ,也就是說(shuō)每次計(jì)算 xt 的概率時(shí),只依賴于 x( t-1 ),也就是說(shuō)每一個(gè)詞和前面一個(gè)詞是相關(guān)的

三元語(yǔ)法(trigram)
- 馬爾科夫假設(shè)中的 τ 為 2 ,也就是說(shuō)每次計(jì)算 xt 的概率時(shí),只依賴于 x( t - 1 ) 和 x( t - 2 ),也就是說(shuō)每一個(gè)詞和前面兩個(gè)詞是相關(guān)的

N 元語(yǔ)法的好處
- 最大的好處是可以處理比較長(zhǎng)的序列。如果序列很長(zhǎng)的話,很難把它存下來(lái),不可能將序列中任何長(zhǎng)度的序列都存下來(lái),這是一個(gè)指數(shù)級(jí)的復(fù)雜度
- 所以對(duì)于任意長(zhǎng)度的序列,N 元語(yǔ)法所掃描的子序列長(zhǎng)度是固定的:比如說(shuō)對(duì)于二元語(yǔ)法來(lái)說(shuō),每次只看長(zhǎng)為 2 的子序列,首先將長(zhǎng)度為 2 的任何一個(gè)詞 n(x1,x2)(都來(lái)自序列中,假設(shè)整個(gè)字典中有 1000 個(gè)詞,則長(zhǎng)為 2 的詞有 1000*1000=1000,000 種可能性)存下來(lái),然后將每一個(gè)詞和另外一個(gè)詞組成的詞在文本中出現(xiàn)的概率 n(x1,x2) 全部存起來(lái),再把一個(gè)詞 n(x1) 出現(xiàn)的概率存起來(lái),最后把 n?。ㄒ簿褪牵保埃埃埃┐嫫饋?lái)
- 查詢一個(gè)任意長(zhǎng)度的序列的時(shí)間復(fù)雜度為 o(T),T 是序列長(zhǎng)度
- N 元語(yǔ)法和?。巍∈且粋€(gè)指數(shù)關(guān)系,隨著?。巍〉脑龃?,需要存的東西就會(huì)變得很大,所以一元語(yǔ)法使用的不多(一元語(yǔ)法完全忽略掉了時(shí)序信息),二元語(yǔ)法、三元語(yǔ)法使用的比較多
- 使用馬爾科夫假設(shè)的?。巍≡Z(yǔ)法的好處:如果將詞存起來(lái),就可以使得計(jì)算復(fù)雜度變成?。铮ǎ裕┒皇恰。铮ǎ危?,o(T) 很重要,因?yàn)檎Z(yǔ)料庫(kù)通常會(huì)很大,判斷一個(gè)句子的概率的情況下,每秒鐘可能需要做一百萬(wàn)次左右,在語(yǔ)音識(shí)別或者是輸入法補(bǔ)全的時(shí)候需要進(jìn)行實(shí)時(shí)的計(jì)算,因此計(jì)算復(fù)雜度非常關(guān)鍵,對(duì)于?。巍≡Z(yǔ)法來(lái)講,N 越大,精度越高,但是隨著?。巍〉脑龃?,空間復(fù)雜度也會(huì)增大,即使是這樣,二元語(yǔ)法、三元語(yǔ)法也是非常常見(jiàn)的模型
自然語(yǔ)言統(tǒng)計(jì)
停用詞(stop?。鳎铮颍洌螅?/strong>
- 停用詞是指在信息檢索中,為節(jié)省存儲(chǔ)空間和提高搜索效率,在處理自然語(yǔ)言數(shù)據(jù)(或文本)之前或之后會(huì)自動(dòng)過(guò)濾掉某些字或詞
讀取長(zhǎng)序列數(shù)據(jù)
- 序列數(shù)據(jù)本質(zhì)上是連續(xù)的,因此當(dāng)序列變得太長(zhǎng)而不能被模型一次性全部處理時(shí),就希望對(duì)序列進(jìn)行拆分以方便模型的讀取
總體策略
假設(shè)使用神經(jīng)網(wǎng)絡(luò)來(lái)訓(xùn)練語(yǔ)言模型,模型中的網(wǎng)絡(luò)一次處理具有預(yù)定義長(zhǎng)度(例如?。睢€(gè)時(shí)間步)的一個(gè)小批量序列
如何隨機(jī)生成一個(gè)小批量數(shù)據(jù)的特征和標(biāo)簽以供讀???
1、文本序列可以是任意長(zhǎng)的,因此任意長(zhǎng)的序列可以被劃分為具有相同時(shí)間步數(shù)的子序列
2、訓(xùn)練神經(jīng)網(wǎng)絡(luò)時(shí),將這些具有相同步數(shù)的小批量子序列輸入到模型中
- 假設(shè)神經(jīng)網(wǎng)絡(luò)一次處理具有?。睢€(gè)時(shí)間步的子序列

- 上圖展示了從原始文本序列中獲得子序列的所有不同的方式,其中?。睢〉扔凇。怠。⑶颐總€(gè)時(shí)間步的詞元對(duì)應(yīng)于一個(gè)字符
3、由于可以選擇任意偏移量來(lái)指示初始位置,因此具有相當(dāng)大的自由度
- 如果只選擇一個(gè)偏移量,那么用于訓(xùn)練網(wǎng)絡(luò)的、所有可能的子序列的覆蓋范圍將是有限的。因此可以從隨機(jī)偏移量開(kāi)始劃分序列,來(lái)同時(shí)獲得覆蓋性(coverage)和隨機(jī)性(randomness)
隨機(jī)采樣(random?。螅幔恚穑欤椋睿纾?/strong>
- 隨機(jī)采樣中,每個(gè)樣本都是在原始的長(zhǎng)序列上任意捕獲的子序列
- 在迭代過(guò)程中,來(lái)自兩個(gè)相鄰的、隨機(jī)的、小批量中的子序列不一定在原始序列上相鄰
- 語(yǔ)言建模的目標(biāo)是基于當(dāng)前所看到的詞元預(yù)測(cè)下一個(gè)詞元,因此標(biāo)簽是移位了一個(gè)詞元的原始序列
順序分區(qū)(sequential partitioning)
- 順序分區(qū):迭代過(guò)程中,除了對(duì)原始序列可以隨機(jī)抽樣外,還可以保證兩個(gè)相鄰的小批量中的子序列在原始序列上也是相鄰的,這種策略在基于小批量的迭代過(guò)程中保留了拆分的子序列的順序
總結(jié)
1、語(yǔ)言模型是自然語(yǔ)言處理的關(guān)鍵,語(yǔ)言模型其實(shí)就是估計(jì)文本序列的聯(lián)合概率,也是?。危蹋小☆I(lǐng)域最常見(jiàn)的應(yīng)用
2、使用統(tǒng)計(jì)方法時(shí)通常采用 n元語(yǔ)法,每次看一個(gè)長(zhǎng)為 n 的子序列來(lái)進(jìn)行計(jì)數(shù),對(duì)于給定的長(zhǎng)序列拆分成很多個(gè)連續(xù)的長(zhǎng)度為?。巍〉淖有蛄?,就能夠計(jì)算文本序列的聯(lián)合概率了。n元語(yǔ)法通過(guò)截?cái)嘞嚓P(guān)性,為處理長(zhǎng)序列提供了一種實(shí)用的模型(長(zhǎng)序列的問(wèn)題在于它們很少出現(xiàn)或者從不出現(xiàn))
3、齊普夫定律(Zipf's?。欤幔鳎?/strong>支配著單詞的分布,這個(gè)分布不僅適用于一元語(yǔ)法,還適用于其他?。睢≡Z(yǔ)法


- 想要通過(guò)計(jì)數(shù)統(tǒng)計(jì)和平滑來(lái)建模單詞是不可行的,因?yàn)檫@樣建模會(huì)大大高估尾部單詞(即不常用的單詞)的頻率
4、通過(guò)拉普拉斯平滑法可以有效地處理結(jié)構(gòu)豐富而頻率不足的低頻詞詞組
5、讀取長(zhǎng)序列的主要方式是隨機(jī)采樣和順序分區(qū)。在迭代過(guò)程中,后者可以保證來(lái)自兩個(gè)相鄰的小批量中的子序列在原始序列上也是相鄰的
Q&A
- 1、在文本預(yù)處理中,所構(gòu)建的詞匯表把文本映射成數(shù)字,文本數(shù)據(jù)量越大,映射的數(shù)字也就越大,這些數(shù)字還需要做預(yù)處理嗎?例如歸一化處理等。是否對(duì)模型有影響??QA P3 - 00:00?
- 2、連續(xù)單詞對(duì)是指有固定先后順序的還是任何順序都可行呢??QA P3 - 00:41?
- 3、n 元語(yǔ)法,n 的增長(zhǎng)對(duì)空間的增長(zhǎng)是指數(shù)級(jí)的。但如果不存 count 為 0 的詞的組合的話,空間復(fù)雜度還是 n 吧?也就是把一篇文章從頭到尾掃一次就行吧,相當(dāng)于一個(gè) n 的sliding window?QA P3 - 01:33?
- 4、過(guò)濾低頻次是不是叫長(zhǎng)尾效應(yīng)??QA P3 - 02:54?
- 5、中文分詞的好壞對(duì)結(jié)果有影響,ngram 的思維能否用在中文字的維度,而不用分詞??QA P3 - 04:06?
- 6、o(T),T 指的是什么??QA P3 - 04:43?
- 7、請(qǐng)問(wèn) n-gram 怎么在廣告中當(dāng)特征??QA P3 - 04:54?
- 8、語(yǔ)言 sequence sample ( token 是 word )的時(shí)間跨度 T 大概設(shè)成多少比較好?如果是中文的話一般又是多少??QA P3 - 07:30?
----end----
其他參考
1、《動(dòng)手學(xué)深度學(xué)習(xí)》,課程安排,https://courses.d2l.ai/zh-v2/assets/pdfs/part-3_2.pdf
2、《動(dòng)手學(xué)深度學(xué)習(xí)》,https://zh-v2.d2l.ai/chapter_recurrent-neural-networks/language-models-and-dataset.html