Python下兩種曲線救國實現(xiàn)AIML中文聊天機器人功能的方法

alicebot.jpg

AIML,全稱Artificial Intelligence Markup Language,是一種XML模式,用做自然語言聊天機器人的規(guī)則庫。
最簡單的AIML規(guī)則如下:

<?xml version="1.0" encoding="GB2312"?>
<aiml>
<category>
    <pattern>* bye</pattern>
    <template>byebye</template>
</category>
</aiml>

<pattern>中的“* bye”為模式。比如輸入“mike,bye”就可以匹配該模式(*表示任意字符),然后AIML解釋器就會根據(jù)規(guī)則庫返回“byebye”作為回復。

更復雜的aiml規(guī)則可參考:AlicebotAIML介紹

應用實例可參考:基于Python如何使用AIML搭建聊天機器人

Aiml可以用來實現(xiàn)對話機器人,但是用于中文有以下問題:

  1. 中文規(guī)則庫較少。規(guī)則庫相當于對話機器人的“大腦”,一般來說,規(guī)則庫越豐富,對話機器人的應對就更像人。目前英文的規(guī)則庫已經(jīng)很豐富,涵蓋面很廣,而且是公開可獲取的。但公開的中文規(guī)則庫就基本沒有。
  2. AIML解釋器對中文支持不好。實際上,Python下的Pyaiml模塊(解析器)已經(jīng)能比較好的支持中文,但是也存在以下問題:
    英文單詞間一般都有空格或標點區(qū)分,因此具備一種“自然分詞”特性,
    比如模式“* BYE”很自然的就和“mike,bye”匹配,而且一般也不會寫成無空格的"BYE";
    但是中文的“
    再見”(無空格),與“* 再見”(有空格)匹配的就是不同的模式,
    分別匹配"邁克,再見”和“邁克, 再見”(再見前必須有空格)。

由于中文輸入沒有以空格分隔的習慣,以上會在實踐中造成一些不便。比如要實現(xiàn)有/無空格的輸入匹配,就需要在規(guī)則庫中同時包含這兩種模式。

這種情況下,很多中文aiml規(guī)則庫在實現(xiàn)時,就采取了在每個單字間人為增加空格的方法;同樣,進行輸入匹配的時候,也需要對輸入添加空格來進行匹配。

針對上述問題,提出兩種曲線救國的思路:

1.通過翻譯工具解決AIML對中文的處理,比如輸入內(nèi)容先經(jīng)過翻譯處理后變成英文內(nèi)容,英文內(nèi)容經(jīng)AIML處理后輸出,輸出再翻譯成中文顯示。

輸入中文->翻譯為英文->AIML處理->英文結(jié)果->翻譯成中文

好處是可以直接利用現(xiàn)有的英文規(guī)則庫

經(jīng)測,可實現(xiàn)。

但因為要用到翻譯api,實現(xiàn)效果跟翻譯api的質(zhì)量有關(guān),另外在沒有網(wǎng)絡(luò)的情況下,較難實現(xiàn)。

參考代碼如下:

import aiml
from translate import Translator
# 創(chuàng)建Kernel()和 AIML 學習文件
kernel = aiml.Kernel()
kernel.learn("std-startup.xml")
kernel.respond("load aiml b")
# 按組合鍵 CTRL-C 停止循環(huán)
while True:
    translator = Translator(to_lang='en', from_lang='zh')
    backtranslator = Translator(to_lang='zh',from_lang='en')
    original = raw_input(u"請輸入信息 >> ")
    print original
    message = translator.translate(original)
    print message
    response = kernel.respond(message)
    print backtranslator.translate(response)

2.利用中文分詞工具(如jieba)進行分詞,而不是每個單字間添加空格。

為了實現(xiàn)中文輸入與模式的對應關(guān)系。建立規(guī)則庫時,用分詞工具對匹配模式進行預處理;在處理輸入信息時,使用相同的分詞工具進行處理。

基本思路和逐字添加空格類似。但是分詞工具能同時兼顧中文的語義表達性。

本文采用ulysses寫作。
寫作耗時:50分鐘
發(fā)布到簡書耗時:20分鐘

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容