ChatterBot聊天机器人初体验
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
3或
4python -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)下,执行上面的训练输出如下:
训练完成后,训练的内容会保存在上面配置的数据库里。后面使用的时候就可以直接调用数据库执行。
三、使用
使用上面训练好的数据库里的内容,可以使用如下的代码进行测试:
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
我这里使用小黄鸡语料库训练后的对话结果如下:
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/chatterbot/6430.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.