【NLP】自己搭一个多轮对话聊天机器人(附实现源码)

【NLP】自己搭一个多轮对话聊天机器人(附实现源码)

  • 01 项目框架
  • 02 模型
    • 2.1 粗排
      • 2.1.1BM25
      • 2.1.1 Bool检索
    • 2.2 精排
    • 意图识别
  • 03 API交互
  • 04 微信前端

在这里插入图片描述
本文的内容如下
在这里插入图片描述
本篇介绍一个检索类型的 多轮问答系统/聊天机器人,通过API异步通信,实现在微信上的交互,本项目包括了模型和工程化部署一体化。

包含查天气,知识图谱聊天查询,生成式问答聊天查询,图片识别,多次重复回答等;

涉及到命名实体识别,相似匹配(bm25,bool检索,simbert等),bert+seq2seq生成,neo4j知识图谱查询等技术。

各位可以根据自己的需求部署或修改:

  1. 问答库如果是任务型的,就是一个任务型聊天机器人,如果闲聊的问答库,那就是闲聊型聊天机器人;
  2. 后续也可以添加更多意图,用来做意图识别的匹配; 也可以添加个知识图谱的API…

总之可以添加的模块很多,扩展性非常强大。

当前版本支持简单对话,天气查询,表情包和图片识别回答,重复情况识别等。

最终效果如下:

01 项目框架

整体工程如下,主要有三块前端、后端、前后端交互:

  1. 前端直接用微信展示,比较简单,不需要我们做什么;
  2. 后端采用检索匹配模型的方式,结合粗排和精排;
  3. 前后端的交互用sanic实现异步通信。

在这里插入图片描述

模型部分实现的主要流程如下,初始时有个问答库:

  1. 先用BM25和Bool检索把问句query和问答库做字词上的粗排,返回topN;
  2. 将query和粗排得到的topN用SimBert向量化,再将两者做consine相似度计算,得到最相似的top1。
    在这里插入图片描述

02 模型

思路:通常情况下,基本的问答库的量相对比较大,至少是上万条以上,如果直接用向量化求相似度的方式,虽然结果相对准确一点,但是速度很慢(需要向量化,还要向量计算);所以一般先用常见的非语义检索的方式,做一层初步筛选,再把筛选过的结果用向量化的方式做精排。

2.1 粗排

2.1.1BM25

BM25是TF-IDF的改进版,计算的原理相同,只是计算的公式做了些改进,具体原理可以自己了解,公式如下:
在这里插入图片描述
调用BM25的代码如下:

from bm25_recall import Bm25Recall
sim_pred = Bm25Recall(qa_df)
sim_qa = self.sim_pred.recall(query, topn) # 返回topN

2.1.1 Bool检索

布尔检索的本质就是分字词后,做个排列组合去寻找在问答库里面,尽可能多的出现query问句中字词。做法就是做一个倒排表,一个有字和QA对组合的二维矩阵。想了解更多原理细节的可以直接看源码。
调用bool检索的代码如下:

from Bool.bool_recall import BoolRecall
sim_pred = BoolRecall(qa_df)
sim_qa = sim_pred.recall(query, topn) # 返回topN

2.2 精排

Bert是个非常强大的字词向量化的预训练模型,追一科技的苏剑林在此基础上,训练了可以用来生成或匹配相似句的模型SimBert,个人亲自尝试后深深爱上它,后续只要出现匹配的场景,或者文本训练数据不够需要生成相似句时,我都会用SimBert。更多关于SimBert的介绍见原作者苏剑林的讲解:
https://github.com/ZhuiyiTechnology/pretrained-models

意图识别

在此想特地说下意图识别的方式:

常用方式:通过模型实现意图中domain分类,intent分类,以及slot槽的命名实体识别;

大体思路就是识别了用户想要做什么,然后识别出他要做的事情的对象,比如说用户想要“查天气”,所以意图就是查天气,然后我们就需要了解到用户想查的“城市”和“日期”两个槽,我们需要填充这两个槽。

这里我们最先要弄好的是两个分类模型

作者在研究的时候发现一个更好的实现意图识别的方式:通过匹配相似句达到意图识别

实现方式:
1、在问答库中添加某个意图可能的问法
2、通过SimBert精准匹配意图,匹配上则进入该意图的对话管理

优势
私认为这种方式具有很高的准确性,以及扩展性
1、准确性:如上文所说,常用的意图需要做分类,而分类模型需要有数据支撑才能有比较好的效果;
用匹配的方式,通过相似句子评分,能够很精确的匹配到意图;
2、扩展性:常用的意图分类方式,在新增意图时需要重新训练分类模型;但是如果是匹配的话,无需重新训练分类模型,只需要在库中新增该意图的问法即可!!!非常方便!!!

以上所有算法均可在网络查到相关原理,个人源代码中都有,不做过多叙述。

03 API交互

异步通信经典常用的有Django等,后来发现了响应速度更快的Sanic,于是就习惯用Sanic,Sanic的官方文档写的很详细,可以根据自己的需求更改。
使用Sanic时,根据自己的实际情况设置ip和host,再通过POST的方式做请求交互,请求时的格式为json,使用代码如下:

@app.route('/QA',methods=['POST'])
async def model_server(request):try:request_json = request.bodyinput_json = json.loads(request_json.decode('utf-8'))start_time = time.time()result = server.get_result(input_json)print('耗时:', time.time() - start_time)except Exception as e:result = {"code": 400, "message": "预测失败", "Error": e}return response.json(result)

04 微信前端

微信前段用的是WXPY,官方文档介绍的很详细:
https://wxpy.readthedocs.io/zh/latest/

接下来就是最最最重要的开源了,关于源码及部署安装方式可以在gitlab上搜索chatbot_simbert,作者是ZJJDJJ,或者点击链接直接跳转!
https://github.com/ZJJDJJ/chatbot_simbert

喜欢的可以star或者fork,后续还会不断持续更新功能。

「卓师叔」

作者:卓师叔,爱书爱金融的NLPer

微信公众号:卓师叔

知乎:学习学习再学习

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/72310.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手把手教你写一个中文聊天机器人

本文来自作者 赵英俊(Enjoy) 在 GitChat 上分享 「手把手教你写一个中文聊天机器人」,「阅读原文」查看交流实录。 「文末高能」 编辑 | 哈比 一、前言 发布这篇 Chat 的初衷是想和各位一起分享一下动手来做聊天机器人的乐趣,因此…

NLP聊天机器人的搭建(chatbot)(一)

最近在学习研发QA系统,本人单纯想记录一下。项目源码和思路主要参考知乎专栏: PyTorch搭建聊天机器人(一)词表与数据加载器 - 知乎 PyTorch搭建聊天机器人(二)定义seq2seq网络前向逻辑 - 知乎 PyTorch搭…

全国大学生英语竞赛培训:听力、词汇语法、完形填空、阅读理解、翻译、改错、IQ题、大小作文、语法等部分快速得分、备战策略和获奖技巧讲解!

目 录 大学生英语竞赛培训——介绍、学习网址 PPT课件、视频——下载 【2020-04-05】P1 如何准备大学生英语竞赛才能拿奖?2:27:54【竞赛简介vs赛前准备】 【2020-04-11】P2 如何快速搞定大英赛大小作文?2:06:18【大小作文,快速表达~】 …

【情态动词练习题】 May 与 might

1. May 1.Sarah may be ill 2.We may not go out. 3.It may not rain. 4.We may buy a car. 5.Joe may not be at home 6.Anna may need help. 注:情态动词一定要加上动词原型 7.The baby may be hungry. 8.I may not change my job. 9.She may be married. 10.He…

初中七年级上计算机试题答案,人教版初中英语七年级英语上册期中模拟试题检测(含答案)...

原标题:人教版初中英语七年级英语上册期中模拟试题检测(含答案) 七年级英语期中测试题 1、 单项选择(10分) ( ) 1. 下列单词中含有相同元音因素的是_____. A that; these B thank; that C this; those ( ) 2. --________, Gina! --Good morning, Bob! A Good aftern…

初中七年级下英语期中备考单选题(外教出题并附助教经典解析)

1. My sister bought a present _______ her best friends birthday. A. for B. of C. about D. to 选出正确的介词,完成句子。问题: 我妹妹买了一份礼物给她最好的朋友庆祝生日。 答案:A 解析:在这个句子中,“fo…

ChatGPT 爆火 小扎、马斯克纷纷迎战ChatGPT

ChatGPT爆火,直接改变了整个硅谷大厂的格局。近日,马斯克、小扎也纷纷下场,正式对ChatGPT宣战!据The Information报道,马斯克最近几周与一直在于AI研究人员接洽,希望组建一个新的研究实验室,以开…

百度「文心一言」阿里「通义千问」腾讯的AI将会叫什么呢

阿里于昨天2023.4.7下午上线通义千问,与ChatGPT类似,同样是基于语言模型训练的人工智能聊天平台。通义千问的核心功能分为四个大类:撰写短文、职场助理、电影脚本和写封邮件。 通义千问通义千问https://tongyi.aliyun.com/ 首页如下&#xf…

ChatGPT Chat Assist: 职场智能利器,提升工作效率

在当今快节奏的职场生活中,高效率是每位职场人士追求的目标。而现代科技的进步,尤其是人工智能的快速发展,为我们带来了前所未有的便利。ChatGPT作为一款智能核心,推出了Chat Assist插件,成为职场中的得力助手&#xf…

ChatGPT通过图灵测试,图灵测试要重写

近日《Nature》在一篇文章中称,ChatGPT 已经攻破了图灵测试,是时候要启用其他新的方法来评估人工智能技术了。 图灵测试(Turing Test)是著名计算机科学家阿兰图灵在1950年提出的一个测试,用于判断机器是否能展现出与人类智能相当的能力。其测试方法是: 让…

亚马逊云科技X创业邦:专访图灵量子创始人金贤敏

假设你现在正准备去相亲,走进了一家坐满人的咖啡厅。你拿着Ta的照片,一个个地审视着每一个人,看谁对得上号,结果找了半个小时也没找到和照片相似的那个人。这时候,相亲对象给你打来了电话,告诉你Ta正坐在靠窗的角落里,你的目光顺着ta的指引,一下子就找到了Ta。 验证一个问题的答…

马斯克与马云对谈:一场科技乐观主义者的尬聊

硅谷Live / 实地探访 / 热点探秘 / 深度探讨 即使同为技术信徒,话不投机也在所难免。 本文由极客公园原创,阅读更多内容请关注极客公园微信公众号(ID:GeekPark) 在昨天开幕的 2019 世界人工智能大会上,阿里…

马斯克:我抽大麻、藐视SEC,但我是个好CEO

原文:CBS《60分钟》编译:新浪科技 樵夫 导语:特斯拉CEO马斯克(Elon Musk)被人称为天才,人们都认为他非常具有远见卓识。 但是今年,相比于他的卓越才华,人们似乎更加关注他的行为&…

马云对话马斯克:福报变成了一周工作12小时?

燃财经(ID:rancaijing)整理 作者 | 刘景丰 编辑 | 魏佳 8月29日,2019世界人工智能大会(WAIC)在上海举行。开幕式后,美国卡内基梅隆大学计算机学院院长汤姆米切尔(Tom Mitchell)、腾讯…

Vicuna:斯坦福开源一个性能相当于90%ChatGPT的聊天机器人

自从Meta公司发布LLaMA以来,围绕它微调和开发的模型越来越多,这得益于它的性能和效果,2023年3月份发布的草泥马(Alpaca)是由Meta的LLaMA 7B微调而来的全新模型,仅用了52k数据,性能约等于GPT-3.5…

3万多人学习,对ChatGPT最接地气的解读 | 万维钢 × 刘江直播精选

7 月 25 日晚 8 点,科学作家、知识传播大神万维钢老师做客“图灵八点半”栏目,与图灵联合创始人刘江总编共同解读 ChatGPT,围绕 ChatGPT 的基本原理(以及当今世界“最硬核的大脑” Stephen Wolfram 的作品《这就是ChatGPT》&#…

chatgpt赋能python:Python电影:了解Python编程语言的最佳电影

Python电影:了解Python编程语言的最佳电影 Python编程语言在IT行业中广为人知。它常被用于数据分析、人工智能、Web开发等领域。但是你知道吗?Python还成为了一种电影的主题。在这篇文章中,我们将介绍一些关于Python的最佳电影,并…

Spark综合练习——电影评分数据分析

文章目录 引言ChatGPT生成测试数据:今天给大家带来一个Spark综合练习案例--电影评分补充: 采用DSL编程的详尽注释版总结 引言 大家好,我是ChinaManor,直译过来就是中国码农的意思,俺希望自己能成为国家复兴道路的铺路人,大数据领域的耕耘者,一个平凡而不平庸的人。 …

女儿米菲儿的照片

2011年3月26日,我们的宝贝女儿出生啦。 女儿非常乖而且聪明,出生第三天我就抓拍到一种微笑表情的照片。 小米菲儿出生第三天的照片: 小米菲儿出生第九天的照片:

游戏公司奇葩富豪身家仅次许家印,征集长腿美女生娃,女友房产超百套

2018年6月,多益网络在香港联交所递交了招股书。这是一个令人瞠目结舌的巨兽,背后传奇老板徐波也浮出水面。 招股书显示,多益网络在最近三年的营业收入分别达到16.29亿元、15.52亿元和19.34亿元,最后一年涨幅达到24.6%。换言之&…