(一)興頭的產(chǎn)生 看到樓下陳蘇杭關(guān)于用人工智能判斷詩文的帖子,突然激活了我泯滅了 兩年多的對(duì)計(jì)算機(jī)人工智能(AI,,artificial intelligence)的興趣,。 想談一談,又覺得不帶上點(diǎn)文學(xué)的味道,,怕不能在這文學(xué)論壇上立足,。于是 乎,“假作真時(shí)真亦假,,無為有處有還無”,,自己命了這樣一個(gè)題:人工智 能判斷一篇文字是否是五言律詩。 不過,,人工智能不是一般的窮舉法加“If…Then…”計(jì)算機(jī)編程語句,。 我先說點(diǎn)自己的認(rèn)識(shí),才能心安理得地進(jìn)入正題,。 (二)人類對(duì)自己的挑戰(zhàn) 總的來說,,人工智能的研究開發(fā)進(jìn)度,至今還是令人失望,。在一九八○ 前后,,似乎有過一個(gè)高期望期,,但是人們很快就冷靜下來了。 首先是這個(gè)項(xiàng)目的復(fù)雜性,,涉及到哲學(xué),、邏輯學(xué)、數(shù)學(xué),、計(jì)算機(jī)科學(xué),、 生理學(xué)、心理學(xué),,等等,。從理論上講,人類對(duì)人工智能的研究,,限于數(shù)理邏 輯的不完整性,,并且是一個(gè)典型的“自我引證”的邏輯循環(huán)圈(self- referring logical loops)。一九三一年,,哥德爾(Kurt Godel)發(fā)表了 一篇論文,,被許多人認(rèn)為是二十世紀(jì)純數(shù)理邏輯發(fā)展最有意義的事件:他向 人們展示了基本數(shù)理邏輯的不完整性(The Incompleteness Theorem)。 簡單說來,,就是一些數(shù)理邏輯的“公理”,,例如2+2=4,是無法證明也 無法否定的,。關(guān)于“自我引證”,,古希臘哲學(xué)家埃皮明尼底斯(Epeminides )提出過一個(gè)著名的例子:“此言虛也”(“This statement is false” )。所謂“自我引證”就是證明者和被證明者為同一事體,?;舴蛩惯_(dá)特 (Hofstadter)在《哥德爾、埃舍,、巴赫》一書中(“Godel,,Escher, Bach”)詳細(xì)論述過人工智能的這兩大障礙,,限于篇幅,,我只能點(diǎn)到為止。 其次,,從工程實(shí)踐上講,,人工智能受制于計(jì)算機(jī)資源的發(fā)展。盡管在短 短的十五年內(nèi),,普通微機(jī)運(yùn)算速度從幾個(gè)MHz到了上千MHz,,內(nèi)存從幾百KB 到了近百萬KB,但是據(jù)說人腦的信息儲(chǔ)存能力在10的7次方個(gè)GB的數(shù) 量級(jí)(但愿我沒有記錯(cuò)),很明顯,,電腦和人腦單是“硬件”這個(gè)差距仍然 在短時(shí)間無法逾越,。幾年前,IBM的“深藍(lán)”系統(tǒng)(注意我用的“系統(tǒng)” 這個(gè)詞)戰(zhàn)勝了國際象棋冠軍卡爾帕若夫,,人們的確振奮了一下,,但隨之也 清醒地看到了人工智能事業(yè)之艱巨。第一,,國際象棋是一個(gè)相對(duì)簡單的“完 整信息系統(tǒng)”(后面將進(jìn)一步論及),,而且“完美”的游戲數(shù)理邏輯和代數(shù) (minimax)在五十年前就建立了,并有人不斷改進(jìn),。第二,,IMB動(dòng)用了 當(dāng)今最強(qiáng)大的電腦系統(tǒng),別的特制硬件不說,,單是用64個(gè)CPU來一對(duì)一 負(fù)責(zé)棋盤上64個(gè)位置的運(yùn)算,,就令人咋舌。有趣的是,,“深藍(lán)”系統(tǒng)的軟 件卻是相對(duì)地簡單,!基本上就是平行運(yùn)算,、成熟的游戲代數(shù),、由特級(jí)大師現(xiàn) 場調(diào)控的勝數(shù)函數(shù)(scoring function)、碩大無比的舊值表(hash table,,用來避免重復(fù)運(yùn)算),、龐大的開局和殘局?jǐn)?shù)據(jù)庫。 難搞并不等于放棄,,越具有挑戰(zhàn)性的項(xiàng)目,,對(duì)人們常常越有吸引力! (三)人工智能的兩大對(duì)象系統(tǒng) 完整信息系統(tǒng)是一個(gè)透明的,、沒有隱蔽條件的系統(tǒng),。圍棋、象棋就是典 型的例子,。棋子擺在棋盤上,,雙方都占有相同的原始信息(raw informa- tion)。從理論上講,,運(yùn)用改進(jìn)的 minimax 代數(shù),、單算子力(王=99, 皇后=9,,車=5,,馬、象=4,,兵=1)而不計(jì)位置優(yōu)勢的勝算函數(shù),,就 能做出永不輸棋的國際象棋程序,,只是這樣的程序按現(xiàn)在最好的計(jì)算機(jī)能力 也需要計(jì)算千百年才能走出第一步棋!圍棋主要是爭位置優(yōu)勢,,其勝算函數(shù) 仍然相當(dāng)不成熟,,連不入段的水平都難做到。 不完整信息系統(tǒng)是一個(gè)只公開部分信息的系統(tǒng),。例如橋牌,,在叫牌階段 只精確知道自己手上的牌,叫完后也只精確知道自己和明手的牌,。戰(zhàn)爭模擬 是另一類典型的不完整信息系統(tǒng),,情報(bào)再好,也是不完全的,。模糊邏輯是解 決這種體系的唯一手段,。 在不少情況下,很多不完整信息系統(tǒng)可以通過限制條件而轉(zhuǎn)換為完整信 息系統(tǒng),。我后面要做的判斷詩詞格律的“人工智能”就是這樣,。這里先舉個(gè) 極端的例子。大家都知道戰(zhàn)國時(shí)期孫臏的賽馬決策:“下馬對(duì)上馬,,中馬對(duì) 下馬,,上馬對(duì)中馬”。如果我們做兩個(gè)數(shù)理邏輯定義:再快的下馬也快不過 中馬,,再快的中馬也快不過上馬,,這就形成了一個(gè)完整信息系統(tǒng)。用簡單的 minimax和幾十行源碼,,一秒鐘不到的運(yùn)算,,就能得出和孫臏同樣的結(jié)論。 有的系統(tǒng)似乎是完整信息的,,但由于數(shù)理邏輯處理的復(fù)雜性,,也失去了 部分有用的信息,而成為“不完整信息系統(tǒng)”,。人工智能的一個(gè)大項(xiàng)目“物 體識(shí)別”就是如此,。作為第一步的“圖形識(shí)別”,就是認(rèn)清明擺在那里的一 件東西,,再賦予它準(zhǔn)確的邏輯意義,,為后面的判斷打下基礎(chǔ)。對(duì)于簡單的歐 基里德幾何各體,,對(duì)象素進(jìn)行矩陣代數(shù)運(yùn)算,,基本上能解決。稍稍復(fù)雜一點(diǎn) 的,就力不從心了,。美國最新的“戰(zhàn)斧”巡航導(dǎo)彈,,前幾百公里由全球定位 系統(tǒng)(GPS)制導(dǎo),是人們預(yù)先設(shè)置好的,,談不上人工智能,,只有最后幾公 里,打開了彈攜攝像機(jī),,尋找具體目標(biāo),,才有一點(diǎn)“圖形識(shí)別”的意義。盡 管一般建筑物的外形是簡單的幾何體組合,,這“戰(zhàn)斧”還是常?!翱场逼兀? 那可以說是代表了目前最先進(jìn)的“圖形識(shí)別”人工智能技術(shù),,更何況更深一 層的“物體識(shí)別”,?兩個(gè)同樣大小、漆成白色的木球和銅球,,即使識(shí)別出了 是相同的球體,,仍然沒有解決問題的一半:雖然伽利略在比薩斜塔證明它們 作為自由落體有共同點(diǎn),你把它們?nèi)舆M(jìn)水里,,一沉一浮卻是迥然不同的,。海 灣戰(zhàn)爭中有一定數(shù)量的坦克毀于“友邦火力”,也可見“物體識(shí)別”人工智 能的致命性,。另一方面,,因?yàn)槿狈y(tǒng)一的數(shù)理工具,有些“圖形識(shí)別”看似 復(fù)雜,,做起來卻很簡單。一個(gè)明顯的例子就是指紋甄別:你在象素矩陣?yán)镎? 到分岔點(diǎn)(minutiae)連接起來,,再比較它們的相對(duì)位置就行了,。 (四)數(shù)理邏輯的精巧性 對(duì)于數(shù)理邏輯,西方人常常強(qiáng)調(diào)其“精巧性”(elegance),。說穿了,, 所謂“精巧性”就是用簡單而嚴(yán)密的代數(shù)方程描述邏輯。例如歐基里德幾何 的邏輯,,傳統(tǒng)是用畫線畫圓來描述和證明,。迪卡爾(Descartes)于一六一 九年十一月十號(hào)(他的日記記下了這個(gè)精確的日子),躺在戰(zhàn)地醫(yī)院床上,, 看著天花板一角一只飛來飛去的蒼蠅而觸動(dòng)靈感,,發(fā)明了迪卡爾坐標(biāo)系。從 那以后,不但歐基里德幾何變得精巧了,,非歐幾何也成為可能,。在計(jì)算機(jī)人 工智能的開發(fā)上,將邏輯問題用簡單的代數(shù)公式來表達(dá),,已經(jīng)不是選項(xiàng),,而 是必需! 多次提到的minimax游戲代數(shù),,就充分體現(xiàn)了“精巧性”,,這個(gè)一切智 力游戲的邏輯基礎(chǔ),其核心部分,,用C/C++等支持循環(huán)調(diào)用(recursive calls,,即一個(gè)函數(shù)調(diào)用這個(gè)函數(shù)本身)的語言寫出來,可以不超過30個(gè) 句子,!這循環(huán)調(diào)用的技術(shù)本身,,也是解決不可測循環(huán)深度的人工智能運(yùn)算的 首選手段。一個(gè)談不上什么人工智能的BBS程序,,事先不能預(yù)料一個(gè)頭帖 會(huì)有多少跟帖,,編程者可以預(yù)設(shè)一個(gè)最深層次,例如1000吧,,雖然足夠,, 但在數(shù)理邏輯上總是不穩(wěn)的、不夠精巧的,。而循環(huán)調(diào)用卻能簡單地做到不依 靠任何預(yù)設(shè)常數(shù),,因?yàn)楹笳吣茏晕遗袛嗌钊脒€是中止的邏輯操作,算是淺顯 的“人工智能”,。 (五)詩詞格律的人工智能 現(xiàn)在,,該做自己的作業(yè)了。 判斷一篇文字是否是五言律詩屬于人工智能中最難命題之一的“自然語 言處理”(natural language processing),。為了自己能做,,需要定義一 些條件,使之成為一個(gè)“準(zhǔn)”完整信息系統(tǒng): (1)五言律詩有四個(gè)基本句式: 仄仄平平仄 平平仄仄平 平平平仄仄 仄仄仄平平 這里不包括所謂“孤平補(bǔ)救”(平仄平仄平)的特例,。當(dāng)然,,主要問題 解決后,多加幾個(gè)“If … Then …”邏輯判斷來處理“孤平補(bǔ)救”并不是 什么太難的事,。 (2)嚴(yán)格的“粘對(duì)”法則 律詩中的奇數(shù)句叫“出句”,,偶數(shù)句叫“對(duì)句”,出句和緊跟的對(duì)句組 成一“聯(lián)”,。按照“一三不論,,二四分明”的字位,,同一聯(lián)中,出句和對(duì)句 的平仄要相反,,上聯(lián)對(duì)句和下聯(lián)出句的平仄要相同,。這就是“粘對(duì)”法則。 (3)沒有脫簡串簡,、缺字串字的情況,。 (4)對(duì)句(或首句)的韻,屬于語音判斷(phonetics)的項(xiàng)目,,不在這 里考慮,。 (5)所判斷的文字能準(zhǔn)確分句,即有分句符號(hào)(delimiter),,或者是標(biāo) 點(diǎn),,或者是空位,或者是斷行,。這個(gè)不是必要條件,,不行就數(shù)五個(gè)字算一句。 這個(gè)“準(zhǔn)”完整信息系統(tǒng)定義后,,就可以著手按下列步驟開發(fā),。 (1)首先在計(jì)算機(jī)建立一個(gè)漢字平仄圖錄(map)或者數(shù)據(jù)庫,以便能迅 速有效地確定一個(gè)漢字的平仄,。陰平和陽平是平聲,,上聲和去聲是仄聲,這 是沒有問題的,。但已經(jīng)在現(xiàn)代普通話里消失了的入聲(吳系方言似乎還保留 著)屬于仄聲,,并分別演化成了上述四聲:化入上聲和去聲的無所謂,反正 都是仄,,并入陰平和陽平則有點(diǎn)麻煩(例如“國”,、“白”)。不過這個(gè)圖 錄或者數(shù)據(jù)庫是一次建立,,永久使用,。雇一個(gè)江浙一帶的人來搞,應(yīng)該準(zhǔn)確,。 (2)為了“精巧”地使用邏輯代數(shù),將五言律詩的四個(gè)基本句式用一個(gè)整 數(shù)來表示,。辦法之一可以這樣:在32-bit操作系統(tǒng)中,,一個(gè)整數(shù)(integer) 含有32個(gè)bits,原則上可以用來表示最多三十二個(gè)字的句子,,對(duì)五言律詩是 多多有余,。從最小bit開始,,句子中每一個(gè)字占一個(gè)bit,平聲為“0”,,仄 聲為“1”: 句 式 二進(jìn)制 十進(jìn)制 ————— ————— ——— 仄仄平平仄?。保埃埃保薄。健?9 平平仄仄平?。埃保保埃啊,。健?2 平平平仄仄 11000?。健?4 仄仄仄平平?。埃埃保保薄。健? (3)將被判斷的文字,,按分句符號(hào)為界讀入內(nèi)存,,按上列代數(shù)通過漢字平 仄圖錄或者數(shù)據(jù)庫進(jìn)行賦值,如果不是這四個(gè)基本句式中的任何一個(gè),,就可 以立即否定返回,。句式判斷肯定后,保留這一句的賦值,。 (4)讀入下一句并賦值,,先判斷新一句的句式,符合后再用 bit級(jí)邏輯代 數(shù)判斷“粘對(duì)”法則,。設(shè)有兩個(gè)句子,,賦值分別為A和B,則 “粘”成立如果(A AND 10)XOR(B AND 10)= 0,, 這里“XOR”是排己或然操作,,而“AND 10”的操作是施行“一三不論, 二四分明”的過濾(十進(jìn)制10=二進(jìn)制01010),; “對(duì)”成立如果(A AND 10) XOR (B AND 10) = 10,。 (5)保留最后一句的賦值,重復(fù)(4)到(5)直到文字全部讀完,,或者某 一步出現(xiàn)否定結(jié)果,。 (6)如果同時(shí)紀(jì)錄讀入的句數(shù),還可以判斷肯定了的文字是五絕,、五律,、 長律,還是沒有寫完的作品(最后的出句沒有對(duì)句),。 上面的開發(fā)過程,,很容易引申到七言: 句 式 二進(jìn)制 十進(jìn)制 ——————— ——————— ——— 平平仄仄平平仄 1001100?。健?6 仄仄平平仄仄平?。埃保保埃埃保薄,。健?1 仄仄平平平仄仄 1100011?。健?9 平平仄仄仄平平?。埃埃保保保埃啊。健?8 “粘”成立如果(A AND 42)XOR(B AND 42)= 0,, “對(duì)”成立如果(A AND 42) XOR (B AND 42) = 42,。 至于詞,在句式方面工作量要大些,,因?yàn)槊總€(gè)詞牌有不同的句式結(jié)構(gòu),, 需要建立詞牌賦值(每個(gè)詞牌由一串整數(shù)構(gòu)成)的數(shù)據(jù)庫,然后逐句判斷,。 但是,,詞沒有統(tǒng)一的“粘對(duì)”法則,在本身的句式結(jié)構(gòu)里面就包括了,。 (六)最后幾句話 上面判斷五言律詩的人工智能,,大致是可以用的,也留下了許多改進(jìn)提 高的余地,,例如“孤平補(bǔ)救”的特例,。具體的源碼則視編程語言有所不同。 最后,,我想再說一遍:人工智能不是簡單的窮舉法加“If … Then…”,, 而是一門數(shù)理邏輯和計(jì)算機(jī)結(jié)合的科學(xué)。遠(yuǎn)未成熟,,大家努力,! |
|