文本預(yù)處理
文本是一類序列數(shù)據(jù),一篇文章可以看作是字符或單詞的序列壶硅,本節(jié)將介紹文本數(shù)據(jù)的常見預(yù)處理步驟威兜,預(yù)處理通常包括四個步驟:
讀入文本
分詞
建立字典,將每個詞映射到一個唯一的索引(index)
將文本從詞的序列轉(zhuǎn)換為索引的序列庐椒,方便輸入模型
語言模型
一段自然語言文本可以看作是一個離散時間序列椒舵,給定一個長度為 TT 的詞的序列 w1,w2,…,wTw1,w2,…,wT ,語言模型的目標(biāo)就是評估該序列是否合理扼睬,即計算該序列的概率:
P(w1,w2,…,wT).
P(w1,w2,…,wT).
本節(jié)我們介紹基于統(tǒng)計的語言模型逮栅,主要是 nn 元語法( nn -gram)悴势。在后續(xù)內(nèi)容中窗宇,我們將會介紹基于神經(jīng)網(wǎng)絡(luò)的語言模型。
語言模型
假設(shè)序列 w1,w2,…,wTw1,w2,…,wT 中的每個詞是依次生成的特纤,我們有
P(w1,w2,…,wT)=∏t=1TP(wt∣w1,…,wt?1)=P(w1)P(w2∣w1)?P(wT∣w1w2?wT?1)
P(w1,w2,…,wT)=∏t=1TP(wt∣w1,…,wt?1)=P(w1)P(w2∣w1)?P(wT∣w1w2?wT?1)
例如军俊,一段含有4個詞的文本序列的概率
P(w1,w2,w3,w4)=P(w1)P(w2∣w1)P(w3∣w1,w2)P(w4∣w1,w2,w3).
P(w1,w2,w3,w4)=P(w1)P(w2∣w1)P(w3∣w1,w2)P(w4∣w1,w2,w3).
語言模型的參數(shù)就是詞的概率以及給定前幾個詞情況下的條件概率。設(shè)訓(xùn)練數(shù)據(jù)集為一個大型文本語料庫捧存,如維基百科的所有條目粪躬,詞的概率可以通過該詞在訓(xùn)練數(shù)據(jù)集中的相對詞頻來計算,例如昔穴, w1w1 的概率可以計算為:
P^(w1)=n(w1)n
P^(w1)=n(w1)n
其中 n(w1)n(w1) 為語料庫中以 w1w1 作為第一個詞的文本的數(shù)量镰官, nn 為語料庫中文本的總數(shù)量。
類似的吗货,給定 w1w1 情況下泳唠, w2w2 的條件概率可以計算為:
P^(w2∣w1)=n(w1,w2)n(w1)
P^(w2∣w1)=n(w1,w2)n(w1)
其中 n(w1,w2)n(w1,w2) 為語料庫中以 w1w1 作為第一個詞, w2w2 作為第二個詞的文本的數(shù)量宙搬。
n元語法
序列長度增加笨腥,計算和存儲多個詞共同出現(xiàn)的概率的復(fù)雜度會呈指數(shù)級增加。 nn 元語法通過馬爾可夫假設(shè)簡化模型勇垛,馬爾科夫假設(shè)是指一個詞的出現(xiàn)只與前面 nn 個詞相關(guān)脖母,即 nn 階馬爾可夫鏈(Markov chain of order nn ),如果 n=1n=1 闲孤,那么有 P(w3∣w1,w2)=P(w3∣w2)P(w3∣w1,w2)=P(w3∣w2) 谆级。基于 n?1n?1 階馬爾可夫鏈,我們可以將語言模型改寫為
P(w1,w2,…,wT)=∏t=1TP(wt∣wt?(n?1),…,wt?1).
P(w1,w2,…,wT)=∏t=1TP(wt∣wt?(n?1),…,wt?1).
以上也叫 nn 元語法( nn -grams)哨苛,它是基于 n?1n?1 階馬爾可夫鏈的概率語言模型鸽凶。例如,當(dāng) n=2n=2 時建峭,含有4個詞的文本序列的概率就可以改寫為:
P(w1,w2,w3,w4)=P(w1)P(w2∣w1)P(w3∣w1,w2)P(w4∣w1,w2,w3)=P(w1)P(w2∣w1)P(w3∣w2)P(w4∣w3)
P(w1,w2,w3,w4)=P(w1)P(w2∣w1)P(w3∣w1,w2)P(w4∣w1,w2,w3)=P(w1)P(w2∣w1)P(w3∣w2)P(w4∣w3)
當(dāng) nn 分別為1玻侥、2和3時,我們將其分別稱作一元語法(unigram)亿蒸、二元語法(bigram)和三元語法(trigram)凑兰。例如,長度為4的序列 w1,w2,w3,w4w1,w2,w3,w4 在一元語法边锁、二元語法和三元語法中的概率分別為
P(w1,w2,w3,w4)P(w1,w2,w3,w4)P(w1,w2,w3,w4)=P(w1)P(w2)P(w3)P(w4),=P(w1)P(w2∣w1)P(w3∣w2)P(w4∣w3),=P(w1)P(w2∣w1)P(w3∣w1,w2)P(w4∣w2,w3).
P(w1,w2,w3,w4)=P(w1)P(w2)P(w3)P(w4),P(w1,w2,w3,w4)=P(w1)P(w2∣w1)P(w3∣w2)P(w4∣w3),P(w1,w2,w3,w4)=P(w1)P(w2∣w1)P(w3∣w1,w2)P(w4∣w2,w3).
當(dāng) nn 較小時姑食, nn 元語法往往并不準(zhǔn)確。例如茅坛,在一元語法中音半,由三個詞組成的句子“你走先”和“你先走”的概率是一樣的。然而贡蓖,當(dāng) nn 較大時曹鸠, nn 元語法需要計算并存儲大量的詞頻和多詞相鄰頻率。
思考: nn 元語法可能有哪些缺陷斥铺?
參數(shù)空間過大
數(shù)據(jù)稀疏
循環(huán)神經(jīng)網(wǎng)絡(luò)
本節(jié)介紹循環(huán)神經(jīng)網(wǎng)絡(luò)彻桃,下圖展示了如何基于循環(huán)神經(jīng)網(wǎng)絡(luò)實現(xiàn)語言模型。我們的目的是基于當(dāng)前的輸入與過去的輸入序列晾蜘,預(yù)測序列的下一個字符邻眷。循環(huán)神經(jīng)網(wǎng)絡(luò)引入一個隱藏變量 HH ,用 HtHt 表示 HH 在時間步 tt 的值剔交。 HtHt 的計算基于 XtXt 和 Ht?1Ht?1 肆饶,可以認(rèn)為 HtHt 記錄了到當(dāng)前字符為止的序列信息,利用 HtHt 對序列的下一個字符進(jìn)行預(yù)測岖常。 Image Name
循環(huán)神經(jīng)網(wǎng)絡(luò)的構(gòu)造
我們先看循環(huán)神經(jīng)網(wǎng)絡(luò)的具體構(gòu)造驯镊。假設(shè) Xt∈Rn×dXt∈Rn×d 是時間步 tt 的小批量輸入, Ht∈Rn×hHt∈Rn×h 是該時間步的隱藏變量腥椒,則:
Ht=?(XtWxh+Ht?1Whh+bh).
Ht=?(XtWxh+Ht?1Whh+bh).
其中阿宅, Wxh∈Rd×hWxh∈Rd×h , Whh∈Rh×hWhh∈Rh×h 笼蛛, bh∈R1×hbh∈R1×h 洒放, ?? 函數(shù)是非線性激活函數(shù)。由于引入了 Ht?1WhhHt?1Whh 滨砍, HtHt 能夠捕捉截至當(dāng)前時間步的序列的歷史信息往湿,就像是神經(jīng)網(wǎng)絡(luò)當(dāng)前時間步的狀態(tài)或記憶一樣妖异。由于 HtHt 的計算基于 Ht?1Ht?1 ,上式的計算是循環(huán)的领追,使用循環(huán)計算的網(wǎng)絡(luò)即循環(huán)神經(jīng)網(wǎng)絡(luò)(recurrent neural network)他膳。
在時間步 tt ,輸出層的輸出為:
Ot=HtWhq+bq.
Ot=HtWhq+bq.
其中 Whq∈Rh×qWhq∈Rh×q 绒窑, bq∈R1×qbq∈R1×q 棕孙。