今天和大家一起来手撕一个自动问答系统,其实也就是类似我们常说的聊天机器人
基于以上几点,可用基于现有的一些算法来训练自己的模型,当然也可用通过开源的框架来搭建,下面我们就先来实践下基于开源框架的实现。
ChatterBot 是一个功能强大的,基于 Python 的聊天机器人框架,其 GitHub 地址为:https://github.com/gunthercox/ChatterBot/tree/master 官方文档为:https://chatterbot.readthedocs.io,有兴趣的小伙伴可以自行研究。这里我们给出简单的实战过程。
中文聊天语料这一块,我选择了网上大神整理的资料,选取其中一部分,小黄鸡语料 https://github.com/codemayq/chinese_chatbot_corpus
Google Colab 是个好东西,我们一定要充分的利用起来。(还不熟悉的可以查看我以前写的一篇文章)
1!pip install chatterbot
2!pip install chatterbot-corpus
1from chatterbot import ChatBot
2from chatterbot.trainers import ListTrainer
3chatbot = ChatBot("my chat")
4trainer = ListTrainer(chatbot)
1with open('xiaohuangji.tsv', encoding='utf-8') as f:
2 data = f.read().replace('\t', '\n')
3print(data[:100])
1trainer.train(data)
最后,等待训练完成之后,我们再把生成的 db.sqlite3 文件下载到本地。
1from chatterbot import ChatBot
2
3bot = ChatBot(
4 'my-chat',
5 database_uri='sqlite:///db.sqlite3'
6)
7
8print('Type something to begin...')
9
10while True:
11 try:
12 user_input = input()
13
14 bot_response = bot.get_response(user_input)
15
16 print(bot_response)
17
18 # Press ctrl-c or ctrl-d on the keyboard to exit
19 except (KeyboardInterrupt, EOFError, SystemExit):
20 break
来看下聊天效果:
个人感觉,效果还行吧,关键是 ChatterBot 是能够从每次的聊天中自动学习,也就是聊天记录越多,这个机器人也就越“精”,是不是很惊喜
!
使用轻量级的 flask 来开发 API,简单的代码如下:
1from flask import Flask, render_template, request, jsonify
2from chatterbot import ChatBot
3
4app = Flask(__name__)
5
6bot = ChatBot(
7 'my-chat',
8 database_uri='sqlite:///db.sqlite3'
9)
10
11@app.route("/")
12def home():
13 return render_template("index.html")
14
15@app.route("/get")
16def get_bot_response():
17 userText = request.args.get('msg')
18 return str(bot.get_response(userText))
19
20@app.route("/api/chat/<text>")
21def get_bot_api(text):
22 res = str(bot.get_response(text))
23 return jsonify(res), 200
24
25
26if __name__ == "__main__":
27 app.run(host='0.0.0.0', port=8889)
最后看下效果,
页面版:
页面版风格借鉴了 ChatterBot 官方的代码,有兴趣的同学也可以借鉴下 Django 的实现。
API 版:
好了,今天的分享就到这里喽~
我们下次再尝试下自己手写一个基于 Seq2Seq 算法的聊天机器人!