陳凱
本期文章要介紹的,是一個(gè)非常簡(jiǎn)單的基于邏輯編程的智能移動(dòng)問(wèn)答系統(tǒng),教師不僅能用它來(lái)教學(xué),還能用它來(lái)教學(xué)——前半句話的意思是,這個(gè)系統(tǒng)逐步搭建的過(guò)程,可作為人工智能邏輯編程入門(mén)階段的教學(xué)素材;后半句話的意思是,這個(gè)系統(tǒng)搭建成功之后,系統(tǒng)本身也可作為某些學(xué)科的教學(xué)工具。這個(gè)小系統(tǒng)可以在手機(jī)或其他移動(dòng)設(shè)備上運(yùn)行,針對(duì)特定查詢類別,使用者提供若干關(guān)鍵字,系統(tǒng)能給出和關(guān)鍵字相匹配的對(duì)象的名稱。為了能夠簡(jiǎn)單說(shuō)明問(wèn)題,本文以“校園野花查詢系統(tǒng)”為例,對(duì)系統(tǒng)的構(gòu)建過(guò)程進(jìn)行說(shuō)明。
對(duì)學(xué)習(xí)者來(lái)說(shuō),學(xué)用人工智能和學(xué)人工智能,兩者看上去很相近,或者說(shuō)的確也有相當(dāng)部分學(xué)習(xí)內(nèi)容存在交集,但兩者的學(xué)習(xí)目標(biāo)其實(shí)是不同的。若要勉強(qiáng)區(qū)分一下,那么前者是學(xué)習(xí)用人工智能的成果來(lái)實(shí)現(xiàn)某個(gè)任務(wù),或構(gòu)建出某個(gè)功能系統(tǒng);后者則主要是學(xué)習(xí)如何利用數(shù)學(xué)和邏輯上的方法來(lái)模擬、延伸和擴(kuò)展人的智能,學(xué)習(xí)中還常常涉及腦神經(jīng)科學(xué)、心理學(xué)、哲學(xué)等多個(gè)學(xué)科的學(xué)習(xí)內(nèi)容。
舉例來(lái)說(shuō),若想利用人工智能來(lái)幫助識(shí)別校園里的常見(jiàn)野花,可以用現(xiàn)成的“形色”或“花伴侶”軟件拍攝野花照片并聯(lián)網(wǎng)智能識(shí)別,這就是利用人工智能的成果來(lái)了解植物知識(shí),最多只能算是對(duì)人工智能應(yīng)用進(jìn)行體驗(yàn)。如果學(xué)習(xí)編寫(xiě)一個(gè)Python程序,調(diào)用網(wǎng)絡(luò)上的接口對(duì)野花圖片進(jìn)行智能識(shí)別,那么這其實(shí)是利用Python高粘合性的特點(diǎn),借助人工智能的功能接口來(lái)構(gòu)建出野花識(shí)別系統(tǒng),也很難說(shuō)是對(duì)人工智能本身進(jìn)行學(xué)習(xí)。那怎樣算是學(xué)習(xí)人工智能呢?那就一定要將野花辨識(shí)的機(jī)器學(xué)習(xí)過(guò)程展現(xiàn)出來(lái),然而,對(duì)于基礎(chǔ)教育階段的教學(xué)者和學(xué)習(xí)者來(lái)說(shuō),這不是件容易的事情,主要的瓶頸在于學(xué)習(xí)者數(shù)學(xué)和計(jì)算機(jī)科學(xué)方面知識(shí)技能儲(chǔ)備的限制。教學(xué)者可以引入一些策略來(lái)緩解以上矛盾,比如,將數(shù)學(xué)運(yùn)算參與到人工智能實(shí)現(xiàn)過(guò)程中的關(guān)鍵步驟和原理用圖形和動(dòng)畫(huà)的方式直觀顯現(xiàn)出來(lái),保留數(shù)學(xué)公式的應(yīng)用而適當(dāng)略過(guò)數(shù)學(xué)公式的推導(dǎo)過(guò)程;或者,重點(diǎn)剖析人工智能相關(guān)算法核心思想,同時(shí)降低數(shù)據(jù)結(jié)構(gòu)和算法的復(fù)雜性;再者,就是將適應(yīng)學(xué)習(xí)者當(dāng)前知識(shí)技能基礎(chǔ)的人工智能學(xué)習(xí)內(nèi)容作為優(yōu)先選取的教學(xué)內(nèi)容,并為學(xué)習(xí)者指明未來(lái)進(jìn)階的學(xué)習(xí)路徑。
“校園野花查詢系統(tǒng)”是一個(gè)用人工智能邏輯編程語(yǔ)言設(shè)計(jì)的迷你專家系統(tǒng),在根據(jù)植物特征描述識(shí)別野花這一功能上,其能力要強(qiáng)于一般的通用聊天機(jī)器人程序。和常見(jiàn)的上傳圖形智能識(shí)別野花種類的人工智能(通常用神經(jīng)網(wǎng)絡(luò)搭建)程序相比,這個(gè)迷你專家系統(tǒng)只能借助語(yǔ)言描述對(duì)植物進(jìn)行識(shí)別,其實(shí)現(xiàn)關(guān)鍵在于人工智能邏輯編程的運(yùn)用,能夠適應(yīng)基礎(chǔ)教育階段學(xué)習(xí)者的知識(shí)技能基礎(chǔ),不需要引入額外的預(yù)備知識(shí)技能。基于特征描述的迷你專家系統(tǒng)的應(yīng)用場(chǎng)景也不同于圖片智能識(shí)別,它更適合于植物分類學(xué)方面的基礎(chǔ)訓(xùn)練。
“校園野花查詢系統(tǒng)”使用邏輯編程語(yǔ)言實(shí)現(xiàn),它不同于基于步驟的程序設(shè)計(jì)語(yǔ)言,而是根據(jù)事實(shí)和規(guī)則,在知識(shí)庫(kù)中自動(dòng)進(jìn)行演繹推理。圖1所示的是一段Python簡(jiǎn)單代碼,通過(guò)建立事實(shí)和查詢來(lái)識(shí)別野花。
這是一個(gè)極端簡(jiǎn)化的例子,它只考慮了花瓣數(shù)量和花冠是否對(duì)稱(暫時(shí)只考慮輻射對(duì)稱的情況)。由于使用pyDatalog庫(kù)引入了自動(dòng)演繹推理,所以不需要按傳統(tǒng)的方法用分支結(jié)構(gòu)對(duì)用戶輸入信息進(jìn)行判斷,計(jì)算機(jī)會(huì)自動(dòng)進(jìn)行匹配,按代碼中的例子,就是在知識(shí)庫(kù)中匹配既符合4片花瓣,又符合花冠不對(duì)稱情況的所有事實(shí)。在這些代碼的基礎(chǔ)上稍微加以擴(kuò)展,就能體現(xiàn)出其知識(shí)積累和查詢的便捷性和靈活性。代碼如圖2所示。
這些簡(jiǎn)短的代碼只是用作邏輯編程的示例,要使其功能更加完整,還有許多可以改進(jìn)的地方。一方面,從植物學(xué)角度來(lái)看,有許多專業(yè)特征,如花序、葉序、葉緣、葉脈等都可以列入知識(shí)庫(kù)中;另一方面,從應(yīng)用交互來(lái)看,還要考慮到用戶可能有難以描述、描述錯(cuò)誤或省略描述的情況。
在知識(shí)庫(kù)中可以用“<=”符號(hào)來(lái)代表推理,在下頁(yè)圖3所示的代碼中,程序會(huì)自動(dòng)將具有“羽狀復(fù)葉”和“蝶狀”花這兩項(xiàng)特征的植物視作豆科植物。
從圖3所示的運(yùn)行結(jié)果可以發(fā)現(xiàn),雖然預(yù)先沒(méi)有存儲(chǔ)植物分類信息,但系統(tǒng)可以自己運(yùn)用知識(shí)庫(kù)里的事實(shí)和規(guī)則,嘗試對(duì)植物的分類進(jìn)行判斷,可以算是有了初步的智能。而為了進(jìn)一步完善這個(gè)專家系統(tǒng),學(xué)習(xí)者的進(jìn)階學(xué)習(xí)路徑也變得非常明確:一是怎樣對(duì)用戶輸入的語(yǔ)言文字進(jìn)行分析,從變化多端的語(yǔ)言文字中提取出關(guān)鍵特征信息;二是如何利用遞歸調(diào)用,進(jìn)一步提升系統(tǒng)的演繹推理能力。
要想在安卓系統(tǒng)的手機(jī)或平板上,而不僅僅是計(jì)算機(jī)上運(yùn)行這個(gè)迷你專家系統(tǒng),可以安裝QPython應(yīng)用,同時(shí),要記得用QPython界面的“系統(tǒng)”工具,或者調(diào)用“pip”程序在線安裝pyDatalog庫(kù),以實(shí)現(xiàn)知識(shí)庫(kù)和邏輯推理的功能。QPython還能調(diào)用安卓接口,使這個(gè)迷你專家系統(tǒng)使用起來(lái)更方便、更有趣,如調(diào)用拍照功能、經(jīng)緯度查詢功能等。圖4所示的代碼片段,是在QPython中調(diào)用安卓語(yǔ)音引擎實(shí)現(xiàn)語(yǔ)音輸出。
在實(shí)際操作中,可以利用訊飛的語(yǔ)音識(shí)別來(lái)輸入信息,系統(tǒng)在查詢或推理之后,用安卓的語(yǔ)音引擎將結(jié)果朗讀出來(lái),這就使得這個(gè)迷你專家系統(tǒng)的應(yīng)用十分具有趣味性。雖然利用現(xiàn)成的接口實(shí)現(xiàn)某些人工智能的能力非常簡(jiǎn)單,學(xué)習(xí)者也比較容易獲得成就感,但有必要提醒學(xué)習(xí)者的是,這其實(shí)就是通過(guò)調(diào)用、整合現(xiàn)成的人工智能成果來(lái)構(gòu)建自己的功能系統(tǒng),不能以此代替人工智能內(nèi)部原理的學(xué)習(xí)。