聊天机器人概述

article/2025/9/20 2:42:38

目录

<span style="color:#333333"><span style="background-color:#f5f5f5">1.前言
2.机器人
3.聊天机器人
4.分类
5.好的聊天机器人应该具备的特点
6.基于模板的聊天机器人
7.检索式聊天机器人
8.生成式聊天机器人
9.参考文献
</span></span>

前言

         网上的资料太乱了,参考着网上的文章写了这篇关于聊天机器人的概述文章,文章的很多内容并非原创。

机器人

机器人(Robot)是自动执行工作的机器装置。它既可以接受人类指挥,又可以运行预先编排的程序,也可以根据以人工智能技术制定的原则纲领行动。它的任务是协助或取代人类工作的工作,例如生产业、建筑业,或是危险的工作。

聊天机器人(Chatbot)

聊天机器人(Chatbot)是经由对话或文字进行交谈的计算机程序。能够模拟人类对话,通过图灵测试。

聊天机器人可用于实用的目的,如客户服务或资讯获取。有些聊天机器人会搭载自然语言处理系统,但大多简单的系统只会撷取输入的关键字,再从数据库中找寻最合适的应答句。目前,聊天机器人是虚拟助理(如Google智能助理)的一部分,可以与许多组织的应用程序,网站以及即时消息平台(Facebook Messenger)连接。非助理应用程序包括娱乐目的的聊天室,研究和特定产品促销,社交机器人。

分类

封闭领域和开放领域

从使用场景上看,聊天机器人分为封闭领域聊天机器人开放领域聊天机器人

1.png

开放领域的聊天机器人比较难实现,因为用户不一定有明确的目标或意图。像Twitter和微信QQ这样的社交媒体网站上的对话通常是开放领域的,他们可以谈论任何方向的任何话题。无数的话题和生成合理的Response所需要的知识规模,使得开放领域的聊天机器人实现相当困难。开放领域的聊天机器人也称为无目标驱动的聊天机器人。

2.png

封闭领域的聊天机器人指的是聊天机器人有明确的服务目标或者服务对象,比如客服机器人,儿童教育机器人、类似Viv的提供天气订票订餐等各种服务的服务机器人等。这种类型的聊天机器人比较容易实现,可能的输入和输出的空间是有限的,因为系统试图实现一个非常特定的目标。技术支持或购物助理是封闭领域问题的例子。这些系统不需要谈论政治,只需要尽可能有效地完成具体任务。当然,用户仍然可以在任何他们想要的地方进行对话,但系统并不需要处理所有这些情况,用户也不期望这样做。封闭领域的聊天机器人也被称为目标驱动机器人。

基于模板、检索和生成式模型

从实现方法上看,聊天机器人可以基于模板检索模型生成式模型

基于模板或者说基于规则的聊天机器人,需要准备好一个对话模板库(问句模板和应答模板对),对用户输入的句子,找到匹配的问句模板,然后按照对应的应答模板生成应答。

检索模型所使用的回复通常是预先存储且知道的数据,输入一段上下文内容,和一个可能作为回复的候选答案;模型的输出是对这个候选答案打分。寻找最合适的回复内容的过程:先对一堆候选答案进行打分及排序,最后选出分值最高的那个作为回复。

生成模型不依赖于任何预选定义好的响应。经典的生成模型是基于机器翻译技术的, 只不过不是将一种语言翻译成另一种语言, 而是将问句“翻译”成回答(response) 。生成模型可以创新出崭新的未知的的回复内容,不需要预先存储和定义的数据,比检索模型更加灵活多变,更加智能。

模型的比较:

基于检索的模型,“回答集”是人工编写的答案,几乎不会有语法错误,但是无法处理没有见过的问题,即数据库中没有的问题, 同时无法追溯上文中的实体信息,例如上文中提到的人名、地名。

基于生成式模型的约束条件少,过于多变的模型会导致回复中出现一些语法错误和语义无关的内容。生成模型需要海量的训练数据,且难以优化。

工业界:

目前工业用的较多的还是基于检索模型或者以生成模型作为补充的两者结合。谷歌的Smart  Reply 就是一个例子。阿里小蜜结合检索模型和生成模型各自的优势提出了一种新的融合模型,  首先采用检索模型从QA知识库中找出候选答案集合,然后利用带注意力的Seq2Seq模型对候选答案进行排序,如果第一候选的得分超过某个阈值,则作为最终答案输出,否则利用生成模型生成答案。

此外也有很多聊天机器人是基于模板的。基于人工模板的聊天机器人的优点是精准,缺点是需要大量人工工作,而且可扩展性差,需要一个场景一个场景去扩展。应该说目前市场上各种类似于Siri的对话机器人中都大量使用了人工模板的技术,主要是其精准性是其他方法还无法比拟的。

总结:

3.png

好的聊天机器人应该具备的特点

         一般而言,一个优秀的开放领域聊天机器人应该具备如下特点:

首先,针对用户的回答或者聊天内容,机器人产生的应答句应该和用户的问句语义一致并逻辑正确,如果聊天机器人答非所问或者不知所云,亦或老是回答说“对不起,我不理解您的意思”,对于聊天机器人来说无疑是毁灭性的用户体验。

其次,聊天机器人的回答应该是语法正确的。这个看似是基本要求,但是对于采用生成式对话技术的机器人来说其实要保证这一点是有一定困难的,因为机器人的回答是一个字一个字生成的,如何保证这种生成的若干个字是句法正确的其实并不容易做得那么完美。

再次,聊天机器人的应答应该是有趣的、多样性的而非沉闷无聊的。尽管有些应答看上去语义上没有什么问题,但是目前技术训练出的聊天机器人很容易产生“安全回答”的问题,就是说,不论用户输入什么句子,聊天机器人总是回答“好啊”、“是吗”等诸如此类看上去语义说得过去,但是这给人很无聊的感觉。

还有,聊天机器人应该给人“个性表达一致”的感觉。因为人们和聊天机器人交流,从内心习惯还是将沟通对象想象成一个人,而一个人应该有相对一致的个性特征,如果用户连续问两次“你多大了”,而聊天机器人分别给出不同的岁数,那么会给人交流对象精神分裂的印象,这即是典型的个性表达不一致。而好的聊天机器人应该对外体现出各种基本背景信息以及爱好、语言风格等方面一致的回答。

基于模板(规则)的聊天机器人

先来看两个模板的实例:

4.png

5.png

一句交互对话的模板由<Q,A>数据对构成,其中Q代表输入模板,A代表聊天机器人应该回答什么话,A可能不会是模板,而是就是应答的一句话,也可能是带着标签的模板,但是Q往往采用模板,因为这样覆盖率高,当然Q也完全可以是不带模板通配符的完整的一句话,但是一般而言模板居多,否则要穷举所有可能用户的问话基本不可能,通过加入*或者?这种通配符,可以用一个模板匹配更多的用户输入。当然,模板可以做得更复杂一些,按照复杂度不同,可能有下面几种类型的模板。

最简单的模板可能是这样的:

 Q:你贵姓?

 A:人家贵性女;

就是完整一句话作为一个模板。稍微复杂些的模板长这样:

 Q:你*喜欢*电影*是什么*

 A:我最喜欢的电影当然是《断背山》了,啥时候咱俩一起去看,帅哥~

这样,无论用户问的是下面哪句话,都能蹦出基情满满的回答:

  User A: 你能告我最喜欢的电影是什么吗?

  UserB:你最近喜欢的好电影是什么啊

很明显,这样能够一个模板匹配多种输入的情况。如果再复杂一些,可以是带实体类别标签的模板:

Q:<PersonName>的生日是<Date>吗?

A:哥,我不敢认识<PersonName>.Value啊。

这样的模板等于把一些常见的实体变量抽象出来,否则带经常变化的人名地名日期等的句子模板是没法做的。如果有了上面的模板,就可以这么应答:

UserA:孙杨的生日是12月32号吗?

聊天系统先上实体识别模块,把上面这句话转换成:

<PersonName>的生日是<Date>吗?

而且记住实体变量的值:<PersonName>.Value=孙杨;<Date>.Value=12月32号

这样发现对话模板库里面有一个匹配上的模板,于是就可以根据Q对应的A内容,把变量值填充进去,可以回答:

“哥,我不敢认识孙杨啊。”

因为这种类型的模板带实体变量的识别和值替换,所以看智能一点。

当模板很多的时候遍历匹配法的效率会十分低下的,因此需要一个高效地匹配算法,可参考这篇博客:https://blog.csdn.net/malefactor/article/details/52166235

现成的基于模板的框架是AIML。

 

检索式聊天机器人

《聊天机器人-ChatterBot初试》中介绍的Chatterbot框架就是基于检索式的聊天机器人。

6.png

在基于检索模式的聊天机器人中,我们常需要计算问句与FAQ中的问题集合的相似度,有如下方法:

(1)最长公共子序列。该方法思路较为简单,直接使用最长公共子序列算法,设字符串A长度为L1,字符创B长度为L2,它们的最长公共子序列为lcs,那么这两个字符串的相似度的度量为sim=2*lcs/(L1+L2)。

(2)向量相似度计算。这种方法思路同样较为简单,将两个字符串进行分词转换成空间中的向量点,计算两个文本的余弦相似度或欧氏距离即可。

(3)编辑距离。编辑距离是两个字串之间,由一个转成另一个所需的最少编辑操作次数。

(4)CNN计算文本相似度。

 

生成式聊天机器人

目前对于开放领域生成式聊天机器人技术而言,多数技术采用了Encoder-Decoder框架。Encoder-Decoder框架可以看作是一种文本处理领域的研究模式,应用场景异常广泛,不仅仅可以用在对话机器人领域,还可以应用在机器翻译、文本摘要、句法分析等各种场合。下图是文本处理领域里常用的Encoder-Decoder框架最抽象的一种表示:

7.jpg

Encoder-Decoder框架可以如此直观地去理解:可以把它看作适合处理由一个句子(或篇章)生成另外一个句子(或篇章)的通用处理模型。对于句子对<X,Y>,我们的目标是给定输入句子X,期待通过Encoder-Decoder框架来生成目标句子Y。X和Y可以是同一种语言,也可以是两种不同的语言。而X和Y分别由各自的单词序列构成:

8.jpg

Encoder顾名思义就是对输入句子X进行编码,将输入句子通过非线性变换转化为中间语义表示C:

9.jpg

对于解码器Decoder来说,其任务是根据句子X的中间语义表示C和之前已经生成的历史信息来生成i时刻要生成的单词yi:

10.jpg

每个yi都依次这么产生,那么看起来就是整个系统根据输入句子X生成了目标句子Y。

对于聊天机器人来说,完全可以使用上述的Encoder-Decoder框架来解决技术问题。具体而言,对应的<X,Y>中,X指的是用户输入语句,一般称作Message,而Y一般指的是聊天机器人的应答语句,一般称作Response。其含义是当用户输入Message后,经过Encoder-Decoder框架计算,首先由Encoder对Message进行语义编码,形成中间语义表示C,Decoder根据中间语义表示C生成了聊天机器人的应答Response。这样,用户反复输入不同的Message,聊天机器人每次都形成新的应答Response,形成了一个实际的对话系统。

在实际实现聊天系统的时候,一般Encoder和Decoder都采用RNN模型,RNN模型对于文本这种线性序列来说是最常用的深度学习模型,RNN的改进模型LSTM以及GRU模型也是经常使用的模型,对于句子比较长的情形,LSTM和GRU模型效果要明显优于RNN模型。尽管如此,当句子长度超过30以后,LSTM模型的效果会急剧下降,一般此时会引入Attention模型,这是一种体现输出Y和输入X句子单词之间对齐概率的神经网络模型,对于长句子来说能够明显提升系统效果。

参考文献

[1]百度百科.机器人.

 https://baike.baidu.com/item/%E6%9C%BA%E5%99%A8%E4%BA%BA/888?fr=aladdin.

[2]简书:zerowl.浅谈聊天机器人. https://www.jianshu.com/p/1d871e36826d. 2017-12-26

[3]CSDN博客:lovive.用深度学习构造聊天机器人简介.

https://blog.csdn.net/gzmfxy/article/details/78726372. 2017-12-05

[4]刘升平.聊天机器人的构建方法:基于模板,检索和深度学习.MDCC2016

[5]CSDN博客:张俊林博客.聊天机器人中对话模板的高效匹配方法.

https://blog.csdn.net/malefactor/article/details/52166235. 2016-08-11

[6]CSDN博客:m0_37565948.聊天机器人—简介(一).

https://blog.csdn.net/m0_37565948/article/details/81582585. 2018-08-11

 


http://chatgpt.dhexx.cn/article/ZaloK7qn.shtml

相关文章

手把手教你用python几行代码打造人工智能对话机器人,还说说话!

介绍 这里介绍一个简单的交互式人工智能机器人对话。之前大家可能看过我的文章&#xff0c;是一款qq机器人&#xff08;可点击传送机器人专栏&#xff09;项目介绍&#xff0c;那个也许做起来稍微麻烦&#xff0c;我也有用b站一行一行代码教过。那么难的可能大家接受比较难&…

对话机器人-检索与生成模型

综述 从应用的角度来说&#xff0c;对话机器人可以分为三个类别&#xff0c;分别是闲聊机器人&#xff0c;qa机器人以及任务型机器人。本系列主要介绍闲聊机器人。由于本文的内容主要是对对话机器人做一个简单的介绍&#xff0c;所以都是一些简单的介绍&#xff0c;详细的内容…

NLP中的对话机器人——问答机器人的应用场景

引言 本文是七月在线《NLP中的对话机器人》的视频笔记&#xff0c;主要介绍FAQ问答型聊天机器人的实现。 FAQ问答机器人 FAQ就是一些常见问题与回答&#xff0c;比如https://letsencrypt.org/docs/faq/。 但是我们要做的不是一问一答形式的&#xff0c;而是类似stackoverfl…

机器人是如何实现对话的?

对话机器人作为近年来愈发普遍的产品&#xff0c;以各种各样的形态出现我们的生活中&#xff1a;电话客服、文本客服、超市里的导购机器人等&#xff1b;那这些机器人如何实现和我们人类的智能对话的呢&#xff1f;本文将用显浅易懂的文字讲述机器人的对话原理与产品设计要点。…

Python3从零开始搭建一个语音对话机器人

从零开始搭建一个语音对话机器人 目录 01-初心缘由 02-准备工作 03-语音机器人的搭建思路 04-语音生成音频文件 05-音频文件转文字STT 06-与图灵机器人对话 07-文字转语音 08-语音对话机器人的完整代码 09-结束语 10-有问必答 01-初心缘由 最近在研究语音识别方向&a…

对话机器人

【居然审核不通过……内容低俗&#xff0c;这么高大上的内容&#xff0c;哪里低俗了……】 前面写了一系列的 微信机器人&#xff0c;但还没涉及到自然语言处理&#xff08;Natural Language Processing, NLP&#xff09;。今天把这坑填上。本文将基于 Seq2Seq 模型和Little Y…

关于对话机器人,你需要了解这些技术

对话系统(对话机器人)本质上是通过机器学习和人工智能等技术让机器理解人的语言。它包含了诸多学科方法的融合使用,是人工智能领域的一个技术集中演练营。图1给出了对话系统开发中涉及到的主要技术。 对话系统技能进阶之路 图1给出的诸多对话系统相关技术,从哪些渠道可以…

对话机器人(一)——对话机器人基础知识

对话机器人基础 一、对话机器人分类 1. 知识领域 a. 面向限定领域 只能聊设定好的固定主题。若用户用无关领域挑战机器人&#xff0c;机器人用安全话术回复或结束对话。 b. 面向开放领域 用户不需要有明确的目的或意图。 c. 面向常用问题集 通过检索知识库来回答问题&a…

Typora无法在applist里找到

添加一个desktop文件即可&#xff0c;记得加上%U才能在应用列表里看见

php安装失败,phpcms安装失败怎么办

phpcms安装失败怎么办&#xff1f; 最新版的phpcmsV9安装报错解决 具体报错信息如下&#xff1a;Web-server: Apache PHP版本: PHP/5.2.14 Mysql版本: MySQL 客户端版本: 5.0.90 适用版本: v9 更新日期: phpcms_v9.2.2_UTF8 编码版本: UTF-8 浏览器: maxthon 复现步骤: 正在准备…

android应用程序列表,List列表应用程序-小知识 #103

文章摘要&#xff1a; 1、从设计模式的角度浅谈List列表应用程序开发。 2、列表应用程序开发三要素。控件、数据、适配器。 一、综述&#xff1a; 1、Android中&#xff0c;使用ListView配合Adapter来展示数据列表的例子随处可见。但在实际应用场景中&#xff0c;数据源类型、V…

推荐系统中的Embedding应用

文章目录 1. Word2Vec1.1 Skip-gram 2. Airbnb中的Embedding2.1 用在相似推荐中的List Embedding2.1.1 优化一&#xff1a;Booked Listing as Global Context2.1.2 优化二&#xff1a;Adapting Training for Congregated Search2.1.3 冷启动问题2.1.4 效果评估 2.2 用在搜索推荐…

APP设备数据的特征衍生与模型应用

在信贷风控领域众多维度的数据源中&#xff0c;APP设备数据对于策略规则的开发、模型变量的筛选有着重要的贡献&#xff0c;理由是在当今电子信息化时代&#xff0c;APP数据可以较全面地反映出用户的个人习惯、日常行为等综合信息。因此&#xff0c;金融机构在开展个人信贷产品…

风控建模十二:数据淘金——如何从APP数据中挖掘出有效变量

风控建模十二&#xff1a;数据淘金——如何从APP数据中挖掘出有效变量 1、常识知识2、个例分析3、分布排查 智能手机的诞生改变了人类的生活方式&#xff0c;智能手机所承载的功能日臻完善、强大&#xff0c;人们在衣、食、住、行、工作、生活中面临的方方面面问题&#xff0c;…

2021-03-07 大数据课程笔记 day46

R星校长 机器学习06【机器学习】 主要内容 理解推荐系统处理数据流程。python 文件预处理 Hive 数据。dubbo 服务使用。 学习目标 第一节 推荐系统-数据处理流程 推荐系统数据处理首先是将 Hive 中的用户 app 历史下载表与 app 浏览信息表按照设备 id 进行关联&#xff0c…

java手机应用安装目录_如何获得Android手机的软件安装列表

Android的PackageManager类用于检索目前安装在设备上的应用软件包的信息。你可以通过调用getpackagemanager()得到PackageManager类的一个实例。对查询和操作安装包和相关的权限提供了方法&#xff0c;在下面这个Android的例子中&#xff0c;我们得到了在Android安装的应用程序…

这些信贷数据埋点中不得不知的埋点知识

国庆七天假&#xff0c;就这样飞快结束&#xff0c;似乎感觉还没休息够&#xff0c;再来一个七天都不觉得多多。 经过多年来移动互联网的普及&#xff0c;众多APP已采集到亿级乃至数十亿级别用户在设备端、通话、短信、地址等强变量的数据&#xff0c;伴随着近年来信贷行业高速…

新浪微博开发(五)AppList界面

这是客户端开发部分很重要的一个类&#xff0c;但是在开发之前需要用到有关GridView的知识。 若要临时充充电&#xff0c;请移步&#xff1a;GridView(九宫图)的使用介绍。 下面是AppList类的代码&#xff1a; /* * 用来显示、管理自己的微博账号&#xff0c;包括新浪微博账号…

使用react+redux+react-redux+react-router+axios+scss技术栈从0到1开发一个applist应用

先看效果图 github地址 github仓库 在线访问 初始化项目 #创建项目 create-react-app applist #如果没有安装create-react-app的话&#xff0c;先安装 npm install -g create-react-app 目录结构改造 |--config |--node_modules |--public |--scripts |--src|-----api //…

【无标题】https://e-cloudstore.com/ec/api/applist/index.html#/

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…