用Python快速實現(xiàn)一個聊天機器人

聊天機器人已經(jīng)有了很多很好的實現(xiàn),比如圖靈機器人箱锐、微軟小冰都非常的智能而且語氣都與人類相似辫呻。但這并不是一件一勞永逸的事情,在特定的場景下問題的回答是有邊界的或者符合特定業(yè)務場景的蚯根,所以還是需要可以按需定制開發(fā)的機器人后众。

chatterBot項目是一個用Python實現(xiàn)聊天機器人的開源項目(作者:Gunther Cox胀糜,github地址),下面介紹下chatterBot的實現(xiàn)方式以及如何在這個項目的基礎上做定制開發(fā):

chatterBot將一個機器人分為input Adapter蒂誉、logic Adapter教藻、storage Adapter、output Adapter以及Trainer模塊右锨。

input Adapter: 這個模塊被設計用來獲取并處理用戶輸入括堤,獲取輸入是指自動從外部獲取輸入,比如從gitter room, twitter等這些都是項目自帶的輸入插件绍移。處理用戶輸入是把獲取到的輸入轉化為可以進行下一步處理的Statement對象悄窃。Statement對象是對用戶輸入的抽象,包含了輸入的text蹂窖,附加信息并提供了序列化轧抗,對比等方法。input Adapter被設計成為插件式的瞬测,所以在實踐當中横媚,我們可以實現(xiàn)自己的input Adapter,比如為每個用戶打上id月趟,這樣輸入就包含了用戶信息灯蝴,在接下來的處理中就可以根據(jù)不同用戶實現(xiàn)不同邏輯了。

logic Adapter: 完成輸入處理后就到了邏輯處理狮斗,這依然是一個插件式的設計绽乔,主進程在啟動時會將用戶定義的所有邏輯處理插件添加到logic context中,然后交MultiLogicAdapter進行處理碳褒,MultiLogicAdapter會依次調用每個logic Adapter折砸,logic Adapter被調用時先執(zhí)行can_process方式判斷輸入是否可以命中這個邏輯處理插件。比如說 "今天天氣怎么樣"顯然需要命中天氣邏輯處理插件沙峻,但時間邏輯處理插件的can_process方法則應該返回False睦授。在命中后logic Adapter要負責計算出對應的回答(也是包裝成Statement對象)以及可信度(confidence),MultiLogicAdapter會取可信度最高的回答摔寨,并進入下一步去枷。項目已經(jīng)自帶了很多l(xiāng)ogic Adapter,有close match是复、close meaning删顶、時間邏輯、數(shù)學邏輯淑廊,甚至還有情感邏輯逗余,大家可以自己探索。在實踐當中季惩,我們還是需要自己定制開發(fā)一些邏輯處理插件录粱,如果我們希望自己的邏輯處理插件優(yōu)先級始終高于自帶的插件腻格,可以提高confidence,自帶的邏輯處理插件返回的confidence最大是1啥繁,只要confidence比1大就是最高優(yōu)先級了菜职。

storage Adapter: 剛才介紹logic Adapter時其實還有一點沒有說明,就是大部分的邏輯處理還是基于訓練集的旗闽,在處理時需要與訓練集做匹配婿滓,所以這個項目將訓練集的持久化也做成了插件式的际跪,自帶的持久化有文件型(json格式)鼻百、mongodb岗照,我們也可以做自己的持久化層蚕钦,比如支持redis亭病,支持mysql。

output Adapter: 這個模塊就不用詳細介紹了嘶居,基本與input Adapter一致罪帖,只是這里處理的是輸出。也是插件式設計邮屁,所以我們也可以定制開發(fā)整袁,比如與騰訊等語音合成服務提供商的接口集成,我們的機器人就可以"開口說話了"佑吝。

Trainer: 這個模塊提供訓練機器人的方法坐昙,自帶的方法有兩種,一種是通過輸入list來訓練芋忿,比如["你好"炸客,"你好啊"],后者是前者的回答戈钢,另一種是通過導入Corpus格式的文件來訓練痹仙。如果這兩種方法都沒有辦法滿足的話,我們還可以寫自己的訓練模塊殉了,但總的來說還是要將最終的訓練集轉換成上述兩種類型开仰。

總結: chatterBot這個項目并不是一個非常完善的聊天機器人項目(如果你希望一安裝就獲得一個話嘮一樣的機器人那就可以放棄了),總的來說自帶的功能有限薪铜,但是這個項目并不簡單众弓,因為項目本身結構非常清晰,又高度插件化隔箍,所以非常適合在此基礎上做定制化開發(fā)谓娃,so 動手吧。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末鞍恢,一起剝皮案震驚了整個濱河市傻粘,隨后出現(xiàn)的幾起案子每窖,更是在濱河造成了極大的恐慌,老刑警劉巖弦悉,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件窒典,死亡現(xiàn)場離奇詭異,居然都是意外死亡稽莉,警方通過查閱死者的電腦和手機瀑志,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來污秆,“玉大人劈猪,你說我怎么就攤上這事×计矗” “怎么了战得?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長庸推。 經(jīng)常有香客問我常侦,道長,這世上最難降的妖魔是什么贬媒? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任聋亡,我火速辦了婚禮,結果婚禮上际乘,老公的妹妹穿的比我還像新娘坡倔。我一直安慰自己,他們只是感情好脖含,可當我...
    茶點故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布罪塔。 她就那樣靜靜地躺著,像睡著了一般器赞。 火紅的嫁衣襯著肌膚如雪垢袱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天港柜,我揣著相機與錄音请契,去河邊找鬼。 笑死夏醉,一個胖子當著我的面吹牛爽锥,可吹牛的內容都是我干的。 我是一名探鬼主播畔柔,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼氯夷,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了靶擦?” 一聲冷哼從身側響起腮考,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤雇毫,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后踩蔚,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體棚放,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年馅闽,在試婚紗的時候發(fā)現(xiàn)自己被綠了飘蚯。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡福也,死狀恐怖局骤,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情暴凑,我是刑警寧澤峦甩,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站搬设,受9級特大地震影響穴店,放射性物質發(fā)生泄漏。R本人自食惡果不足惜拿穴,卻給世界環(huán)境...
    茶點故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望忧风。 院中可真熱鬧默色,春花似錦、人聲如沸狮腿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽缘厢。三九已至吃度,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間贴硫,已是汗流浹背椿每。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留英遭,地道東北人间护。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像挖诸,于是被迫代替她去往敵國和親汁尺。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,573評論 2 353

推薦閱讀更多精彩內容