1
雷鋒網(wǎng)編者按:本文作者竹間智能深度學(xué)習(xí)科學(xué)家趙寧遠。本文從“人機交互的本質(zhì)”入手,重點解析自然語言處理中的難點及潛在機會,竹間智能自然語言系列專欄文章第一篇,雷鋒網(wǎng)已獲授權(quán)。
人機交互的本質(zhì)是什么?AI能否真正理解人類的語言,甚至感情?
根據(jù)《圣經(jīng)·舊約》的記載,在很久以前,人類是使用相同的語言的。而當(dāng)人類逐漸壯大,在虛榮心的趨使下,他們想建造一座通天的巨塔,聳入云霄,并欲借此達到至神的領(lǐng)域。可上帝對人類的行為非常不滿,故令世人的語言互不相通,人類因此陷入無休止的爭端和混亂中,計劃也就此失敗。這就是有名的“巴別塔之謎”。
語言是人類社會合作的基石、知識傳承的載體,但語言又似乎是人類自身的優(yōu)點和局限的一面鏡子:既可以創(chuàng)造新世界、通達人心,卻又不總是那么可靠、時常會引起誤解;有時優(yōu)美純凈,有時又粗俗不堪。
對人工智能而言,征服語言似乎是通往終極智慧路上一個無法被忽視的目標(biāo)??墒鞘裁词钦Z言,語言背后承載了怎樣的智慧和秘密?冰冷的機器、縝密的邏輯是否可以穿透語言的表象,觸摸到人類的靈魂呢?在AlphaGo令所有圍棋大師俯首稱臣的今天,深度學(xué)習(xí)是否也能夠在語言領(lǐng)域展現(xiàn)同樣的能力?
在該系列文章里,竹間智能NLP及語言學(xué)專家組,將帶大家回顧人類對語言認識的不斷演進,討論自然語言處理的重難點、最新的進展,以及未來發(fā)展的方向。也許在不久的將來,人類語言本身也會隨著AI的進步而進步吧!
第一道難題
讓我們把思緒從宏大的歷史中抽離出來。如果我們希望人工智能可以“征服語言”,那么也許我們應(yīng)該從征服小學(xué)課本開始。
對于計算機來說,相比于其他所有的學(xué)科,它最擅長的也許就是最抽象、最理性的數(shù)學(xué)了。
數(shù)學(xué)的語言,相較于別的科目,更強調(diào)精確。數(shù)學(xué)建立在毫不含糊的邏輯之上,那么用于描述數(shù)學(xué)的語言,當(dāng)然也就必須精準(zhǔn)無誤。事實上,對于用單純數(shù)字和符號表示的數(shù)學(xué),計算機是可以辨認和理解的,這當(dāng)然也是計算機被創(chuàng)造出來的初衷。
可是如果我們對于計算的過程稍做修飾,將它用自然語言描述出來的時候,似乎計算機就很難去理解了。所以今天我們小試牛刀,看看人工智能在自己擅長的科目能考多少分。
讓我們來算一道簡單的數(shù)學(xué)題目,“小明上學(xué)期期末考試,語文、數(shù)學(xué)、自然、社會、英語的成績分別是88分、96分、94分、90分、82分。小明五科的平均成績是多少?”
當(dāng)然,很多程序員心中已經(jīng)開始納悶,這道題目真的很簡單,一行代碼就可以搞定了。
我們暫時先不討論python解釋器如何將上面的代碼轉(zhuǎn)換為機器指令,以及底層的硬件如何運作(雖然電腦能夠理解“高級”編程語言已經(jīng)是一個奇跡)——只要在自己的電腦上驗證一遍,應(yīng)該就足以令人信服了:
我們想知道的是,人類的語言,和“給計算機看”的語言到底有什么差別,為什么計算機讀得懂計算機語言,卻讀不懂人類語言呢?最新的人工智能的技術(shù)到底能不能夠彌補這樣的差異?
語言的秘密
為了解釋清楚這個對程序員來說似乎不成問題的問題(他們每天都在充當(dāng)人類和機器之間的翻譯官),我們需要先認識一位對人工智能和語言學(xué)來說都舉足輕重的學(xué)術(shù)巨擎:喬姆斯基。
嚴格說來,喬姆斯基是站在AI的對立面的。在人工智能“大躍進”的60年代,喬姆斯基更多的是在給人工智能潑冷水。他認為簡單的電腦程序永遠無法理解語言,因為人類自己還尚未理解語言產(chǎn)生的機制。
喬姆斯基堅信人類的語言可以被一種與生俱來的“普遍語法”所描述——在今天,喬姆斯基的大部分語言學(xué)理論已經(jīng)不再被奉為圭臬,但他在對語法的研究中所規(guī)劃出來的“喬姆斯基譜系”,依然是人們在研究語言的復(fù)雜度之時所遵循的原理。
(上圖:喬姆斯基譜系;越靠近中心的語言越簡單,越外層的語言越復(fù)雜)
語言具有表達形式和所描述的內(nèi)在邏輯兩種屬性。所以,我們在討論語言的復(fù)雜度的時候,一方面是在研究為了表達一定的語義,我們需要多么復(fù)雜的表達形式;而另一方面,我們想知道這種語言所能表達的概念,能夠達到怎樣的復(fù)雜度——形式非常復(fù)雜的語言也許只能表達非常簡單的語義,而非簡單的符號根據(jù)一定規(guī)則,就可以表達極其豐富的內(nèi)容。
在上面這道應(yīng)用題的例子當(dāng)中,計算機語言和自然語言所表達的意思是一樣的,可是表達的復(fù)雜程度差別很大。這樣的差異,在喬姆斯基譜系當(dāng)中,就表現(xiàn)為語言復(fù)雜度的不同。這也造成了計算機看得懂“計算機語言”,卻看不懂人類語言的現(xiàn)象。在圖上圓心最中間的,也就是最簡單的語言,我們稱之為正則語言(regularlanguages)。
正如字面上的意思,正則語言相對比較“規(guī)范”。它可以由一定的“生成語法”來生成,并且,可以被一個“有限狀態(tài)機”接受。
讓我們用下面這個例子來解釋。我們考慮一個正則表達式a(bb)+a,它的意思是匹配任意由a開始,由a結(jié)束,而其中有至少兩個,至多任意偶數(shù)個b的字符串(在這里不考慮開始和結(jié)束的約束符號)。
所謂的“有限狀態(tài)機”,就是如下圖的一個“機器”,它有一個起始狀態(tài)(a),有一個結(jié)束狀態(tài)(最后的a后面的那個雙線的圈),當(dāng)輸入的字符串根據(jù)其狀態(tài)轉(zhuǎn)移規(guī)則能夠走到結(jié)束狀態(tài)時,即說明“接受”了這個字符串。在下圖中,當(dāng)輸入為abbbba的時候,這個“機器”會依次根據(jù)狀態(tài)轉(zhuǎn)移的規(guī)則,一步一步走到最后的結(jié)束狀態(tài):
所以我們認為abbbba是符合這個規(guī)則的字符串,實際上也符合正則語言的要求。所有符合“正則”規(guī)范的字符串的合集,就是“正則語言”。
編程語言,通常是符合喬姆斯基譜系中“正則語言”或是“上下文無關(guān)語言”的規(guī)范的,因而我們有辦法制造出一種規(guī)范的方法來處理它們(即下圖中的“Non-deterministicpushdown automaton”——不用擔(dān)心這樣看起來很嚇人的術(shù)語,我們在這個系列中會慢慢介紹的),這就是計算機能夠理解編程語言的秘密。
(上表:不同類型的語言及其生成的語法規(guī)范)
如果將人類語言看成是一連串的字符串,那它符合這樣的規(guī)范嗎?我們是否可以制造出這樣一個“狀態(tài)機”?并“接受”所有的人類語言(例如:漢語)呢?
很不幸,人類語言的復(fù)雜度是高于程序語言的;自然語言是屬于Type-0,也就是最復(fù)雜的那一種語言。
以我們所舉的這道應(yīng)用題的例子來說,如果我們把“平均成績”換成“總分”,這就涉及到語義理解的問題。平均成績的意思是求平均數(shù),總分的意思是求和。電腦必須要具有這樣的常識,才能夠正確地工作。
60年代第一次“AI寒冬”就是由于所謂commonsense knowledge problem引起的:人們發(fā)現(xiàn)如果要采用暴力方法一個一個去定義所謂的常識,這樣的工作量過于巨大,超出了人類工作的能力。
或者,如果我們把最后一句話中的小明改成“他”,那么計算機需要通過查詢上下文才能正確理解“他”是指誰,這是一個指代消解的問題,而計算機暫時還不具備這個能力。
最后,如果改為問“請問小明最需要給哪一門補課?”,這就是一個有常識推理的問題,計算機需要理解一個常識,即一般而言都會補習(xí)最差的那門課,并且進行推理才能得到答案。
所以,我們在這里理清了這樣一個概念:雖然現(xiàn)代的計算機聰明到可以理解“編程語言”,但是同樣的技巧還不足以讓它去理解更加復(fù)雜的人類語言。這正是為什么在今天我們還需要成千上萬的程序員辛勤地工作的原因了。
上述這種通過嚴格的邏輯規(guī)則來解決AI問題的方法,就是“符號主義”。符號主義正是AI的聯(lián)合創(chuàng)始人之一、Lisp語言的發(fā)明者McCarthy所堅持的學(xué)派,這個學(xué)派主張:人類智能的問題,歸根結(jié)底,是可以用符號邏輯的方式解決的,而人類的語言,可以映射到一些抽象的邏輯規(guī)則上去。
根據(jù)這些規(guī)則可以進行推理,然后能夠幫助人類解決一些問題。當(dāng)然我們在上面也看到了,符號主義一個非常大的弊端就在于:在解決實際問題的時候,總是需要一些人類手工編寫的規(guī)則,而窮盡世間所有的規(guī)則的復(fù)雜度非常高——這導(dǎo)致了符號主義暫時性的失敗。
而與“符號主義”相對的是“連接主義”。連接主義認為解決復(fù)雜性的辦法就是學(xué)習(xí)人腦的結(jié)構(gòu),用“神經(jīng)元”以及神經(jīng)元之間的連接來表征世間萬物,而深度學(xué)習(xí)正是這種理念的代表。如果傳統(tǒng)的符號主義還不能夠解決我們的問題,那么近期取得了巨大進展的連接主義是不是有望在這個問題上取得突破呢?
神奇的深度神經(jīng)網(wǎng)絡(luò),以及不那么神奇的結(jié)果
首先讓我們來看一個好消息,這篇論文提出了:“神經(jīng)網(wǎng)絡(luò)可以模擬通用圖靈機”的論點。
(“圖靈機”的概念我們會在下一篇文章中具體介紹。)
現(xiàn)在我們只需要對照上面的“喬姆斯基譜系”,看到“圖靈機”是可以解析最復(fù)雜的“Type-0”語言的,就可以知道,如果神經(jīng)網(wǎng)絡(luò)可以模擬“圖靈機”,那么一定也可以用于處理非常復(fù)雜的語言,譬如說人類的自然語言。
但是落實到實際的應(yīng)用當(dāng)中,如果我們希望利用監(jiān)督式的機器學(xué)習(xí)方式,也就是說通過構(gòu)建一個足夠龐大、包羅萬象的訓(xùn)練數(shù)據(jù)集來讓機器學(xué)習(xí)到“自動編程”的方法,恐怕不太現(xiàn)實——我們怎么可能得到這么充分的訓(xùn)練數(shù)據(jù)呢?
所以,也許我們可以將問題稍作簡化,先解決一個復(fù)雜度相對可控的問題,然后再去考慮通用性。特別地,如果小明的各科成績都已經(jīng)儲存在一個數(shù)據(jù)庫里了,我們只需要針對這個表來回答一些問題呢?
這樣的話,我們的神經(jīng)網(wǎng)絡(luò)在給定一個輸入的問題的時候(比如說,小明的所有科目的平均分是多少?),會輸出以下的內(nèi)容:
1)列選擇。需要知道我們想要操作的列(是“分數(shù)”那一列)
2)操作符選擇。這里我們想選一個“AVERAGE”的操作。
3)行選擇。這里我們想要選擇所有行。
只要這三個選項都選對了,我們的神經(jīng)網(wǎng)絡(luò)就可以輸出正確的答案了。
這正是ICLR2017上面Google發(fā)表的一篇文章Learninga Natural Language Interface with Neural Programmer吧(暫時可以譯為“神經(jīng)程序員”)所采取的思路。
這樣一個神經(jīng)網(wǎng)絡(luò),要怎樣來訓(xùn)練呢?我們是要針對每一個問題,給他標(biāo)上這三個選項所應(yīng)該對應(yīng)的內(nèi)容嗎?這樣所需要的標(biāo)注數(shù)量,依然太過龐大了。
所以現(xiàn)實一點,我們希望這個網(wǎng)絡(luò)能夠利用弱監(jiān)督的方式來進行學(xué)習(xí),換句話說,只要對這個問題進行正確答案的標(biāo)注,這個網(wǎng)絡(luò)就會自動去學(xué)習(xí)寫程序(而不是死記硬背答案)了。這樣的話我們只需要針對一些有針對性的問題來標(biāo)注少量的答案,就可以訓(xùn)練出這樣的一個神經(jīng)網(wǎng)絡(luò)了。
但經(jīng)過這樣層層的簡化,谷歌的研究人員也還是只取得了以下的成果。
就算用15個這樣的模型進行Ensemble,在測試集上也只有37.7%的正確率——這已經(jīng)是state-of-the-art的結(jié)果了。
從這樣的結(jié)果看來,在第一回合的較量中,人工智能落了下風(fēng)。
雖然看上去程序員們還不會面臨立刻失業(yè)的危機,可是別忘了,在AlphaGo征服圍棋界之前,人們還一度以為電腦至少還需要10年才能在圍棋項目中擊敗頂尖的人類選手呢。
這其中的奧秘在于,AlphaGo能夠根據(jù)圍棋規(guī)則進行左右互搏式的“自學(xué)習(xí)”。但在自然語言理解的問題中,如果只是像上面介紹的這樣進行有監(jiān)督的學(xué)習(xí),是不太可能取得最終的成功的——這也是“連接主義”所面臨的一個巨大問題,即使在擁有巨大計算力和海量數(shù)據(jù)的今天,取得優(yōu)質(zhì)的人工標(biāo)注好的數(shù)據(jù)集也是很困難的一件事情。
那么如果我們能夠?qū)W習(xí)AlphaGo那樣,讓電腦自己去學(xué)習(xí)語言的規(guī)則呢?敬請期待【人機之間的巴別塔之謎】系列文章。
Reference
【1】Chomsky, Noam 1956,Three models for the description of language Stanford Encyclopedia of Philosophy 2013, Logic and Artificial Intelligence
【2】Hava T. Siegelmann, Eduardo D. Sontag1991, Turing Computability with Neural Nets of Computer Science
【3】Alex Graves, Greg Wayne, Ivo Danihelka 2014, Neural Turing Machines
【4】Scott Reed, Nando de Freitas 2016, Neural Programmer-Interpreters Arvind Neelakantan, Quoc V. Le, Martin Abadi, Andrew McCallum, Dario Amodei 2017
【5】Learninga Natural Language Interface with Neural Programmer
【6】Pengcheng Yin, Zhengdong Lu, Hang Li, Ben Kao 2016, Neural Enquirer: Learning to Query Tables with Natural Language
【7】Will Knight 2016, AI’s Language Problem
NLP實戰(zhàn)特訓(xùn)班:阿里IDST9大專家?guī)闳腴T
iDST 九大工程師首次在線授課,帶你快速入門NLP技術(shù)
課程鏈接:http://www.mooc.ai/course/83
加入AI慕課學(xué)院人工智能學(xué)習(xí)交流QQ群:624413030,與AI同行一起交流成長
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。