第七篇 自然語言處理與語音合成

人類的多種智能都與語言有著密切的關係。我們的邏輯思維以語言為形式載體,絕大部分知識也是以語言文字的形式記載和流傳下來的。自然語言處理技術能幫助計算機用人類習慣的自然語言進行人機信息溝通,理解人類的想法與情感,還能讓我們更好地了解人類自身的語言能力和智能機制。

自然語言處理包括語言的理解與生成以及各種應用系統。其核心的解決思路就是通過分詞和向量化等方法來做語法的分析和語義或意圖的理解。如搜索「想去一家寵物醫院,醫院附近要有停車位」,這是一種人類的自然表達,但要讓計算機能夠理解,就必須把核心意圖提取出來再去找相應的答案。另外我們看文章時不僅是理解其中每一句話,還要對整篇文章有一個理解,為此可以把整個篇章打上主題標籤或各種實體標籤,這樣對計算機來講就是理解了這篇文章。除了分析、理解以外,還有生成與計算推理。我們可以用NLP技術嘗試寫詩、合成明星語音唱片等。現在百度上看到的文章有一部分是機器自動寫成的,測試發現讀者常常不能分辨出來作者是人還是機器了,這說明機器已經基本通過了圖靈測試。知識不僅是靜態的存取,而且可以用來計算和推理。比如,離聖誕節還有多少天,系統知道今天是哪一天,聖誕節是哪一天,它就會以此做一個計算。

語音合成又稱文語轉換(TTS/Text to Speech),它的功能是將文字信息實時轉化為標準流暢的語音朗讀出來,相當於給機器裝上了嘴巴,讓機器像人一樣開口說話。人造語音是通過機械/電子的方法產生的,可以將計算機自己生成的、或外部輸入的文字信息轉變為可以聽得懂的口語輸出。為了合成出高質量的語言,除了依賴於各種語義學、語音學規則外,還必須對文字的內容有很好的理解。其主要過程是先將文字序列轉換成音韻序列,再由系統根據音韻序列生成語音波形。首先需要對文檔做分詞、字音轉換等語言學處理,建立一整套有效的韻律控制規則,然後再根據要求運用語音技術合成出實時的、高質量的語音流。因此文語轉換系統都需要一套完善的文字序列到音素序列的轉換程序。NLP技術廣泛應用於機器翻譯、信息提取、語義分析、語法功能、情感分析等領域,已經成為當今智能機器人產業的重要研究方向。

第一章 自然語言處理技術簡介

第一節 什麼是自然語言處理

自然語言處理是研究如何讓計算機理解並運用人類語言實現相互間以自然語言為載體進行有效通信的各種理論和方法。理論上的研究主要是開發表示語言能力和語言應用的模型,並使用計算機分析自然語言輸入,從中得出與輸入有關的一些事實與結論;實用性研究主要面向不同自然語言文種之間的轉換,也包括從自然語言表達到系統內部命令形式的轉換,即自然語言介面研究。搜索引擎、機器閱讀、智能問答、知識圖譜、語義搜索、個人助理、輿情監控與分析、推薦系統、文本自動摘要這些都需要自然語言處理技術。

自然語言處理最底層是句法語義分析,樹榦是篇章的閱讀理解,往上是枝繁葉茂的機器翻譯、自動處理,最後是跟行業結合的具體應用。我們如果能把每段語言都轉化成可以計算的量,那即使再大量的運算計算機都能搞定!這就是自然語言處理的核心思路。早期的語言處理系統如SHRDLU,當它們處於一個有限的「積木世界」,運用有限的辭彙表會話時,工作得相當好。這使得研究員們對此相當樂觀。然而,當把這個系統拓展到充滿了現實世界的含糊與不確定性的環境中時,他們很快喪失了信心。

理解自然語言需要關於外在世界的廣泛知識以及運用操作這些知識的自然語言認知能力,它的本質之一是結構預測,因此它也被視為一個人工智慧完備的問題。同時在自然語言處理中,"理解"的定義也變成主要的問題之一,理解計算的過程有點類似於人類邏輯思維的過程,就相當於機器的智商。

第二節 人類語言與智能的關係

自然語言是人腦最卓越的功能之一,它是智能體之間使用物理信號互相刺探、互相適應對方而產生的。從形式上看,語言是思維的動因和載體,是思維成果的儲存所。語言的複雜度取決於智能體對語言的需求度和傳播積累度,因此從某種意義上可以說理解了人類的語言就理解了人類。

對於人類來說,母語之所以影響深遠,其中的一個原因就是我們在最初了解與思考這個世界時就是用的母語。事實上無論是理性還是感性的思考都是離不開語言的。如果說思考本身是一堆混亂的雜物,那麼語言就是將其歸類後放入其中的存儲器(下定義並創造新詞)。這樣通過語言我們可以高效的將「流動的」思考轉化為「固定的」知識。語言將客觀現實轉化為心理現實,為語言編碼提供的材料提高了人的認知水平,同時當更多的客觀現實轉化為新的心理現實,也為語言編碼提供了新的材料而使人的認知水平進一步提高。

有了語言,人類學習新知識並進行發明創新的效率就可以提高很多。我們在思考時所做的就是在大腦中演繹某些事物或變化的邏輯關係或過程,而語言就是人們對事物及變化過程的定義與描述工具。語言有助於我們更清楚的知道自己在思考什麼,離開語言我們會很難進行複雜的思考。我們在日常生活中獲得的知識與信息都很好的定義在了語言中,因此當我們在說出一個名詞時腦海里想到的不僅僅是這個名詞,還有他所代表的事物以及這個事物所具有的性質和它與其他的事物之間的關係(就如想起一個人名時,與這個人相關的信息都會在腦海里浮現),而有了這些定義我們就能更快速地思考。

第三節 自然語言處理與計算語言學

自然語言處理是從計算機科學的角度出發來建立高效的、可用於處理自然語言的演算法。計算語言學是從語言學的角度出發提出一種可被計算機處理的語言學理論、框架、模型。前者更注重結果,為的是模擬人腦處理語言的結果。而後者更注重過程,為的是理解人腦處理語言的過程。但總體趨勢是二者的界限開始變模糊了。

統計NLP已取得巨大成果,為了克服其所遇到的困難並進一步提高系統表現,目前許多NLP的研究者都在引入一些語言學的知識來幫助他們提取更多的訓練特徵,和更靠譜的思維角度。當然衡量一個理論是否有效,還是得放在真實語料上做些實驗才知道。比如用「詞袋」作為分類器的輸入,結果出來一看,不錯,絕大多數都正確。這個簡單的分類問題可以當成一個純NLP的東西,主要看分類器演算法的好壞,有時很簡單的特徵就能滿足需要。

計算語言學的目的就是建造一個人腦處理所有語言的模型。工程師們一直在不斷地提出模型,驗證模型,修改模型。語法學裡那些個樹形結構,那些個Movement;語音學裡的那些規則,都是在試著理解人腦如何處理語言。現階段在計算系統框架或者演算法上想有所進步已非常困難,而計算語言學能看到的開發空間巨大。所以,為了做出來某些高級應用,許多NLP的研究者也在往這個領域努力。

第四節 自然語言處理的發展歷程

最早的自然語言理解方面的研究工作是機器翻譯。1949年,美國人威弗首先提出了機器翻譯設計方案,研究者從破譯軍事密碼中得到啟示,認為不同的語言只不過是對「同一語義」的不同編碼而已。20世紀60年代,國外對機器翻譯曾有大規模的研究工作,耗費了巨額費用。其主要的做法是存儲兩種語言的單詞、短語對應譯法的大辭典,翻譯時一一對應,技術上只是調整語言的同條順序。但人們當時顯然是低估了自然語言的複雜性,語言處理的理論和技術均不成熟,所以進展不大。

大約90年代開始,自然語言處理領域發生了巨大的變化。這種變化的兩個明顯的特徵是:在系統輸入方面要求研製的自然語言處理系統能處理大規模的真實文本,而不是如以前的研究性系統那樣,只能處理很少的詞條和典型句子。在對系統的輸出方面,鑒於真實地理解自然語言是十分困難的,對系統並不要求能對自然語言文本進行深層的理解,但要能從中抽取諸如「索引詞,過濾,檢索,自動摘要」等有用的信息。

與此同時基礎性研究工作也得到了重視和加強。大規模的經過不同深度加工的真實文本的語料庫,是研究自然語言統計性質的基礎。規模為幾萬,十幾萬,甚至幾十萬詞,含有豐富的信息(如包含詞的搭配信息)的計算機可用詞典對自然語言處理的重要性是很明顯的。人機對話是自然語言處理髮展的一個高峰,它的發展和自然語言處理的發展是密不可分的。普遍認為自然語言處理有四個階段,從形式匹配(語法)到語義匹配(語義),現在到文本推理(知識),再下一步會到言外之意(語用)。

第五節 領域內的學術組織與實驗室

在自然語言處理領域,ACL(Annual Meeting of the Association for

Computational Linguistics)是世界上影響力最大、也最具活力、最有權威的國際學術組織,成立至今已有57年歷史,會員遍布世界60多個國家和地區,代表了自然語言處理領域的世界最高水平。ACL Fellow的頭銜是對NLP領域有傑出貢獻的人最高的認可。

截至2016年ACL共評選出40個會士,其中4位是華人/華裔,分別是:香港科技大學吳德凱教授,成就是「較早將中文分詞方法用於英文片語的分割,並且將英文片語和中文詞在機器翻譯時對應起來」;新加坡國立大學黃偉道教授,自然語言處理和信息檢索專家,精通於核心解析度和語義處理以及語義語料庫的開發;林德康,前Google高級管理科學家,對自然語言解析和辭彙語義做出重要貢獻,2016年回國創辦了一家智能語音助手相關的公司奇點機智;王海峰現任百度副總裁,AI技術平台體系(AIG)總負責人,已授權或公開的專利申請120餘項,正在承擔973、自然科學基金重點項目。

自然語言處理領域目前國內重點實驗室有清華大學自然語言處理與人文計算實驗室,清華計算機系前院長孫茂松教授是他們的leader。北京大學計算語言學教育部重點實驗室,是北大計算機學科比較有實力的一個研究方向之一。中科院計算所自然語言處理研究組在機器翻譯領域尤其擅長,組長為劉群研究員,大家常使用的中文分詞工具ICTCLAS就是他們參與開發的。哈爾濱工業大學主要有:智能技術與自然語言處理研究室(ITNLP)、哈工大語言語音教育部-微軟重點實驗室。

六節 自然語言處理的基礎-詞義消歧

自然語言處理的關鍵在於消除歧義問題,歧義主要包括注音歧義、分詞歧義(交集歧義,組合歧義)、短語歧義、語義歧義、語用歧義等形式。正確的消歧需要大量的語言學和物理世界的知識,這是帶來自然語言處理的兩個主要困難。

詞義消歧是指在特定的上下文或話題語境中為多義詞選擇合適的詞義。它的難點在於除了需要對出現的每個多義詞進行消歧,還要考慮相鄰多義詞消歧結果之間的相關性,以及對整個句子、篇章的多義詞消歧結果的全局優化。其研究關涉到的三個主要問題是語義詞典和語料庫等資源建設、基於知識和語料庫的分析演算法選擇與統一權威的測試平台的形成。

語義詞典靜態地描述了詞語的義項區分,詞義標註語料庫動態地呈現了不同義項在真實文本中的使用狀況。標註數據匱乏一直是困擾詞義消歧的重要問題,相反互聯網上卻存在海量的無標註文本資源。如何構建一部適合於計算機信息處理的語義詞典是工程師們亟待解決的一個目標。

面向計算機處理的詞義區分的主要目標是在面對真實文本時具有可操作性。語料庫詞義標註的一致性通常被認為是詞義自動消歧的性能上界。詞義標註語料庫中詞義標註的一致性與語義詞典中義項的區分和描述密切相關。當詞典中不同詞義之間區分清晰、存在明顯的句法標識時,語料庫中的義項標註就較容易達成一致;當詞典中的詞義區分太過細緻或者本身描述就模稜兩可時,語料庫中的義項標註就很難達到高一致性。特徵選擇就是在一定的上下文語境中選取最有效的消歧特徵,特徵選擇上下文語境是對詞義進行消歧的最終憑藉。詞義消歧研究中用到的上下文特徵主要有話題、辭彙、句法和語義四個層面。

第七節 模糊性和瑕疵的難題

人類語言的模糊性和瑕疵源於客觀事物本身的複雜性,源於人們對客觀對象認識的局限性和不確定性,但它能被使用該種語言的一切成員所共同理解和接受。模糊語言的優點是信息量大,表達簡潔且效率高,能使表達更委婉、含蓄、有禮貌,能更好地激發人們的理解和想像。但這也給自然語言處理的研究帶來了巨大的困難。

一方面,迄今為止的機器語法分析大都限於分析一個孤立的句子,而對上下文關係和談話環境對句子的約束和影響還缺乏系統的研究。因此分析歧義、詞語省略、代詞所指、同一句話在不同場合或由不同的人說出來所具有的不同含義等問題,尚無明確規律可循,這就需要加強語用學的研究才能逐步解決。另一方面,人理解一個句子不僅單憑語法,還運用了大量的生活知識和專門知識,這些知識無法全部貯存在計算機里。因此一個簡單的NLP系統還只能建立在有限的辭彙、句型和特定的主題範圍內;只有計算機的各種性能不斷提高後,才可能不斷擴大範圍。

語言的模糊性是指對象類屬邊界不確定的特性,但有的人常將概括性、多義性、歧義性等概念與模糊性混為一談。對語言中模糊現象的系統研究是在最近幾十年才開始的。自從模糊數學的創始人札德提出模糊集合論的思想以來,在語言學界則產生了模糊語言學這一新興的學科分支。它的出現反映了智能信息時代對語言研究的要求。作為信息儲存和傳遞主要工具的計算機在處理模糊語言時常常顯得束手無策,因為模糊性的語言是難以用二值邏輯的方法直接加工處理的。這一問題促使語言學家深入研究模糊語言,探究其內在規律,模糊語言學的研究必將對NLP技術的發展產生重大影響。

第八節 自然語言處理中的向量化方法

詞向量化(Word embedding)最早出現於Bengio(本希奧)在03年發表的開創性論文中。通過嵌入一個線性的投影矩陣將原來離散的one-hot向量(一個長度為n的數組)映射為一個稠密的連續向量,並通過一個語言模型的任務去學習這個向量的權重。這一思想後來被廣泛應用於各種NLP模型中。

無監督或弱監督的預訓練不需要大量的人工標記樣本就可以得到質量還不錯的embedding向量。不過因為缺少了任務導向,可能和我們要解決的問題還有一定的距離。因此,我們往往會在得到預訓練的embedding向量後,用少量人工標註的樣本去fine-tune整個模型。端對端的有監督模型在結構上往往更加複雜。因為有著明確的任務導向,它學習到的embedding向量也往往更加準確。例如通過一個embedding層和若干個卷積層連接而成的深度神經網路實現對句子的情感分類可以學習到語義更豐富的詞向量表達。

詞向量化的另一個研究方向是在更高層次上對句子的embedding向量進行建模。我們知道,單詞是句子的基本組成單位。一個最簡單也是最直接得到句子embedding的方法是將組成句子的所有單詞的embedding向量全部加起來——類似於CBoW模型。顯然,這種簡單粗暴的方法會丟失很多信息。另一種方法是將句子或是段落視為一個特殊的單詞,然後用模型進行訓練。這種方法的問題在於,對於一篇新文章,總是需要重新訓練一個新的sentence2vec。此外這個模型同樣缺少有監督的訓練導向。

個人感覺比較靠譜的是第三種方法——基於word embedding的端對端的訓練。句子本質上是單詞的序列。因此,在word embedding的基礎上,我們可以連接多個RNN模型或是卷積神經網路,對word embedding序列進行編碼,從而得到sentence embedding。

第九節 谷歌的word2vec詞向量計算工具

2013年Google開源了一款叫word2vec的工具用於詞向量計算,它可以在百萬數量級的詞典和上億的數據集上進行高效地訓練,得到的結果可以很好地度量詞與詞之間的相似性。這個演算法的背後是一個淺層神經網路和CBoW/Skip-gram模型。令人驚喜的是訓練結果居然對數學上的加減操作有意義!最經典的一個例子是v("King")?v("Man")+v("Woman")=v("Queen")。

自然語言處理中的一個重要問題是如何計算一段文本序列在某種語言下出現的概率?統計語言模型給出了這一類問題的一個基本解決框架。對於一段文本序列S=w1,w2,...,wT,它的概率可以表示為:

即將序列的聯合概率轉化為一系列條件概率的乘積,問題變成了如何去預測這些給定的條件概率。由於其巨大的參數空間,我們更多的是採用其簡化版本——Ngram模型。不過Ngram模型仍由於參數空間的爆炸式增長,無法處理更長文章的上下文。另外它本質上是將詞當作一個個孤立的原子單元去處理而沒有考慮詞與詞之間內在的聯繫性。Ngram模型處理方式對應到數學上的形式是一個個離散的向量。顯然one-hot向量的維度等於詞典的大小,這在大型詞典的實際應用中面臨著維度災難。

能否用一個連續的稠密向量去刻畫一個單詞的特徵呢?用神經網路建立統計語言模型框架的NNLM模型(Neural Network Language Model)應運而生。我們不僅可以用它直接刻畫詞與詞之間的相似度,還可以建立一個從向量到概率的平滑函數模型,使得相似的詞向量可以映射到相近的概率空間上。但NNLM模型只能處理定長的序列,依然缺少靈活性。

為此Mikolov等人提出了RNNLM模型,用遞歸神經網路代替原始模型里的前向反饋神經網路,並將embedding層與RNN里的隱藏層合併,從而解決了變長序列的問題。另外Mikolov還引入了層次Softmax(Hierarchical Softmax)和負採樣(Negative Sampling)兩種優化演算法解決了訓練時間慢的問題

第十節 自然語言處理的未來

受益於大數據、學習機制、知識圖譜、推理和規劃等方面的技術進步,未來五到十年自然語言處理系統在語義理解、機器翻譯、問答和對話方面將會有重大突破。口語翻譯會成為手機上的標配(「重建巴別塔」),智能客服加上人工客服的完美結合可以解決很多簡單重複的工作。用戶意圖識別調度系統平台將會被建立起來,運用其上面的對話管理、領域知識、用戶畫像等模塊來自動調用不同的Bot引擎執行相應的任務。

機器自然語言的對話、聊天、問答會逐步達到實用程度。今天用NLP自動寫對聯、新聞稿和歌曲可能還是一個新鮮的事物,但是今後一定都會流行起來。NLP還將推動語音助手、物聯網、智能硬體、智能家居的普及,它與其他AI技術的融合將在金融、法律、教育、醫療等垂直領域得到廣泛應用。聊天機器人背後的單元處理引擎只需要掌握溝通技巧、通用和主題聊天數據以及用戶畫像等能力,然後投其所好地與用戶聊天。而信息服務和問答不僅需要搜索和問答的能力,還需要對常見問題表進行收集和整理,從知識圖表與文檔中找出相應信息以回答問題。例如定餐、買火車票,這些任務是固定的,狀態也是固定的,狀態轉移也是清晰的,那麼就可以調用XBot一個一個來實現。

基於深度學習的NLP獲得迅速發展,目前已取代傳統的統計方法成為學術界和工業界新的主流方法。對話不同於翻譯,翻譯的輸入和輸出肯定是同一個域的東西,這就大大壓縮了可能解的空間。但對話中有大量的省略和指代,我們必須通過上下文信息才能夠理解。這樣的後果就是對話系統對於訓練數據有指數級別上升的要求。另外一個困難就是很多人類的對話根本不會在訓練集中出現。所以建立能夠處理任何話題、任何任務、任何變種語言的通用NLP系統的想法目前還不太現實。


推薦閱讀:

基於隱馬爾科夫(HMM)模型的中文分詞實踐
中文NLP那些事系列(1)
Deliberation Networks 閱讀筆記
一份問答系統的小結
《attention is all you need》解讀

TAG:自然語言處理 |