ChatterBot聊天机器人初体验

Chatterbot 是基于pyhton实现的一个简单的聊天机器人,它需要大量对话语料来支撑它的运行。当用户给它一个输入时,它会在所有的语料库中寻找和这句话最相似的一句话,然后返回语料库中的下一句。chatterbot_corpus 是 Chatterbot 自带的语料库。本篇就先简单的写下chatterbot的安装使用。

一、安装

我们把chatterbot和示例的语料库一起安装下,这里使用pip的方式进行安装:

pip install chatterbot chatterbot_corpus

这样安装完后,还不能用,还需要安装spacy语言包才可以使用,不然直接用会报如下的错误:

File “/opt/miniconda3/lib/python3.7/site-packages/spacy/util.py”, line 139, in load_model
raise IOError(Errors.E050.format(name=name))
OSError: [E050] Can’t find model ‘en’. It doesn’t seem to be a shortcut link, a Python package or a valid path to a data directory.

解决方法是安装语言包,具体可以参考链接:https://spacy.io/usage/models ,对应的安装指令为:

python -m spacy download en_core_web_sm
python -m spacy download zh_core_web_sm
或
python -m spacy download en
python -m spacy download zh   //该条不一定能成功

二、训练

在使用前,需要先指定语料库进行训练,训练结果会存到数据库里,这里默认的是sqlite库,也支持mongodb等库。

from chatterbot import ChatBot
from chatterbot.trainers import ChatterBotCorpusTrainer
# Create a new instance of a ChatBot
bot = ChatBot(
    'mybot',
    storage_adapter='chatterbot.storage.SQLStorageAdapter',
    database_uri='sqlite:///database.db'
)
trainer = ChatterBotCorpusTrainer(bot)
trainer.train("chatterbot.corpus.chinese")
trainer.train("chatterbot.corpus.english")

这是创建一个聊天机器人,名字叫 mybot(你也可以改成自己起的名字),使用 Sqlite中的数据,建议使用mongodb数据。

 这句代码里面有一个单词 adapter,官方翻译为“适配器”。其实它更准确的含义是“组件”。创建 Chatbot 时还有很多 xxx_adapter 这样的参数,可以为机器人开启各种各样的功能。不过有一点要注意,有些功能可能只对于英语进行了适配,对其他语言支持并不好。

上在使用的就是chatterbot_corpus包默认安装的语料库内容,其对应的地址为:/lib/python3.7/site-packages/chatterbot_corpus/data/chinese(english)下,执行上面的训练输出如下:

chatterbot

训练完成后,训练的内容会保存在上面配置的数据库里。后面使用的时候就可以直接调用数据库执行。

三、使用

使用上面训练好的数据库里的内容,可以使用如下的代码进行测试:

from chatterbot import ChatBot
from chatterbot.trainers import ChatterBotCorpusTrainer
# Create a new instance of a ChatBot
bot = ChatBot(
    'Terminal',
    storage_adapter='chatterbot.storage.SQLStorageAdapter',
    database_uri='sqlite:///database.db'
)
trainer = ChatterBotCorpusTrainer(bot)
print('Type something to begin...')
def r(s):return bot.get_response(s).text
# The following loop will execute each time the user enters input
while True:
    try:
      i = input('>>> ').strip()
      if i != 'exit':
        print(r(i))
    # Press ctrl-c or ctrl-d on the keyboard to exit
    except (KeyboardInterrupt, EOFError, SystemExit):
        break

我这里使用小黄鸡语料库训练后的对话结果如下:

chat-xiaohuangji

发表回复

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