第五章 自然語言處理系統的模型與測試

第一節 形形色色的語法與模型

建立一個自然語言處理應用系統主要包括選擇語言模型與系列演算法兩個關鍵問題,而語言模型的發展概括起來可分為基於規則的形式語法,基於統計的概率計算和基於神經網路的特徵提取等三個階段。目前最常用的語言模型有N元模型、馬爾可夫模型以及隱馬爾可夫模型。

基於短語結構語法的形式模型包括語法的Chomsky層級、有限狀態語法、短語結構語法、遞歸轉移網路和擴充轉移網路、自底向上分析和自頂向下分析等;基於複雜特徵集和合一運算的形式模型包括中文信息MMT模型、Kaplan的辭彙功能語法、Martin

Kay的功能合一語法、Gazdar的廣義短語結構語法、Pollard的中心語驅動的短語結構語法等;基於依存和配價的形式模型包括Tesnière的依存語法、配價語法等;基於格語法的形式模型包括Fillmore的格語法等;基於辭彙主義的形式模型包括Gross的辭彙語法、鏈語法、辭彙語義學、知識本體、Pustejovesky的生成詞庫理論等。

語義自動處理的形式模型包括義素分析法、語義場、語義網路、Montague語法、Wilks的優選語義學、Schank的概念依存理論等。語用自動處理的形式模型包括Mann和Thompson的修辭結構理論、文本連貫中的常識推理、言語行為理論和會話智能代理。概率語法包括概率上下文無關語法的基本原理與三個假設、概率辭彙化上下文無關語法等。統計機器翻譯中的形式模型包括雜訊信道模型、最大熵模型、基於平行概率語法的形式模型、基於短語的統計機器翻譯、基於句法的統計機器翻譯、系統功能語法以及數據平滑技術。

說了那麼多模型和語法規則,最簡單也是最正確的選擇方法就是看實際效果,因為實踐是檢驗真理的唯一標準嘛。

第二節 語言模型與數理語言學

語言模型是根據語言客觀事實而進行的抽象數學建模,它與語言客觀事實之間是一種對應關係,是一個單純的、統一的、抽象的形式系統。數理語言學是應用數學的思想和方法來研究語言現象的一門新興學科,主要包括代數語言學、統計語言學、應用數理語言學。

代數語言學的目的在於對客觀的語言現實進行代數描述和分析並建立代數模型,從而把自然語言改造成像數學那樣的演繹系統,其語言模型主要有生成性、分析性、辨識性等三種模型。生成性模型從一個形式語言系統出發,生成語言的某一集合,如喬姆斯基的形式語言理論和轉換語法。分析性模型從語言的某一集合開始,根據對這個集合中各個元素的性質的分析,闡明這些元素之間的關係,並在此基礎上用演繹的方法建立語言的規則系統,如蘇聯數學家庫拉金娜和羅馬尼亞數學家馬爾庫斯用集合論方法提出的語言模型。而把二者結合起來,便產生了具有很大實用價值的辨識性模型。它可以從語言元素的某一集合及規則系統出發,通過有限步驟的運算,確定這些元素是一堆亂七八糟的詞還是語言中合格的句子。如巴爾-希列爾用數理邏輯方法提出的句法類型演算模型。

統計語言學的目的在於建立語言的統計模型,具體有研究語言音素和音位的語音統計學;研究親屬語言分化年代的語言年代學;研究文章風格的風格統計學。近年來,人們開始利用所謂的應用數理語言學來研究機器翻譯、人機對話、信息傳輸存儲等課題,主要研究語言自動分析與生成的方法,目前則更重視語義的形式化研究。數理語言學豐富了語言研究的手段和方法,並為語言學的研究開闢了一個新領域。

第三節 自然語言處理中的傳統語言模型

傳統語言模型的求解是通過規則的分析方法,建立符號處理系統。主要有基於語法規則庫、詞典語料庫等方法,具體實現途徑有形式語言、語法理論、詞法理論、推理方法等。主要都是以喬姆斯基的形式語法為基礎,通過知識庫和推理系統的結合來建立應用NLP系統。

形式語法是有限數量規則的集合,這些規則可以生成語言中的合格句子,並排除語言中的不合格句子。語法的符號用G表示,G所生成的形式語言用L(G)表示,它既可以指自然語言,也可以指用符號構成的其它語言。形式語法把自然語言和各種符號語言放在同一個平面上進行研究,而傳統漢語的計算語言模型,主要就是基於語法分析的短語結構方法。有限狀態語法(正則語法)是一種線性語法,分為左線性語法和右線性語法兩種。對於一部正則語法,我們總能用資訊理論所建議的有限狀態轉移圖來表示。

在喬姆斯基的形式語法中,每一個正則語法都是上下文無關的,每一個上下文無關語法都是上下文有關的,每一個上下文有關語法都是0型的。我們把由0型語法生成的語言叫0型語言,把由上下文有關語法、上下文無關語法、正則語法生成的語言分別叫做上下文有關語言、上下文無關語言、正則語言。任何的正則語法(3型語法),一定包含在上下文無關語法(2型語法)、上下文有關語法(1型語法)、遞歸可枚舉語法(0型語法)中,任何的上下文無關語法,一定包含在上下文有關語法、遞歸可枚舉語法中,任何的上下文有關語法,一定包含在遞歸可枚舉語法中,這就是語法的喬姆斯基層級。

第四節 自然語言處理中的統計模型(一)

統計語言模型的目標是學習語言中單詞序列的聯合概率函數,其最大難點在於維度災難,因此Bengio等人提出可以通過為每一個詞學習一個分散式表徵來解決這一問題。分散式表徵可以讓模型清楚相關指數級別的相鄰語義的句子數量,同時可以學習每個單詞以及單詞序列的分散式表徵的概率函數,這樣如果測試的句子是由組成訓練集中句子的詞語構成,就可以得到很高的概率。

最常用的N-Gram模型的構建主要考慮上下文因素,它的實質是只考慮與當前狀態相臨的n-1個狀態對當前狀態影響的局部分析法。它和Markov模型間具有緊密的聯繫,如果把N-gram模型中符號序列中的每個符號看作一個狀態的話,從一個符號變換到另一個符號就是從一個狀態變換到另一個狀態,則它就變成了一個N-1階的Markov模型,所以N-gram模型中的概率計算可以按照Markov模型中的狀態轉移矩陣來計算。Markov模型描述了一個隨機過程中各狀態之間的變化情況,儘管完整地描述一個Markov模型的統計性質同時需要初始概率分布和狀態轉移概率矩陣,但矩陣是更重要的,因為它反映了隨機過程中的狀態變化情況。在文本詞性標註過程中,若將每個詞看作一個時刻,將每個詞上要標註的詞性看作是一個狀態,則在每個時刻可能有不同的狀態,利用Markov模型可以計算當一個詞的狀態確定之後,後面多個詞的狀態序列的出現概率。

隱Markov模型包含了系統狀態變化和由狀態決定的觀察輸出的雙重隨機過程。「隱」的意思就是狀態鏈是「隱藏」的,它用來描述一個含有隱含未知參數的馬爾可夫過程。其難點是從可觀察的參數中確定該過程的隱含參數,然後利用這些參數來做進一步的分析。模型在解決其所涉及的概率估算、反向找出最可能的狀態序列的解碼和參數估計求解的三個問題時,也要用到Markov模型中的狀態轉移矩陣。

第五節 自然語言處理中的統計模型(二)

向量空間模型(VSM)把對各類文本的分析處理簡化為向量空間中的向量運算,並且它能以空間上的相似度表達語義的相似度。當文檔被表示為文檔空間的向量,就可以通過計算向量之間的相似性來度量文檔間的相似性。文本處理中最常用的相似性度量方式是餘弦距離。這個模型最奇妙之處就是把一個語言的問題轉化成了一個可以計算的數學問題。

最大熵模型主要就是說熵最大的模型就是最好的模型,它在對隨機事件的概率分布預測時滿足全部已知的約束,而對未知的情況不做任何主觀假設。這種情況下的概率分布最均勻,預測的風險最小,因此得到的熵最大。它可以被形式化為帶有約束條件的最優化問題,通過拉格朗日乘子法將其轉為無約束優化的問題並進行計算。在條件最大熵模型中,約束就是已知的信息,是通過特徵的形式來體現的。數學家已經證明對任何一組不自相矛盾的信息,這個最大熵模型存在且唯一,而且都有一個簡單的指數函數形式。

條件隨機場(CRF)結合了最大熵模型和HMM模型的特點,是一種可以任意給定的無向圖判別式概率模型,近來在分詞、詞性標註和命名實體識別等序列標註任務中取得了很好的效果。它的概率分布沒有輸出獨立性和馬爾可夫性的要求,其聯合概率可以寫成若干勢函數聯乘的形式,圖中的頂點代表隨機變數,頂點間的連線代表隨機變數間的相依關係,一般常用的布局是線性鏈式的架構,不論在訓練、推論、解碼上都存在效率較高的演算法可供使用。條件隨機場具有表達長距離依賴性和重疊性特徵的能力,能夠解決標註偏置等問題,而且其所有特徵可以進行全局歸一化以求得全局的最優解。

筆者認為如果只是使用模型的話,知道公式,參數估計和推理就可以了,要弄清楚所有統計模型的原理可是個不小的工作量哦。

第六節 深度學習在自然語言處理中的模型(一)

基於深度學習的方法在自然語言處理方面的研究越來越多,那麼它是如何被應用到包括辭彙的向量化表示,語言模型(序列學習),句法分析(樹結構學習)等不同類型的任務中的呢?

神經網路語言模型(NNLM)的一個核心概念就是詞向量,最早由Bengio系統化提出並進行了深入研究。一般而言,它的優化目標是帶正則化項的最大對數似然,其中的參數集合為神經網路的參數。Bengio在論文的發展前景部分提出了可能改進方向,在後續的研究工作中多體現在將神經網路分解成為小的子網路,比如利用詞的聚類等、加速SoftMax中的正則項的快速求導、僅對一部分輸出進行梯度傳播、語義信息,語法信息、詞向量可解釋性等先驗知識、解決一詞多義問題。基於前述工作,Bengio和Hinton等人又提出了有層次結構的神經網路語言模型,用於加速模型的訓練和推斷過程。其參數求解參考了Goodman加速最大熵的語言模型訓練過程中的工作,將詞表中的詞進行一個預處理(按類層級劃分),這樣可以達到不錯的加速比。

NNLM不同於統計N-Gram模型,可以將詞序列映射到連續空間來評估下一詞出現的概率,以解決數據稀疏的問題。Hinton在研究受限玻爾茲曼機模型(RBM)時,結合神經網路語言模型提出了三種基於RBM的語言模型,他期望通過遞歸的方式更好利用所有上文信息來預測下一詞,進而有效處理長距離語言約束問題。Hinton還提出了一種簡單的構建層次結構的方法,即通過遞歸地使用二維高斯混合模型進行聚類,直到每個字元串中僅包含兩個詞,這樣所有的結果就構成一個二叉樹。其他學者們還根據語言中語句的特性引入長短時記憶(LSTM)機制來動態地調整語言模型,以解決「梯度消失」和「梯度爆炸」問題。

第七節 注意力模型與編碼解碼框架(二)

深度學習中的注意力機制從本質上講是從眾多信息中選擇出對當前任務目標更關鍵的信息。目前大多數注意力模型附著在Encoder-Decoder框架下,需要注意的是它本身並不依賴於特定框架。這個框架可以看作適合處理由一個句子(或篇章)生成另外一個句子(或篇章)的通用處理模型。源語言和目標語言可以是同一種語言,也可以是兩種不同的語言。而它們分別由各自的單詞序列構成。如果源語言是中文句子,目標語言是英文句子,那麼這就是解決機器翻譯問題;如果源語言是一篇文章,目標語言是概括性的幾句描述語句,那麼這是文本摘要的框架;如果Source是一句問句,Target是一句回答,那麼這是問答系統或者對話機器人的框架。一般而言,文本處理和語音識別的Encoder部分通常採用RNN模型。

沒有引入注意力的模型在輸入句子比較短的時候問題不大,但是如果輸入句子比較長,此時所有語義完全通過一個中間語義向量來表示,單詞自身的信息已經消失,會丟失很多細節信息。那麼生成目標句子某個單詞,比如「湯姆」的時候,如何知道注意力模型所需要的輸入句子單詞注意力分配概率分布值呢?我們可以將Source中的構成元素想像成是由一系列的<Key,Value>數據對構成,此時給定Target中的某個元素Query,通過計算Query和各個Key的相似性或者相關性,得到每個Key對應Value的權重係數,然後對Value進行加權求和,即得到了最終的Attention數值。

所以本質上注意力機制是對Source中元素的Value值進行加權求和,而Query和Key用來計算對應Value的權重係數。不少研究人員將注意力機制看作軟定址的一種特例,這也是非常有道理的。而Self Attention顧名思義,指的是Source或者Target內部元素之間發生的注意力機制,也可以理解為Target=Source這種特殊情況下的注意力計算機制,其具體計算過程是一樣的,只是計算對象發生了變化而已。

第八節 神經網路與時間序列問題

神經網路在時間序列處理上有模式識別和時空預測兩類問題。因為前饋神經網路都不能記憶它們剛剛收到的輸入,而循環神經網路可以,所以在處理NLP中上下文相關等任務時它的精度是最高的。剛開始RNN由於在利用反向傳播和梯度下降演算法過程中遭受到嚴重的梯度消失沒有被重視,而九十年代LSTM的出現解決了這個問題。

RNN不僅對當前輸入分配權重,還對過去的輸入分配權重,這些權重代表各個輸入在網路層中所佔的比重。它運用BP演算法通過反向推理微調其權重來訓練各個單元,然後對這些權重應用一個損失函數(代價函數)來確定單個輸出。根據各個單元計算出的總輸出與目標輸出之間的誤差,從網路的最終輸出端反向逐層回歸,利用損失函數的偏導調整每個單元的權重。然後通過使得損失函數的動態調整分配給當前輸入和過去輸入的權重。

下面介紹一下LSTM結構以及運行原理。系統通過輸入新詞和過去隱層狀態來產生新的記憶。在這之前輸入門根據輸入詞和過去隱層狀態共同判定輸入值是否值得保留,從而判定它以何種程度參與生成新的記憶,它可以作為輸入信息更新的一個指標。遺忘和輸入門很類似,它能對過去記憶單元是否對當前記憶單元的計算有用做出評估,但是它不能決定輸入詞有效。最終記憶產生這個階段會根據遺忘門的作用結果,合理地忘記部分過去的記憶,再根據輸入門的作用結果,產生新記憶,這兩個結果融合起來產生了最終的記憶。輸出門的目的是從隱層狀態分離最終的記憶。最終記憶包含了大量不需要保存在隱層狀態的信息,這個門限能夠評估關於記憶哪部分需要顯示在隱層狀態中。

第九節 自然語言處理系統的評測

自然語言處理是典型的認知智能,涉及到常識、推理等認知能力,存在大量可以利用的先驗知識並與行業應用深入結合,這使得部分課題評測難度較高。新的問題和評測方式不斷被提出,筆者認為難度略高於當前的技術水平的評測是比較合適的,過難了會導致評測的結果很差,讓大家失去信心,引導性也不夠強。而且評測不能滿足於只給出一個指標和結果,還應該幫助診斷當前技術的缺陷。比如閱讀理解的評測能不能診斷出來一些問題,機器是否因為不具備推理能力沒答好,哪些問題機器能答好等等。另外,應該反對一味的刷排行榜的方式,既要想追求更高的排名,也要在不斷創新原理的基礎上提高你的技術指標。

目前主要的評測集中在三大領域。句法語義分析評測是人為定義的問題,問題的定義形式多變,總體趨勢是從句法向語義發展。人腦對句子定義之後是不是這麼表達很難說。這種評測數據的規模很有限,因為簡單進行對比就可以了。閱讀理解評測是介於人為定義問題和真實問題之間的問題,它反映出了自然語言處理在向篇章級理解和推理方案發展的趨勢,難點在於如何設計題目,才能有效的迫使機器進行深入的推理,而不是用簡單搜索匹配。人機對話的評測本身就是高難度的技術,現在只能用人工的方式進行評測,但很多研究者正在進行自動評測技術的研究。

技術評測一直是驅動自然語言處理技術的發展重要手段,美國有NIST、DARPA。日本和歐洲也都有自己的專門機構。但中文的評測似乎應該由中國人主導,而不是去參加外國的評測。最後值得一提的是由谷歌推動的涉及45種語言,64個領域的語法樹庫,目標是處理各種語言統一的標註方式,這個是比拼核心演算法,有實力的同學可以自己試一下哦。

第十節 深度學習在情感分析中的應用

情感分析本質是一個分類問題。其主要解決的問題是判斷一段話是正面的還是負面的。處理好了情感分析,可以大大提升計算機對於事物的理解和服務效率。比如不少基金公司利用人們對於某家公司、某個行業、某件事情的看法態度來預測未來股票的漲跌。深度學習適合做文字處理和語義理解,是因為深度學習結構靈活,其底層利用詞嵌入技術可以避免文字長短不均帶來的處理困難;使用深度學習抽象特徵,可以避免大量人工提取特徵的工作;深度學習可以模擬詞與詞之間的聯繫,有局部特徵抽象化和記憶功能。下面通過一個電影評論的例子詳細講解深度學習在情感分析中的關鍵技術。

首先下載ai.stanford.edu/~amaas/中的數據。輸入下文安裝必要的軟體包。然後用Keras來處理數據,由於其自帶了imdb的數據和調取數據的函數,直接調用load.data()就可以了。Keras自帶的load_data函數可以幫我們從亞馬遜S3中下載數據,並且給每個詞標註了一個索引(index)來創建字典。每段文字的每個詞對應了一個數字。如果遇到其他類型的數據,或者自己有數據,那麼就得自己寫一套處理數據的腳本。大致需要文字分詞、文字分詞、把段落按字典翻譯成數字,變成一個array三個步驟。

Google在word2vec.googlecode.com提供了一組詞向量的結果。Keras 提供了設計嵌入層的模板,只要在建模的時候加一行Embedding Layer函數的代碼就可以。注意嵌入層一般是需要通過數據學習的,可以借用已經訓練好的嵌入層(比如Word2Vec)的詞向量直接放入模型,或者把預訓練好的詞向量作為嵌入層初始值,進行再訓練。Embedding函數定義了嵌入層的框架,其一般有3個變數:字典的長度(即文本中有多少詞向量)、詞向量的維度和每個文本輸入的長度。前文提到過每個文本可長可短,可以採用Padding技術取最長的文本長度作為文本的輸入長度,而不足長度的都用空格填滿。空格本身一般也會被賦予詞向量,這可以通過機器學習訓練出來。Keras提供了sequence.pad_sequences函數幫我們做文本的處理和填充工作。先把代碼進行整理,計算最長的文本長度,然後首先建立序列模型,逐步往上搭建網路。把輸入層壓平,原來是maxword ×64的矩陣,現在變成一維的長度為maxword ×64的向量。接下來不斷使用relu函數搭建多層全連接神經網路。relu是簡單的非線性函數:f(x)=max(0;x)。注意到神經網路的本質是把輸入進行非線性變換。這裡最後一層用Sigmoid,預測0,1變數的概率,目的是把線性變成非線性,並把目標值控制在0~1。因此這裡計算的是最後輸出的是0或者1的概率。

這裡把交叉熵作為目標函數,我們的目的是選擇合適的模型,讓這個目標函數在未知數據集上的平均值越低越好。AdamOptimizer是在模型訓練中使用梯度下降方法中合理地動態選擇學習速度,也就是每步梯度下降的幅度。如果在訓練中損失函數接近最小值了,則每步梯度下降幅度自然需要減小,而如果損失函數的曲線還很陡,則下降幅度可以稍大一些。Keras提供的建模API讓我們既能訓練數據,又能在驗證數據時看到模型測試效果。其精確度大約在85%。如果多做幾次迭代,則精確度會更高。有時間可以試著嘗試一下多跑幾個循環。

下面介紹如何用RNN的長短記憶模型處理情感分類。LSTM按照時間順序,把信息進行有效的整合和篩選,有的信息得到保留,有的信息被丟棄。在時間t,你獲得到的信息(比如對段落文字的理解)理所應當會包含之前的信息(之前提到的事件、人物等)。LSTM要把最有價值的信息保留到最後,那麼最自然的想法是總結出一個規律用來處理前一時刻的信息。由於遞歸性,在處理前一個時刻信息時,會考慮到再之前的信息,所以到時間t時,所有從時間點1到現在的信息都或多或少地被保留一部分,也會被丟棄一部分。LSTM對信息的處理主要通過矩陣的乘積運算來實現的(見圖)。最後程序預測的精確度大致為86.7%,讀者可以試著調試不同參數和增加循環次數,從而得到更好的效果。更詳細的介紹和代碼可以參見《深度學習在情感分析中的應用》原文。


推薦閱讀:

個人永久性免費-Excel催化劑功能第15波-接入AI人工智慧NLP自然語言處理
基於隱馬爾科夫(HMM)模型的中文分詞實踐
利用fasttext進行文本情感判別
一份問答系統的小結
016【NLP】word2vec新手項目

TAG:自然語言處理 |