使用 ChatterBot构建聊天机器人

34 sec read

ChatterBot是一个基于机器学习的聊天机器人引擎,构建在python上,主要特点是可以自可以从已有的对话中进行学习。

安装调试最简单的聊天机器人

安装

基本使用

默认情况下, ChatterBot 使用JsonDatabaseAdapter作为storage adapter,使用ClosestMatchAdapter作为logic adapter, 使用VariableInputTypeAdapter作为input adapter。

storage adapter

ChatterBot创建之后,会建立一个类族适配器(adapter classes),在该适配器下该ChatterBot可以连接到不同类型的数据集。本文所采用的是JsonDatabaseAdapter,该Storage adapter是以json格式存储数据的。注意: JsonDatabaseAdapter 并不适用于海量数据,如果数据集过大该方法的性能将受到很大局限。

创建ChatterBot的时候可以在入参中指定JsonDatabaseAdapter,如下面的参数所示:

其中的database参数是用以指定所创建的chat bot所使用数据集的位置。上述的定义吗,我们可以看出该chat bot所使用的数据集是database.json,如果该database.json不存在的话,则会自动创建。注意:JsonDatabaseAdapter是ChatterBot的默认adapter,可以缺省。

输入和输出adapters

在创建ChatBot的时候可以指定输入和输出终端adapter。输入终端adapter用以读取终端的输入,输入终端adapter则是打印出chat bot的应答信息。

使用如下:

Logic adapters

在新建ChatBot的时候可以指定logic_adapters的值,该参数是一序列的logic adapter。在ChatBot中一个logic adapter就是一个类,这个类是用于接收输入的语句和反馈该输入的语句。

在logic adapter的使用数量上并不受限。下面的例子中可以看出,使用的是两个logic adapter。其中TimeLogicAdapter是返回当前时间,MathematicalEvaluation adapter则是用以计算问题的。

创建自己的adapters参考默认使用的ClosestMatchAdapterVariableInputTypeAdapter。如果需要语音输入,则可以调用百度语音接口。

让机器人支持中文

Chatterbot提供一个公用模块进行数据集的训练,目前该模块集成7种语种的训练,包括英语,葡萄牙语、西班牙语、法语、印尼语、意大利语和中文。训练集存放在\Lib\site-packages\chatterbot\corpus\data目录下:

corpus

使用中文语料库进行训练(注意,这里只支持Python 3,否则会报编码错误),报错内容为:UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xe4 in position 0: ordinal not in range(128)

ChatterBot也支持训练数据集的子集,如只想要训练英文问候语和对话,则只要将该两个子集导入进行训练即可:

里面虽然包含各种语言,但是训练集的数据非常的小,如需更好的表现,需要自己添加更多的数据。

手动训练机器人

ChatterBot 内置training class,也可以根据自己的需要自行创建,通过调用train()函数之前先调用set_trainer() 来进行设置。使用方法如下:

训练好的数据,默认存在./database.db(参考jsondatabase.py),不是sqlite数据库,实际是jsondb,对json做了封装(参考jsondb/db.py

只读模式

ChatterBot是会对每个输入的语句进行学习的。如果想要使得你已经训练过的bot不再继续学习输入的语句,可以通过以下方式进行设置,在初始化的时候将read_only设置为true。

最后一个问题,语料库可以从哪里来?

  • 电视电影字幕
  • 知识问答库

参考链接:

打赏作者
微信支付标点符 wechat qrcode
支付宝标点符 alipay qrcode

C语言学习:size_t

在学习C语言的时候,遇到了一个新的数据类型size_t,截止目前也没有完全理清这个类似的具体场景及出现的原因。
44 sec read

C语言学习:main()函数的正确写法

C语言虽然是一门古老的语言,但是其标准一直在完善,所以很多以前支持的语法在到当前已经不能在使用了。 C语言的版
41 sec read

Scipy数学函数的Scala实现

最近在推进项目的时候,遇到需要将线下的Python代码转化成线上的集群代码,由于机器代码环境是Scala,所以
4 min read

10 Replies to “使用 ChatterBot构建聊天机器人”

  1. 请问如何导入其他地方找到的语料库呢?谢谢

    1. 现在chatterbot支持json和yaml格式的,
      chatterbot.train(
      “chatterbot.corpus.english.greetings”,
      “chatterbot.corpus.english.conversations”
      )
      train中添加自己定义的数据即可

  2. 大神,你好,请问你知道在使用大规模数据集的时候response很慢怎么解决吗,不甚感激

    1. 我是换了MongoDB的存储适配器,训练大规模的数据集就快多了

  3. 大神能指点一下这个库主要用了什么技术吗?对于提的问题有没有进行词义、语义分析?

  4. Python 2 可以通过在源文件开头加上:
    # coding=UTF-8

    避免编码错误

  5. 如果仍然提示有编码错误,再加上如下几句:
    import sys
    reload(sys)
    sys.setdefaultencoding(‘utf-8’)

  6. 請問大大當我試著用mongodb建立資料,當我腳本有個3月7號這類的字眼,那
    我第一次說3月7號會回覆正確,第二次就會錯誤,會是什麼樣的問題?

发表评论

电子邮件地址不会被公开。 必填项已用*标注