1. 程式人生 > >科普文:自然語言處理到底是幹嘛的

科普文:自然語言處理到底是幹嘛的

 一、概念
自然語言處理(NLP,Natural Language Processing)、計算語言學(CL,Computational Linguistics)、人類語言技術(HLT,Human Language Technology),又或者“應用語言學”、“語言工程(LE)”等等,這些名稱都可以用於描述這個與人類語言以及計算機雙向相關的領域。其實忽略這些概念細節之間的區別,NLP(或CL,或HLT)所做的事兒說白了就是,研究如何讓計算機能夠像人一樣理解人類世界中的自然語言。

二、人工語言與自然語言
略微有些計算機知識的人應該都知道,計算機在執行人們給他的命令所使用的語言是人們實現規定好了的,比如C、Java、Python等。利用這些人工制定的機器語言,計算機可以很好地執行人們給它的各種指令。但是隨著計算機的普及,以及依託網路的資訊量的增加,人們需要的是更加智慧的、能夠在一定程度上理解人們所說的自然語言的計算機。而這種應用是有很大的發展前景的,至於原因,我們下文再說,而且想想iphone4s中Siri的巨大成功您也就明白了。
但是要讓計算機理解自然語言,最大的困難就在於自然語言本身所具有的靈活性、無限性以及二義性。而這也是目前計算機所使用的人工語言所避免出現的。
所謂自然語言的靈活性與無限性,其實說白了就是,人們對語言的使用在一定的文法規範下是靈活多變的,這由此導致了某一種特定語言下的句子形式是無限的。比如下面的這四個句子:
1. 主席團 臺上 坐
2. 主席團 坐 臺上
3. 臺上 坐 主席團
4. 臺上 主席團 坐
忽略語用上表達差別,這四個句子的意思是完全一樣的,說的都是“臺上存在著主席團”這麼一個事實。但是這四個句子的形式是不完全一樣的,雖然它們都是由相同的句子成分(“主席團”、“臺上”、“坐”等三個片語)組成的。
這個例子很好的說明了自然語言表達中的靈活性,我們完全可以用不同的形式表達同樣的意思。而這一點是在目前計算機所使用的人工語言所不允許的。比如,C語言中我們用來表示從1到100的迴圈,用for語句的話必須寫作“for(i=1;i<101;i++)”的形式,而不允許有其他的for語句形式。之所以在人工語言中限制其靈活性,主要還是為了文法規則形式化的方便。簡單點兒說就是,限制靈活性就是讓計算機只記得一種形式,而其他形式(即使再好),我也當做不認識進行處理,這樣不僅方便於語言創制,也方便計算機的理解。但與之恰恰相反的是,自然語言存在著許多如上四個句子的靈活性運用,而且由於這種靈活性所導致的句子型別的無限性,使得自然語言的形式化變得十分複雜(關於自然語言的形式化,下回再做分解),也使得計算機在理解自然語言時也會頭疼得厲害。
而自然語言的二義性,其實說的就是自然語言中廣泛存在的歧義現象。比如,語言學中最經典的例子:
殺死獵人的狗
——殺死獵人 的 狗
——殺死 獵人的狗
還有就是下面這個很有意思的例子,句子中的“意思”到底是什麼意思呢?
人們以為他對她有“意思”,於是,建議他對她“意思意思”。他說,他沒那種“意思”。她則反問,你們是什麼“意思”。大夥中有的覺得很有“意思”,有的則認為真沒“意思”。
在處理這些句子或詞彙時,由於句子和詞存在著多種可能的理解方式,計算機在處理這些問題時就要費老鼻子的勁了。

三、NLP應用
上面我們簡要說了下自然語言的特點以及由此帶來的計算機在處理自然語言時的難點和障礙。雖然目前為止,離自然語言處理所要達到的讓計算機完全理解自然語言的終極目標還相距甚遠,但是利用NLP相關技術對自然語言進行部分處理也取得了相當不錯的成果。
記得小學有本參考書叫做《字詞句段篇章》,那時就覺得用這六個字對語言進行劃分是多麼的恰當與優美。其實,按照語言單位對語言就行劃分,就形成了計算機對自然語言進行處理的各個層次。
首先是語音層面,這是自然語言最基本的層面。我們平時接觸最多的語言估計就是我們用耳朵所聽到的話語聲音吧。而以語音為物件的自然語言處理就是諸如語音識別、語音合成等應用。還是說蘋果家的Siri,作為一款語音助手類軟體,它首先要解決的也就是語音識別的問題,也就是將它所“聽”到的語音轉化為文字訊號的過程(當然還有它最後一步將文字答案轉化為語音訊號輸出的過程)。
除了語音識別,特定的對於漢語,另一項與NLP相關的應用則是漢語的拼音文字轉換。說白了,就是漢語拼音輸入法。由於漢語中存在眾多的多音字詞,以及普通話中複雜的四聲系統,將漢語拼音轉化為正確的漢語詞語片段,即使對使用這種語言的人來說也是一件不太容易的事兒,比如說下面這個簡單地拼音串:“yishishiweiyiju”,您將之轉化為正確的漢字串的時間是多少呢(答案見文末)?估計也是不容易的吧,但是利用目前比較成熟的NLP技術,現在的輸入法至少已經可以在很短的時間內正確給出您正確的答案了,比如我打這篇文章所使用的搜狗輸入法,您也可以試試您現在正在使用的輸入法是否能給出正確的漢子串呢~
說完語音層面,再就是詞語層面的應用。這主要涉及到對一個句子(或片語片段)的正確理解。比如說吧,我們上面所提到的對“殺死獵人的狗”的歧義判定問題。這個層面不像上面所介紹的語音,能夠產生比較好玩的產品化應用。這個層面所涉及的問題主要是為其他自然語言處理所服務的。還是說“殺死獵人的狗”,我們只有在這個層面對這個句子有了正確的理解了,才能繼續下一步更高層次的應用。因此,對於這個層面的NLP應用不做過多介紹,以後我們在技術層面或許會有更多的涉及。
好,現在我們再把對語言的討論上升一個層次,到篇章層次。這個層次的應用就是更高層次的應用了,這各層次所涉及的語言物件是多個句子組成的語言篇章,而對它們的操作主要是從中抽取出我們所感興趣的興趣。因此這個層次上的應用主要有:搜尋、資訊抽取、文字分類以及文字篩選等。
搜尋,這個大家應該都是比較熟悉的,Google、Bing、百度等,都是目前大家所熟知的資訊搜尋引擎。而這些搜尋引擎所使用到的技術都可以歸入NLP的範圍內。
資訊抽取,資訊搜尋的一種,與搜尋不同的是,資訊搜尋的結果是返回所有可能的結果,而資訊抽取是有針對性地返回唯一正確的結果。從唯一性上來說,資訊抽取對技術的要求更高,也更難實現。目前資訊抽取技術主要應用在對新聞資訊的抽取,比如從新聞中抽出“when and where,who did what(時間、地點、人物、事件)”等資訊。而現在隨著社交網路的發展,我們對某些人的個人資訊也會產生興趣,比如通過某人的個人網站或所發微博,提取他的各種個人資訊(聯絡方式、住址、愛好、習慣等),從而幫助商家分析顧客需求,以及,滿足某些人的特殊好奇心等……
文字分類以及文字篩選,這個也是為了幫助人們可以更好地利用資訊所做的工作。例如,如果您比較喜歡星座,當然您可以用Google搜尋“星座”,也可以直接去新浪或網易等入口網站上的星座頻道。而文字分類所幫您做的就是幫您找到所有與星座高度相關的文章。而文字篩選的應用呢,為了社會和諧,你懂的。

* yishishiweiyiju:以事實為依據