[聊天机器人]:开源ChatterBot工作原理

作者:邹祁峰
邮箱:Qifeng.zou.job@hotmail.com
博客:http://blog.csdn.net/qifengzou
日期:2017.08.12 18:35
转载请注明来自"祁峰"的CSDN博客

1 引言

ChatterBot is a machine-learning based conversational dialog engine build in Python which makes it possible to generate responses based on collections of known conversations. The language independent design of ChatterBot allows it to be trained to speak any language.

完成聊天室系统的研发之后,在生产环境中发现部分聊天室中人数较少,用户之间的交流互动更是沉寂,显得十分冷清。为解决此问题,本人计划开发一个聊天机器人使其能够模拟人类的对话过程,让原本沉寂的聊天室活跃起来。
为达到以上目标,本人分析了开源社区关注度较高的聊天机器人项目ChatterBot的实现原理。

ChatterBot的优点:

1.训练语料可存放在多种介质上
2.训练结果可存放在多种介质上
3.应答匹配算法支持多种应答匹配算法:相似度匹配、数学估值算法等
4.可训练支持任何语言的聊天机器人

ChatterBot的缺点:

1.性能较低:收到聊天请求时,其需要遍历所有语料以找到相似度最高的语句,并提取对应的应答语句。因此,训练语料过多时(超过1万条),应答时延可能已无法让人接受。
2.场景有限:其只能应用到一些情况简单、场景单一的环境。由于性能较低,因此,无法使用过多的语料对ChatterBot进行训练,这也必然限制了应用场景。

2 工作原理

2.1 准备语料

ChatterBot的最大特点是:可训练支持任何语言的聊天机器人。如果希望ChatterBot能够应答中文,则需要使用中文对话语料训练;如果希望ChatterBot能够应答英文,则需要使用英文对话语料训练;其他语言依次类推。可以将ChatterBot的训练对话语料存储在数据库或本地文件中,如:MONGODB/SQLite/JSON-FILE等。[注:以下提到的数据库中的训练语料指的就是存储在MONGODB/SQLite/JSON-FILE中的对话语料]

对话语料的好坏将会直接影响聊天机器人的对话效果。设想一下,训练的对话语料的都不是正常人类的对话过程,怎么能够训练出类似人类的聊天机器人呢?最后,大家应该清楚训练语料的准备阶段与其他阶段相比非常的费时费力,可以说该阶段是最重要的。

2.2 训练阶段

完成对话语料的准备后,则需要使用这些对话语料来训练ChatterBot机器人。训练的过程其实就是将对话语料转换成对话过程中能够查询、转换的数据对象。以下是ChatterBot的训练过程:
训练流程

1. 加载训练语料
在进行聊天机器人的训练时,需要将存储在数据库中的训练语料逐段/全部载入内存,为对话训练做准备。

如果训练语料较多,而且使用JSON存储,则加载语料过程可能会耗费较长时间。因此,训练语料较多时,建议使用MONGODB/SQLite等数据库存储训练语料。

2. 对话训练
使用“训练”一词非常抽象,其实对话训练的过程就是将对话语料转换成对话过程中能够查询、转换的数据对象。ChatterBot之所以能够训练出支持“任何语言”的聊天机器人,关键就在于其训练过程。

ChatterBot之所以能够训练出支持“任何语言”的聊天机器人,是因为其在此过程并不对训练语料做深度加工(如:分词)处理,而是直接将训练语料直接转换成Statement->Response对,并将其存储起来。虽然其带来了支持“任何语言”的优点,但是其也带来了致命的缺点:性能低下!

3. 存储训练结果
完成对话训练后,我们需要将训练结果存储起来,以便在收到聊天请求时能够快速从之前的训练结果中找到答案并响应对方。

之前提到过:ChatterBot可将训练结果存储在数据库中(MONGODB/SQLite/JSON-FILE)。但是需要注意的是:使用Json文件存储训练语料和训练结果时,每训练一对对话ChatterBot就会将其写入到Json文件中,这样导致对Json文件大量的重复加载、重复解析、重复生成、重复写入文件的操作,非常的耗时。当训练语句超过1万条时,即使训练4-5小时可能也完不成机器人的训练过程。因此,建议使用数据库(MONGODB/SQLite)来存储最终的训练结果。

2.2 对话阶段

对话过程就是根据当前的对话请求,从之前的训练结果中找到应答语句,并发送给请求方。

如果我们采用最佳匹配策略时,当ChatterBot收到对话请求后,其将遍历所有的训练结果,让其与当前对话请求语句进行相似度计算(余旋夹角),将训练结果中与对话请求相似度最高的语句的应答作为当前请求语句的应答并返回。因此,可以发现当训练语句过大时,将会出现ChatterBot应答请求的时间太长。

2.3 性能优化

经过以上的分析,可以发现ChatterBot在训练阶段、对话阶段中均性能较低的问题,其也直接限制了ChatterBot的应用场景的扩展。如果能解决ChatterBot存储的性能问题,将会极大的增加其应用场景。
1. 对话语料的存储
使用数据库(MONGODB/SQLite)替换JSON-FILE存储对话语料,可有效防止程序一次性将对话语料载入内存。

当对话语料过大时,如果将对话语料一次性载入内存,训练过程将会出现长时间的阻塞。如果机器性能较低、内存空间较小,可能导致机器无法进行后续训练处理。

2. 对话训练的优化
ChatterBot为了能够实现对“任何语言”的处理,未对训练语料进行深度处理,且也导致了对话过程的性能低下的问题。因此,我们可以根据机器人的应用场景进行语料分词、构建倒排索引等机制,大幅提升聊天机器人的对话性能。

如果我们构建的机器人只需要支持中文对话,此时完全可以对语料进行分词处理,并构建倒排索引。当收到对话请求时,也需要对对话请求进行分词处理,根据分词结果搜索倒排索引,再根据搜索结果进行相似度匹配,将会大大的缩减相似度匹配的规模,大幅提升聊天机器人的性能。

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

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

相关文章

ROS环境安装与配置

1.初步认识ros 1.1ros是什么? (借用chatgpt的回答) 1.2ros的发展历程 (借用chatgpt的回答) 2.在ubuntu20.04上安装ROS系统 2.1添加ROS软件源 在终端执行如下代码 sudo sh -c echo "deb http://packages.ros.org/…

【嵌入式系统应用开发第1周作业】----ROS环境安装与配置

文章目录 1.初步认识ros1.1ros是什么?1.2ros的发展历程 2.在ubuntu20.04上安装ROS系统2.1添加ROS软件源2.2添加密钥2.3更新软件源2.4正式安装ROS2.5初始化rosdep2.6更新rosdep2.7设置环境变量2.8安装rosinstall2.9验证ros是否安装成功 3.简单运行案例3.1用方向键控制…

大模型,真的有未来吗?

业界最近比较热门的应该就是大模型这个事情了,从openai发布chatgpt为开始,国内外众多公司~名人都有相应的反映。这真的是一件很有价值的事情吗,今天博主就来聊聊自己的看法 文章从这样几个点出发看下,一是业界公司的一些消息&…

第三次科技革命(一)

经典物理学天空的“乌云” 物理学发展到19世纪末期,一切物理现象似乎都能够从相应的理论中得到满意的回答。以经典力学、经典电磁场理论和经典统计力学为三大支柱的经典物理大厦已经建成,而且基础牢固,宏伟壮观。在1900年,英国物理…

四次工业革命历史

我不讨论啥叫工业4.0,我本篇文章主要是回顾梳理历史,把前三次工业革命展示出来。我个人认为很多事情都是连续的,是有来龙去脉的,有些事情看似是断代的突然横空出世的,其实仔细辨析你会发现,它的断代其实都是…

第三次工业革命背景下的人类发展之道——答高礼英才的世纪之问

IT派 - {技术青年圈} 持续关注互联网、大数据、人工智能领域 关注 往期 精彩回顾 重大改变!Excel即将接入Python!办公软件也要革命 2017年大数据领域薪资有多高? 上市 | 章泽天 : 刘强东用10秒钟时间决定投资这个汽车 导语:当下&a…

碳中和推动第四次工业革命

一、四次工业革命 第一次工业革命:蒸汽机时代 18世纪60年代至19世纪中期人类开始进入了蒸汽机时代。一般认为,蒸汽机、焦炭、钢和铁是促成工业革命技术加速发展的四项主要因素。 第二次工业革命:电气化时代 第二次工业革命以电力的广泛应用…

李飞飞:我更像物理学界的科学家,而不是工程师|深度学习崛起十年

来源|The Robot Brains Podcast 翻译|胡燕君、程浩源、贾川、沈佳丽、许菡如 新一轮深度学习崛起的引爆点是AlexNet,而它的爆发却离不开“燃料”ImageNet数据集。 斯坦福大学教授李飞飞正是ImageNet的发起人和推动者,在她看来&…

博士申请 | 北京大学AI院杨耀东老师招收强化学习博弈论实习生/博士生

合适的工作难找?最新的招聘信息也不知道? AI 求职为大家精选人工智能领域最新鲜的招聘信息,助你先人一步投递,快人一步入职! 北京大学 北京大学人工智能研究院杨耀东老师课题组在强化学习,多智能体强化学习…

竞赛大佬在华为:网络专家出身斯坦福物理系,还有人“工作跟读博差不多”...

鱼羊 发自 凹非寺量子位 | 公众号 QbitAI 华为招揽“天才少年”这事儿,这几年可谓是名声在外。 但其实,论起尖端人才,更有一群竞赛大佬,早已在扎根其中,搞起了基础研发。 听上去有点离谱的是,拿下过国际物理…

火爆全网,搜狐CEO张朝阳手推E=mc²,CEO当太久都忘了他是MIT物理博士

来源:量子位 张朝阳当物理老师还真是当上瘾了。 刚刚直接完成了一场线下课,当场手推质能方程,一整面黑板墙都差点没盛下。 这个姿势,是不是有你大物老师内范儿了(手动狗头)。 ‍没地方继续推导了&#xff0…

如何制作一个自己的四足机器人

以前一直想做个足式机器人,考虑到两足机器人难度太大,想平衡都难,而6足机器人做起来没什么挑战,同时最近Boston Dymanics的mini or max dog很火,所以也就来搞个四足玩玩。 做之前先看别人都怎么做的,在you…

斯坦福后空翻机器人设计、代码全开源,人人皆可DIY

斯坦福学生机器人俱乐部(Stanford Student Robotics club)Extreme Mobility 团队最近迎来了一名新成员——一个名为 Stanford Doggo 的四足机器人。这个机器人能跳 1 米多高,还能表演后空翻。与其他四足机器人动辄上万美元的成本不同&#xf…

马斯克最新访谈:关于自动驾驶、AI和特斯拉人形机器人

马斯克最新访谈:关于自动驾驶、AI和特斯拉人形机器人 2022-04-25 14:32AI科技评论 近日,世界顶级富豪 Elon Musk 参加了由TED负责人Chris Anderson所主持的一次专访。 在访谈中,马斯克谈及了他关于AI、自动驾驶、收购推特以及特斯拉之前发展…

YYDS,马斯克:特斯拉机器人预计明年生产,取名:擎天柱

点击“终码一生”,关注,置顶公众号 每日技术干货,第一时间送达! 4月11日消息,据外媒报道,特斯拉CEO埃隆马斯克近期表示,特斯拉最早可能在2023年开始生产名为擎天柱(Optimus&#xf…

【Tesla Bot,让我想起了Sophia--那个要号称毁灭人类的女机器人】

周四晚上的AI日活动,当一个全身穿着白色紧身衣、头部被黑色头套包裹的人走上黑暗的舞台时,背景响起了奇怪电子音乐。这个人开始以类似机械的方式前行一段后,紧接着开始胡乱的手舞足蹈。几十秒后,一切都结束了,这就是特斯拉机器人(Tesla Bot)被昭告天下的时刻。 这当然是真…

四足蜘蛛机器人--制作过程记录

更新:老有人问舵机的编号,https://www.instructables.com/id/DIY-Spider-RobotQuad-robot-Quadruped/ 原作者链接里面什么都有,有些人他就不看。不过这网站国内链接比较慢,我把那个图放在这了。 还有一个就是才开始安装&#xff0…

斯坦福后空翻机器人设计、代码全开源,成本降至3000美元,人人皆可DIY

来源 | 机器之心 斯坦福学生机器人俱乐部(Stanford Student Robotics club)Extreme Mobility 团队最近迎来了一名新成员——一个名为 Stanford Doggo 的四足机器人。这个机器人能跳 1 米多高,还能表演后空翻。与其他四足机器人动辄上万美元的…

机器人制作开源方案 | Delta型腿机器狗实现原地动作

1. 功能说明 本文示例将实现R322样机Delta型腿机器狗原地摆臂、原地圆形摆动、原地蹲起、原地踏步的功能。 原地摆臂 原地圆形摆动 原地蹲起 原地踏步 2. 电子硬件 本实验中采用了以下硬件: 主控板 Basra主控板(兼容Arduino Uno) 扩展板 Bigf…

很突然、很惊艳,马斯克公布:特斯拉人形机器人

????????关注后回复 “进群” ,拉你进程序员交流群???????? 来源丨新智元(ID:AI_era) 8月20日,特斯拉AI日终于开始了!马斯克和一众技术高管不仅介绍了特斯拉汽车数据处理、超级计算机Proje…