徐昊,易綿竹
(1.信息工程大學洛陽校區(qū)研究生四大隊,洛陽471000;2.信息工程大學洛陽校區(qū)基礎(chǔ)系,洛陽471000)
語言模型是基本的自然語言處理問題之一,語言模型能夠估計某一詞序列為自然語言的概率,也就是在假設(shè)所有可能的詞語排序組合出現(xiàn)的概率為1 的情況下,預(yù)測每個組合,也就是句子,出現(xiàn)的概率。對于一個好的語言模型,正確句子出現(xiàn)的概率應(yīng)當相對較高,而錯誤的、不合語法的句子,出現(xiàn)概率則相對較低,甚至接近于零。在實際應(yīng)用中,許多場合都可以依靠語言模型處理問題。如在語音識別中排除錯誤的同音詞:P(I saw a van)>P(eyes awe of an);在機器翻譯中,選擇較為合理的句子:P(high winds tonight)>p(large winds tonight);或是在輸入法中,得到用戶更需要的輸出:P(你現(xiàn)在干什么|nixianzaiganshenme)>P(你西安在干什么|nixianzaigaanshenme)。
語言模型可以通過以下方式形式化。如果我們以S 代表句子,V={w1,w2,w3,…,wn}代表語言的單詞集合,句子S 就是一個單詞序列:S=(w1,w2,w3,…,wm),m 為句子長度。那么,一個句子的出現(xiàn)概率可以表示為:
P(wm|w1,w2,w3,…,wm-1)即表示在已知前m-1 個單詞的情況下,第m 個單詞為wm的概率。因此,只要把句子中每個單詞的條件概率相乘,即可計算出這一句子的出現(xiàn)概率。但是,由于任何一門自然語言的詞匯量都非常大,組合的序列更是數(shù)不勝數(shù)。對于詞匯量為V 的語言,任意序列中第m 個詞出現(xiàn)的概率P(wm|w1,w2,w3,…,wm-1)共有Vm種,要保存這么多的參數(shù)目前的無法實現(xiàn)的。為了解決參數(shù)過多帶來的問題,自然語言方向的研究者們提出了多種使用不同技術(shù)實現(xiàn)的語言模型。
N-Gram 模型采用Markov 假設(shè)[2],認為語言模型中每個詞的出現(xiàn)概率只與其前面n-1 個詞有關(guān)。按照公式(1),可將N-Gram 模型形式化表示如下:
上述公式中的n 即為N-Gram 模型的階數(shù),不難看出,模型的復(fù)雜性和精度都與階數(shù)呈正相關(guān)。選取合適的n 值建立N-Gram 模型的要點,一般情況下NGram 模型的階數(shù)在1 到7 之間。
N-Gram 模型利用到了自然語言中的局部約束性質(zhì)來描述自然語言,但當語言中存在遠程約束時,NGram 模型便無法表現(xiàn)出來。并且,N-Gram 模型受稀疏數(shù)據(jù)影響大,對未在訓(xùn)練集中出現(xiàn)的詞,會得到概率為0 的情況,這顯然是不合理的。為此,針對N-Gram模型進行平滑處理就十分有必要,如Good-Turing 法、Kaze 回退法等。
N-Gram 模型雖然結(jié)構(gòu)簡單,同時考慮了上下文的影響,但在實際的自然語言中,上下文信息并不是都對預(yù)測有益的,N-Gram 對n 以內(nèi)的上文信息一視同仁并不嚴謹,并且將上文的范圍限制在n 以內(nèi)也是折中之舉。因此,需要找到一種方法,能夠從上下文中分辨與預(yù)測相關(guān)的詞,并且不受其與預(yù)測對象距離的限制。
決策樹模型是樹結(jié)構(gòu)模型,其非葉子節(jié)點包含問題和訓(xùn)練子集兩部分,每個非葉子節(jié)點根據(jù)對問題的n個回答產(chǎn)生n 個子節(jié)點。葉子節(jié)點由訓(xùn)練子集和從該訓(xùn)練子集學習得來的條件概率組成。在有合適的問題集合的情況下,決策樹模型通過降低條件熵的方法,遞歸的生成決策樹,產(chǎn)生合適的問題序列。決策樹模型能夠選出與預(yù)測變量有關(guān)的上下文,并且不受距離的限制。
然而,如何選擇合適的問題集合是一個難題,在簡單模型的情況下,決策樹性能較好,問題集合的設(shè)置也比較簡單。但在自然語言處理的背景下,往往需要生成較為復(fù)雜的模型,問題集合的設(shè)置需要較高的專業(yè)知識水平,同時隨著決策樹高度的增加,越接近葉子節(jié)點,訓(xùn)練子集的規(guī)模會越分越小,對參數(shù)的估計也會受到影響。這被稱為數(shù)據(jù)的碎片化問題。
熵的概念最早由香農(nóng)從熱力學領(lǐng)域引入到信息論中,熵是不確定度的度量,當一個隨機變量均勻分布時,熵的值最大;反之,若是變量的值可以完全確定,熵的值為0.。通過熵來預(yù)測變量的思想由Jaynes 提出[4],最大熵模型認為,在已知部分變量的情況下,對未知變量的最合理推斷,應(yīng)當選擇最不確定即熵值最大的推斷。其原理在于,其他推斷的確定度較高,意味著是添加了我們已掌握信息以外的約束或假設(shè)才得出的,這必然是不符合邏輯的,而最隨機的推斷才是惟一不偏不倚的選擇[5]。
最大熵語言模型的建立,首先要建立對概率分布的約束,即設(shè)定特征函數(shù),形如:
其中x,y 可以是諸如上下文或詞與詞性等,若有k個特征,則1 ≤j ≤k。之后通過給定的訓(xùn)練語料,可以得到特征fj的期望值:
在滿足特征的約束的條件下,就是指在概率分布的特征期望值應(yīng)與式(4)得到的樣本期望值一致的情況下,選擇能使熵H(p)的值最大的概率分布:
最大熵模型在整個訓(xùn)練語料上展開,不會遇到NGram 與決策樹模型的數(shù)據(jù)碎片化問題,特征的選擇也較為靈活,可以使用各種類型的特征,如上下文與預(yù)測變量的關(guān)系、語義關(guān)系等。最大熵模型不依賴獨立性假設(shè),可以通過特征選擇進行參數(shù)平滑,而不需要專門適配常規(guī)平滑算法。
傳統(tǒng)的語言模型使用數(shù)學的方法描述自然語言的,但只利用到了單詞間的統(tǒng)計關(guān)系,對詞語間的語義關(guān)系利用很少。雖然也有基于語言知識的統(tǒng)計模型,如概率上下文無關(guān)文法,但這需要研究人員人為地加入語言相關(guān)的知識,無法通過機器自動的從數(shù)據(jù)中提取知識信息,而且知識的準確度隨研究者個人的專業(yè)水平而異,可靠性存疑。
近年來,隨著深度神經(jīng)網(wǎng)絡(luò)學習的興起,使用神經(jīng)網(wǎng)絡(luò)處理自然語言問題開始成為熱門研究。2000 年,后任職于百度深度學習研究院的徐偉提出使用神經(jīng)網(wǎng)絡(luò)學習語言模型的想法[6]。之后Bengio 等人在2003 年發(fā)表使用神經(jīng)網(wǎng)絡(luò)估計N-Gram 模型的概率分布的研究[7],被稱作神經(jīng)概率語言模型。神經(jīng)概率語言模型通過詞向量體現(xiàn)了詞語之間的相似性,彌補了傳統(tǒng)的NGram 模型的缺陷,在Associated Press News 數(shù)據(jù)集上,取得比Kneser-Ney 平滑的N-Gram 模型明顯更高的性能,并在神經(jīng)網(wǎng)絡(luò)模型中引入了詞向量的概念。
Bengio 的神經(jīng)網(wǎng)絡(luò)語言模型使用一般的前饋神經(jīng)網(wǎng)絡(luò)模型結(jié)構(gòu),在輸入上仍受到如N-Gram 模型一樣,上下文長度固定的限制,對遠距離歷史信息的建模能力差。2010 年,Mikolov 等利用帶有有向環(huán)的特殊結(jié)構(gòu)神經(jīng)網(wǎng)絡(luò),即循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network,RNN),訓(xùn)練語言模型[8]。RNN 源自1982 年Sathasivam提出的霍普菲爾德網(wǎng)絡(luò)[9]。在每一時刻t,RNN 會結(jié)合當前模型狀態(tài)給出一個輸出ht,并將這一輸出作為下一時刻的輸入,網(wǎng)絡(luò)當前狀態(tài)由上一時刻輸出ht-1和當前輸入xt共同決定。因此,RNN 模型帶有記憶性,可以刻畫一個序列當前的輸出與過去信息的關(guān)系。由于RNN 模型結(jié)構(gòu)包含有循環(huán)邊,因此被稱作循環(huán)神經(jīng)網(wǎng)絡(luò)或遞歸神經(jīng)網(wǎng)絡(luò)。如圖1 所示。
圖1 循環(huán)神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)示意圖
基本的RNN 結(jié)構(gòu)主要由輸入層(Input Layer)、隱藏層(Hidden Layer)、輸出層(Output Layer)三部分組成,每個時刻t,輸入層節(jié)點為輸入向量xt,向量x 是輸入詞的One-hot 編碼,向量維度與詞匯表大小相同。隱藏層節(jié)點為非線性激活函數(shù),接收輸入向量xt與上個時刻的網(wǎng)絡(luò)狀態(tài)ht-1,輸出向量ht并將其作為下一時刻輸出的參考。
圖2 循環(huán)神經(jīng)網(wǎng)絡(luò)按時間展開后的結(jié)構(gòu)
如圖2 所示,RNN 結(jié)構(gòu)按時間在長度N 的序列上展開后,可看作一個前饋神經(jīng)網(wǎng)絡(luò),并可通過反向傳播算法進行訓(xùn)練。這是循環(huán)神經(jīng)網(wǎng)絡(luò)常用的訓(xùn)練方法:沿時間反向傳播(Back-Propagation Through Time)。然而實際實驗表明,RNN 訓(xùn)練中存在消失梯度問題,時間上相隔過遠的輸入即使發(fā)生較大變化,產(chǎn)生的影響也很難被梯度檢測到,這使得基于梯度的反向傳播算法訓(xùn)練出的RNN 語言模型對較長距離信息的學習效果不好。根據(jù)Bengio 等人的研究,RNN 語言模型的性能約等于n 為8 到9 的前饋神經(jīng)網(wǎng)絡(luò)模型[10]。
循環(huán)神經(jīng)網(wǎng)絡(luò)有助于解決與時間序列有關(guān)的問題,能夠更好地利用傳統(tǒng)全連接神經(jīng)網(wǎng)絡(luò)不能建模的信息,但是它也存在長期依賴問題(Long-Term Dependencies)。在自然語言處理中,往往會遇到復(fù)雜的上下文場景,例如在模擬“天空是…色”的句子時,一般情況下“藍色”的上文會是“天空”,但如果在更早的上文中存在“空氣污染嚴重”等類似的信息時,“天空”的下文就可能是“灰色”。簡單的循環(huán)神經(jīng)網(wǎng)絡(luò)對這種遠距離信息的建模能力較差,而且在更復(fù)雜的場景中,有用信息與預(yù)測變量的距離有遠有近,普通循環(huán)神經(jīng)網(wǎng)絡(luò)的性能無法處理。準確地說,RNN 模型在訓(xùn)練過程中總是傾向于按照序列結(jié)尾處的權(quán)值的正確方向進行更新[11]。為此,Schmidhuber 等在1997 年提出一種具有特殊結(jié)構(gòu)的循環(huán)神經(jīng)網(wǎng)絡(luò)——長短時記憶網(wǎng)絡(luò)[12](Long Short-Term Memory,LSTM),LSTM 能夠記住有意義的長時記憶,也能遺忘那些司空見慣的時刻。
LSTM 與標準RNN 的結(jié)構(gòu)差異在于,常用的改進型LSTM 結(jié)構(gòu)用一個具有“三門”結(jié)構(gòu)的網(wǎng)絡(luò)替換了RNN 中的單一tanh 循環(huán)體。如圖3 所示。
圖3 LSTM單元結(jié)構(gòu)示意圖
LSTM 中的“門”結(jié)構(gòu)主要包含一個sigmoid 神經(jīng)網(wǎng)絡(luò),sigmoid 激活函數(shù)因為值域為[0,1],所以用來描述有多少信息量能夠被“門”結(jié)構(gòu)“保留”或“遺忘”?!斑z忘門”根據(jù)當前輸入xt和上一時刻的輸出ht-1與狀態(tài)ct-1訓(xùn)練權(quán)重參數(shù)W,學習哪一些信息應(yīng)當被“忘記”,例如當模型先學習到“天空是藍色”后,又收到“空氣被污染”的信息,就應(yīng)當忘記“藍天”的狀態(tài):
“輸入門”則根據(jù)當前輸入xt和上一時刻輸出ht-1學習哪些信息應(yīng)當被寫入新狀態(tài),例如“空氣被污染”就是值得被寫入的新狀態(tài)ct:
計算出當前狀態(tài)后,“輸出門”會根據(jù)當前狀態(tài)ct和輸入xt,上一時刻的輸出ht-1來得到當前時刻的輸出ht,例如在當前狀態(tài)被更新為“空氣被污染”后,對于輸入“天空是…”的最大概率預(yù)測可能是“灰色”:
上述公式(6)-公式(10)組成LSTM 的前向傳播過程,通過訓(xùn)練生成參數(shù)矩陣W,LSTM 能夠?qū)哂袕?fù)雜上下文場景的序列預(yù)測問題,表現(xiàn)出比標準循環(huán)神經(jīng)網(wǎng)絡(luò)更優(yōu)異的性能。不過,近期有研究報告指出,LSTM 結(jié)構(gòu)存在功能重復(fù)的問題,“三門”結(jié)構(gòu)中“遺忘門”起到了較重要的作用,因此出現(xiàn)了LSTM 的變體——門控循環(huán)單元(Gated Recurrent Unit,GRU),使用“重置門”和“更新門”替代了LSTM 的“三門”結(jié)構(gòu)。一般實驗證明,GRU 參數(shù)更少收斂更快,但在數(shù)據(jù)集很大的情況下,LSTM 的表達性能更好。
上文介紹了目前在自然語言處理領(lǐng)域常用的神經(jīng)網(wǎng)絡(luò)模型,對于語言模型生成問題,為了達到更好的效果,無論使用哪種網(wǎng)絡(luò)都會改變其結(jié)構(gòu),主要是在網(wǎng)絡(luò)的兩端加入詞向量層(embedding)和Softmax 層。如圖4 所示。
圖4 循環(huán)神經(jīng)網(wǎng)絡(luò)實現(xiàn)語言模型
詞向量層,或稱嵌入層,功能是將單詞轉(zhuǎn)換為詞向量。自然語言處理中,要使機器自動處理與學習自然語言,就需要把自然語言的符號數(shù)字化,將詞匯表“嵌入”一個固定維度的實數(shù)空間,就是詞的向量化表示。在過去常用的方法是one-hot 表示法,這種表示法產(chǎn)生的向量維度等于詞匯表的長度,每個向量只有一個維度的值為1,其余為0,N-Gram 語言模型就使用這種表示法。One-hot 表示法無法體現(xiàn)兩個詞之間的依賴關(guān)系,并且向量過于稀疏,將導(dǎo)致維數(shù)災(zāi)難問題。
神經(jīng)網(wǎng)絡(luò)語言模型中的詞向量層能夠?qū)⑾∈璧南蛄哭D(zhuǎn)換為稠密的向量,被稱為分布式表示法(Distributed Representation)[13]。這種稠密向量比一般的編號型向量包含更多的信息,通常會賦予語義相近的詞以取值相近的向量,從而使上層的循環(huán)神經(jīng)網(wǎng)絡(luò)更好的學習詞語間的關(guān)聯(lián)性。另外還能降低輸入的維度,onehot 表示法的向量維度通常在10000 左右,而分布式的詞向量維度通常在200-1000 之間,大大減少了模型的參數(shù)量與計算量。依賴于連續(xù)詞袋模型和Skip-Gram模型[14],神經(jīng)網(wǎng)絡(luò)語言模型中,往往通過添加詞向量層來完成嵌入過程。
添加詞向量層進行降維的方式可以看作添加一個簡單的全連接網(wǎng)絡(luò),通過此全連接層的權(quán)重矩陣計算來降低維度。如圖5 所示。
圖5 詞向量層
這一技術(shù)被稱為“word2Vec”,由谷歌公司的Mikolov 等人于2013 年提出[15],詞向量層的輸入層是onehot 向量,隱藏層的激活函數(shù)是f(x)=x,輸出層為Softmax 層。Word2Vec 認為擁有相似上下文的詞的詞義是相近的,例如“貓”和“狗”都經(jīng)常出現(xiàn)在“獸醫(yī)”的上下文中。Word2Vec 有兩種模型:連續(xù)詞袋模型(Continuous Bag-of-WordsModel,CBOW)和Skip-Gram 模型,CBOW 將一個詞的上下文的詞作為輸入,要計算向量的詞本身作為輸出,旨在訓(xùn)練模型通過上下文猜出大致的詞義;Skip-Gram 模型的輸入和輸出則相反,即通過給出的詞預(yù)測可能出現(xiàn)的上下文。模型訓(xùn)練完成后,從輸入到隱藏層的權(quán)重矩陣就包含了詞匯表中所有詞的分布式向量。對于一個特定詞,通過將其onehot 向量與權(quán)重矩陣進行相乘運算即可得到它的分布式詞向量。
實驗表明,CBOW 模型訓(xùn)練出的詞向量對語法測試更準確,Skip-Gram 模型則在語義測試中準確性更高。
人在閱讀時如果遇到生僻詞,仍可能根據(jù)上下文猜測其詞義,Word2Vec 對分布式詞向量的生成過程,可以說是對這種人類行為的模仿。
Softmax 層是使用Softmax 函數(shù)作為激活函數(shù)的網(wǎng)絡(luò)層,經(jīng)常作為神經(jīng)網(wǎng)絡(luò)的最后一層作為輸出層。Softmax 函數(shù),或稱歸一化指數(shù)函數(shù),可將多個標量映射為一個概率分布,其值域為(0,1),公式如下:
在神經(jīng)網(wǎng)絡(luò)語言模型中,Softmax 層將網(wǎng)絡(luò)的輸出轉(zhuǎn)化為詞匯表中每個單詞的輸出概率。在Softmax 之前還要先進行一次線性映射,將RNN 隱藏狀態(tài)維度的輸出映射到一個和詞匯表大小相同的向量,從而才能在這個向量的維度上進行Softmax。
相比隱藏層,詞向量層和Softmax 層的參數(shù)數(shù)量通常很大,與詞匯表的大小成正比,在整個網(wǎng)絡(luò)的總參數(shù)數(shù)量中占了較大比例。有研究指出[16],可以共享詞向量層和Softmax 層的參數(shù),這樣不僅能大幅減少參數(shù)訓(xùn)練量,還能提高模型最終效果。
神經(jīng)言模型通常使用困惑度(perplexity)的計算作為損失函數(shù),在訓(xùn)練中通過梯度下降法使困惑度逐步降低。
困惑度刻畫的是語言模型對樣本的預(yù)測能力,其實際是計算每一個單詞得到的概率倒數(shù)的幾何平均,可以理解成模型預(yù)測下一個詞時的平均可選擇數(shù)量。在語言模型的訓(xùn)練中,通常采用困惑度的對數(shù)表達形式,使乘積求平方根計算轉(zhuǎn)換成加法計算,達到加速計算的效果。
不同語言模型之間的性能比較,需要建立在相同數(shù)據(jù)集,相同詞典的基礎(chǔ)上。本文使用公開英語文本數(shù)據(jù)集PTB(Penn Treebank Dataset),取其中詞頻前9998 的詞作為詞典,并對數(shù)據(jù)集中不在詞典中的詞,使用<unk>進行替換。再加上句子分隔標簽<eos>,得到總次數(shù)為10000 的詞典。使用PTB 數(shù)據(jù)集中設(shè)定好的訓(xùn)練集與測試集。
使用N-Gram 方法對以上語料進行語言模型建模,分別建立3-gram 和5-gram 模型。3-gram 模型在測試集上的困惑度為186.7,5-gram 的困惑度為167.7。
使用LSTM 網(wǎng)絡(luò)的神經(jīng)語言模型性能優(yōu)異,一個隱藏層規(guī)模為300 的LSTM,經(jīng)過6600 次迭代訓(xùn)練,可將測試集上的模型困惑度從10000 左右減少到88。
語言模型應(yīng)用廣泛,語音識別、機器翻譯、詞性標注等自然語言領(lǐng)域的問題,都可依靠語言模型的研究解決。近年來隨著深度學習的興起,語音模型的訓(xùn)練方法從傳統(tǒng)的統(tǒng)計學習方法轉(zhuǎn)向了神經(jīng)網(wǎng)絡(luò)學習,自2010 年起,基于循環(huán)神經(jīng)網(wǎng)絡(luò)的語言模型在很多自然語言處理問題上超越了傳統(tǒng)的統(tǒng)計模型,并在學術(shù)界和工業(yè)界都得到廣泛應(yīng)用。廣為人知的谷歌翻譯系統(tǒng)使用的seq2seq 翻譯模型,其中的解碼器網(wǎng)絡(luò)就是一個以輸入編碼為前提的語言模型(Conditional Language Model)。
神經(jīng)網(wǎng)路語言模型在一定程度上克服了維數(shù)災(zāi)難,至今仍處于不斷發(fā)展完善中,且相關(guān)新技術(shù)層出不窮。使用卷積神經(jīng)網(wǎng)絡(luò)取代循環(huán)神經(jīng)網(wǎng)絡(luò)的模型使訓(xùn)練過程可以并行執(zhí)行、注意力機制的加入使翻譯系統(tǒng)更高效。隨著技術(shù)的進步,想必還會出現(xiàn)性能更優(yōu)異的模型和更快捷的訓(xùn)練方法。相信未來的神經(jīng)網(wǎng)絡(luò)語言模型能使機器“說出”更自然的語言。