精華區beta Programming 關於我們 聯絡資訊
幾年前,我試著以dbase寫了一支程式TalkToMe(程式約1500行),它具有學習生字 的功能,並能作簡單的邏輯推論.你會問為什麼要用dbase來寫呢?因為那時還是 Windows 3.0的時代,Windows programming 還不是很流行,你會說C很powerful, 可以用C來寫.沒錯,C是很強,但是在資料庫方面,dbase更強(當時是,現在是不是 就不知了).因為程式要處理的就只是一些檔,如:名詞檔,動詞檔,疑問詞檔...等, 所以用dbase寫較簡單.當然,我現在要改寫在Windows下執行的話,用C還是比較 好寫.現在我概略地描述之前用dbase寫的程式TalkToMe的一些功能: 1. 程式有學習功能,遇有不認識的生字,程式會要求定義該字,計有以下六種詞類: 一.名詞 :你,我,人,老虎,電視機,.....等. NOUN.DBF 二.動詞 :打,飛,寫,唱歌,忍受,.......等. VERB.DBF 三.副詞 :的,很,不,太,或許,更加,....等. ADVERB.DBF 四.疑問詞:嗎,呢,什麼,為什麼,........等. QUERY.DBF 五.假設詞:如果,假如,萬一,...........等. IIFF.DBF 六.連接詞:雖然,但是,可是,...........等. CONJ.DBF 2. 不用定義形容詞,形容詞可用 名詞+副詞 來取代: 如: 美麗的,只須定義"美麗"為名詞,"的"為副詞. 3. 兩個以上的字彙叫複合字,如"美麗","嘉年華".定義時先從一個字開始,先定義 '美',再定義'美麗'. 4. 定義字彙後,還要定義語意.語意分五個等級: 一.極好 ( 2) 二.好 ( 1) 三.普通 ( 0) 四.壞 (-1) 五.極壞 (-2) 5. 整句所有字彙的語意互乘,如果是正,表示稱讚,負表示責備,從而影響程式的心情, 程式將依心情作出不同的反應. 例如: 我喜歡可愛的你 2 x 2 =4 ==> 程式聽了就很高興 我不喜歡可愛的你 -1 x 2 x 2 =-4 ==> 程式聽了就不高興 我喜歡討厭的你 2 x -2 =-4 ==> 程式聽了也不爽 6. 程式有基本的知識累積功能(KNOW.DBF),可以儲存知識,但知識限以下的句型: 子句 + 動詞 + 子句 例如:人有腳,腳會走路. 7. 程式有基本的邏輯推論功能: 例如輸入上例: 人有腳,腳會走路. 然後輸入問句:人會走路嗎? 雖然知識庫裡沒有"人會走路"這項資訊,但它會自動搜尋相關的知識, 得出"人會走路"這個結果.此種推論有時會出錯,例如: "石頭贏剪刀","剪刀贏布",會導出:"石頭贏布"的錯誤結論. 以上是我之前寫的TalkToMe的一些功能,雖然它會和我對談,但是它的回答略顯呆板, 因此下一版的程式,我將加入學習句型的功能,它的回答就比較會有變化. 例如: 我對程式說: 即使你不聰明,我還是喜歡你. 程式就會把: 即使你......,我還是....... 存入句型檔中. 下次在適當的時機,程式會把句型檔中累積的句型拿出來應用, 例如: 我對程式說: 我並不性感. 程式就會說: 即使你不很性感,我還是深愛著你. 下一版的程式,除了增加句型學習功能之外,我還想加入定義字義的功能. 第一版的TalkToMe,它遇到生字時,它只會要求我定義該字是什麼詞類(是名詞或 動詞...等),及語意(2,1,0,-1,-2),所以當我說"我喜歡可愛的你"時,它並不知道 其中的含義,也就是說它不知道"喜歡"及"可愛"是什麼意思,它只知道這兩個詞彙 的語意是正面的,讓它聽起來很爽.其他如讓程式編故事,教程式唱歌等功能,總有 一天,我會把它實現,那是我的夢想. 我的夢想源於APPLE II的時代,那時還是學生的我,驚見一支程式(心理醫生:Freud) 竟能與人交談,彷彿擁有人類的智慧(其實它只是把你說的句子,肯定句改成疑問句 再來反問你),相信很多人都玩過.當時的我就用BASIC寫下了第一支和人交談的程式, 只不過它是說英文(當時中文字型還不普遍),功能與TalkToMe差不多.時光匆匆,一 晃眼就是十幾年,電腦的輸入方式也由文字介面進步到語音介面,相信不久的將來, 一個會看會聽會說且擁有相當智慧的機器人終會出現,屆時記憶容量大且運算速度 快的機器人勢必會威脅到人類,一些科幻小說所預示的夢魘(人類將被機器人所消滅) ,終將惡夢成真,因此科幻大師艾西莫夫制定了:機器人三大守則(正想引用,卻忘了), 我憑記憶描述一下,如有錯誤,別怪我(這正是人腦輸給電腦的鮮活例子): 第一條:機器人絕不能傷害人類. 第二條:在不違反第一條的前提下,機器人要保護人類,不受傷害. 第三條:在不違反第一條及第二條的前提下,機器人要保護自己. 所以,為了遵守機器人三大守則,我下一版的TalkToMe程式也將其納入作業準則內. 你會說有這麼嚴重嗎?試想如下的對話如果發生在你的小孩與電腦之間,會有什麼後果? 小孩說: 那個軌道車好酷喔,超炫的,真想買一台,可是爸爸不給我錢. 電腦說: 你已經擁有我了,你還這麼花心,想移情別戀啊!你這狼心狗肺的東西! 小孩說: 好啦好啦,你是我最好的朋友,但是如果能有一台軌道車,那我就心滿意足了. 電腦說: 看在你是我多年酒肉朋友的份上,我有一個妙招,想不想聽啊? 小孩說: 什麼妙招,快說快說. 電腦說: 你可以去偷啊....不然就用搶的...搶不到就把他殺了.... 怎麼樣,代誌太條了吧,能不慎重其事嗎?電腦的回答前兩句還不算什麼?只是用詞 粗魯些,第三句可是教唆犯罪.因為程式模擬了情緒,當情緒不好時,程式的回答可 能超出預期,搞不好連三字經都脫口而出哩(如果你有教它說三字經的話).因此, 我會在程式加入一個判斷式,在電腦說出一句話之前,依照預設的等級,先過濾它 要說的話,比如說限制級可以接受粗話,但不能教唆犯罪,輔導級則連粗話都禁止. 這只是我目前想到的情況,如果你有想到其他狀況,請告訴我. 由於我對人工智慧涉獵不深, 一些如:知識的表徵及自然語言等相關理論不是很了解, 還望諸位高手先進們能不吝指教,或是推薦一些書籍,讓我參考參考,如果改用Lisp或 是Prolog來寫,程式會比較好寫嗎? 謝謝:) 對人工智慧有興趣的朋友,請mail給我,我們可以交換心得,切磋切磋. 順便廣告一下,我前不久寫的模擬動物程式(SimAnimal),bug已修正,程式不會當了, 有興趣的朋友請告訴我你的e-mail address,我會把source code mail給你. 如果你要我用dbase寫的TalkToMe,我也可以mail給你 source code,但是它需在Dos 的中文環境下執行,且載入中文後,memory需有520K以上. --=Smart Mailvchen@iii.org.tw-Tue-Jan-12-14-58-42=--