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

一、安装

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

1pip 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 ,对应的安装指令为:

1python -m spacy download en_core_web_sm
2python -m spacy download zh_core_web_sm
34python -m spacy download en
5python -m spacy download zh   //该条不一定能成功

二、训练

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

 1from chatterbot import ChatBot
 2from chatterbot.trainers import ChatterBotCorpusTrainer
 3# Create a new instance of a ChatBot
 4bot = ChatBot(
 5    'mybot',
 6    storage_adapter='chatterbot.storage.SQLStorageAdapter',
 7    database_uri='sqlite:///database.db'
 8)
 9trainer = ChatterBotCorpusTrainer(bot)
10trainer.train("chatterbot.corpus.chinese")
11trainer.train("chatterbot.corpus.english")

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

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

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

chatterbot
chatterbot

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

三、使用

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

 1from chatterbot import ChatBot
 2from chatterbot.trainers import ChatterBotCorpusTrainer
 3# Create a new instance of a ChatBot
 4bot = ChatBot(
 5    'Terminal',
 6    storage_adapter='chatterbot.storage.SQLStorageAdapter',
 7    database_uri='sqlite:///database.db'
 8)
 9trainer = ChatterBotCorpusTrainer(bot)
10print('Type something to begin...')
11def r(s):return bot.get_response(s).text
12# The following loop will execute each time the user enters input
13while True:
14    try:
15      i = input('>>> ').strip()
16      if i != 'exit':
17        print(r(i))
18    # Press ctrl-c or ctrl-d on the keyboard to exit
19    except (KeyboardInterrupt, EOFError, SystemExit):
20        break

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

chat-xiaohuangji
chat-xiaohuangji