Py学习  »  Python

拥有自动学习的Python 机器人- ChatterBot

Python网络爬虫与数据挖掘 • 7 年前 • 1940 次点击  

「聊天机器人」一直是许多企业、学界在专研的东西,它可以用于许多用途上,例如淘宝会有机器人客服人员,会透过机器人来帮助你解决问题,又或者是很多聊天室都会有聊天机器人这种东西,例如Line 当中有人制作出了「卡米狗」,透过与使用者聊天当中学习语具,并在对应的场合当中回应相对应的回答。

而ChatterBot是一个基于机器学习的聊天机器人引擎,使用Python作为主要基底语言,可以基于已知会话的集合生成回应,另外ChatterBot的语言独立设计允许它被训练以说任何语言。

在官方的GitHub 当中有一段范例:

  • user: Good morning! How are you doing?

  • bot: I am doing very well, thank you for asking.

  • user: You’re welcome.

  • bot: Do you like hats?

又或者说,曾经我有将ChatterBot结合到LineMessageAPI的范例当中:

范例

如果对于LineMessageAPI有兴趣的话,可以详情:Line Message API初战!

接下来我们开始来讲解该如何使用这套ChatterBot吧!首先我们必须要拥有Python,这边可能需要小小的注意一下说:

Python 3.x -> 可以支持中文。Python 2.x -> 可能没办法支持中文,会有编码上的问题。

再来你需要PyPi这套东西,然后透过它来下载:

pip install chatterbot

安装完成之后,我们就可以开始透过Python来使用ChatterBot了!

让我们来看看简单的使用范例吧:

# 引入 ChatBot
from chatterbot import ChatBot

# 建立一個 ChatBot 物件
chatbot = ChatBot(
   'Ron Obvious',
   trainer = 'chatterbot.trainers.ChatterBotCorpusTrainer'
)

# 基於英文的自動學習套件
chatbot.train("chatterbot.corpus.english")

# 與 ChatBot 對話,並且取得回應
chatbot.get_response("Hello, how are you today?")

当然除了英文语言库外,还拥有中文语言库(简体中文)。

chatbot.train("chatterbot.corpus.chinese")

当然也不止这些,我们可以透过载入基本语言库、问候语言库、对话语言库,来让我们的机器人更加的智慧:

# 載入(簡體)中文的基本語言庫
chatbot.train("chatterbot.corpus.chinese")

# 載入(簡體)中文的問候語言庫
chatbot.train("chatterbot.corpus.chinese.greetings")

# 載入(簡體)中文的對話語言庫
chatbot.train("chatterbot.corpus.chinese.conversations")

当然我们能够载入一些库,是不是代表说,在ChatterBot当中,有某个地方存放着这些库呢?我们打开ChatterBot专案底下的Corpus -> data资料夹,我们会发现有几些档案夹很熟悉呢!其中有一个档案夹叫做chinese,我们打开他后会发现:

  • 基本对话的库

  • conversations.corpus.json

  • 问候语句的库

  • greetings.corpus.json

  • 详细问题的库

  • trivia.corpus.json
    这三个档案表面上不晓得这是什么意思,我们就来实际打开来看看吧!首先是conversations.corpus.json:

    {
     "conversations": [
         [
             "早安~",
             "午安~",
             "晚安~",
             "我想睡覺了",
             "我想去吃飯",
             "你好嗎",
             "我想去洗澡",
             "我媽叫我去吃飯"
         ],
         [
             "你好",
             "尼好",
             "你好嗎",
             "我還不錯",
             "那很好",
             "是啊",
             "我能幫你甚麼忙嗎",
             "我有個問題",
             "甚麼問題啊",
             "我可以抱抱嗎",
             "來ㄛ來抱ㄛ!",
             "好啊!",
             "<3"
         ],
         [   "什麼是愛",
             "就是你對我的感覺ㄛ <3"
         ],
         [
             "你愛我嗎?",
             "我知道我的主人很愛我喔!"
         ]
     ]
    }

看起来就像是普通的对话语句,不过设计经验上,会建议如果要自己建立语言库的话,conversations 的语句当中,最好是连续的对话。

接下来我们看看greetings.corpus.json 档案的内容吧:




    
{
   "greetings": [
       [
           "安安",
           "尼好呀!"
       ],
       [
           "最近如何",
           "還好ㄅ"
       ],
       [
           "最近如何",
           "很棒"
       ],
       [
           "最近如何",
           "OKㄅ"
       ],
       [
           "最近如何",
           "不好!"
       ],
       [
           "你還好嗎",
           "超級不好!"
       ],
       [
           "你還好嗎",
           "超級好!"
       ]
   ]
}

看起来就是简单的一问一答,不过这种状况只在聊天刚开始的时候才会发生,就是简单的问候句。

最后我们看看trivia.corpus.json 档案的内容吧!

{
   "trivia": [
       [
           "誰是作者?",
           "乾太大神!"
       ]
   ]
}

很典型的问答,所以如果你想设计的是一个客服机器人的话,那你trivia 当中的内容就会比较多哦!

如果你已经设计好你的Corpus(库) 的话,我们就来实机测试看看吧!

import sys
from chatterbot import ChatBot
from chatterbot.trainers import ChatterBotCorpusTrainer

class KantaiBOT:
   # 建立一個 ChatBot
   chatbot = ChatBot(
       # 這個 ChatBot 的名字叫做 KantaiBOT
       "KantaiBOT",
       storage_adapter = "chatterbot.storage.JsonFileStorageAdapter",
       # 設定訓練的資料庫輸出於根目錄,並命名為 KantaiBOT_DB.json
       database = "./KantaiBOT_DB.json"    
   )

   def __init__(self):
       self.chatbot.set_trainer(ChatterBotCorpusTrainer)
       self.chatbot.train("chatterbot.corpus.chinese")

   def getResponse(self, message=""):
       return self.chatbot.get_response(message)

if __name__ == "__main__":
   bot = KantaiBOT()
   print(bot.getResponse(sys.argv[1]))

使用时只要在终端机中下指令:

python KantaiBOT '你想說的內容'

机器人就会立即回应你了,这方法是为了衔接之前的LineBOT 来实作,你可以使用PHP、JSP、ASP.NET 或Node.js 都可以,去呼叫这支Python 程式码,去启动这个机器人,并且获取回应回传到Line Server 当中,就完成简易又能自动学习对话的机器人了!

来源:https://kantai235.github.io/2017/03/16/ChatterBotTeaching/


学习Python和网络爬虫,关注公众号:datanami

近期文章:

  1. python实战,教你用微信每天给女朋友说晚安

  2. 这是一篇福利教程,用Python编写一个简单的爬虫

  3. 给Python新手的一道面试题:如何正确读写文件

  4. wtfPython—Python中一些奇妙的代码

  5. Python后端架构演进


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/3nRgDaiPIx
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/21891