首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >做一个基于 chatterbot 的聊天机器人

做一个基于 chatterbot 的聊天机器人

作者头像
周萝卜
发布2019-07-17 16:31:07
5.7K0
发布2019-07-17 16:31:07
举报
文章被收录于专栏:萝卜大杂烩萝卜大杂烩

今天和大家一起来手撕一个自动问答系统,其实也就是类似我们常说的聊天机器人

初识自动问答系统

关键点

  1. 句意理解 系统接收到一句话,需要先通过语法分析,语义分析等来理解该句子,这样才能更好的给出回答
  2. 文本信息摘取 系统需要有自己的语料库、知识库或者相关内容,并从中抽取出相应的回答。
  3. 知识推理 这个是更高一层的要求,系统应该可以通过上下文,或者接收到的句子的语义,通过知识推理的手段获取到知识库中不存在的答案。

可用技术栈

基于以上几点,可用基于现有的一些算法来训练自己的模型,当然也可用通过开源的框架来搭建,下面我们就先来实践下基于开源框架的实现。

基于 ChatterBot 实现

ChatterBot 是一个功能强大的,基于 Python 的聊天机器人框架,其 GitHub 地址为:https://github.com/gunthercox/ChatterBot/tree/master 官方文档为:https://chatterbot.readthedocs.io,有兴趣的小伙伴可以自行研究。这里我们给出简单的实战过程。

1. 获取语料

中文聊天语料这一块,我选择了网上大神整理的资料,选取其中一部分,小黄鸡语料 https://github.com/codemayq/chinese_chatbot_corpus

2. 使用 Google Colab 训练

Google Colab 是个好东西,我们一定要充分的利用起来。(还不熟悉的可以查看我以前写的一篇文章

  1. 上传处理好的小黄鸡语料到 Colab 上
  2. 在 Colab 上安装 ChatterBot
1!pip install chatterbot
2!pip install chatterbot-corpus
  1. 创建一个 Chat Bot
1from chatterbot import ChatBot
2from chatterbot.trainers import ListTrainer
3chatbot = ChatBot("my chat")
4trainer = ListTrainer(chatbot)
  1. 载入语料
1with open('xiaohuangji.tsv', encoding='utf-8') as f:
2  data = f.read().replace('\t', '\n')
3print(data[:100])
  1. 训练
1trainer.train(data)

最后,等待训练完成之后,我们再把生成的 db.sqlite3 文件下载到本地。

  1. 部署成服务 在自己的云主机中,或者自己的本地电脑上安装 ChatterBot,如果安装失败,可以选择使用 anaconda 来安装。 先简单的做个实验,看看聊天效果怎么样
 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 是能够从每次的聊天中自动学习,也就是聊天记录越多,这个机器人也就越“精”,是不是很惊喜

部署成 API

使用轻量级的 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 算法的聊天机器人!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 萝卜大杂烩 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 初识自动问答系统
  • 关键点
  • 可用技术栈
    • 基于 ChatterBot 实现
    • 1. 获取语料
    • 2. 使用 Google Colab 训练
    • 部署成 API
    相关产品与服务
    云服务器
    云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档