自然语言处理系列六十六》对话机器人项目实战》对话机器人原理与介绍

devtools/2024/10/20 11:24:53/
aidu_pl">

注:此文章内容均节选自充电了么创始人,CEO兼CTO陈敬雷老师的新书自然语言处理原理与实战》(人工智能科学与技术丛书)【陈敬雷编著】【清华大学出版社】

文章目录

自然语言处理系列六十六

对话机器人项目实战》对话机器人原理与介绍

对话机器人是一个用来模拟人类对话或聊天的计算机程序,本质上是通过机器学习和人工智能等技术让机器理解人的语言。它包含了诸多学科方法的融合使用,是人工智能领域的一个技术集中演练营。在未来几十年,人机交互方式将发生变革。越来越多的设备将具有联网能力,这些设备如何与人进行交互将成为一个挑战。自然语言成为适应该趋势的新型交互方式,对话机器人有望取代过去的网站、如今的App,占据新一代人机交互风口。在未来对话机器人的产品形态下,不再是人类适应机器,而是机器适应人类,基于人工智能技术的对话机器人产品逐渐成为主流。
对话机器人从对话的产生方式,可以分为基于检索的模型(Retrieval-Based Models)和生成式模型(Generative Models),基于检索我们可以使用搜索引擎Solr Cloud或ElasticSearch的方式来做,基于生成式模型我们可以使用的Seq2Seq算法来实现,同时我们可以加入强化学习的思想来优化Seq2Seq算法。下面我们就对话机器人的原理和源码实战分别来讲一下。
19.1.1 对话机器人原理与介绍
对话机器人可分为三种类型:闲聊机器人、问答机器人、任务机器人。我们分别来讲一下其原理。
1. 闲聊机器人
闲聊机器人的主要功能是同用户进行闲聊对话,如微软小冰、微信小微,还有较早的小黄鸡等。与闲聊机器人聊天时,用户没有明确的目的,机器人也没有标准答案,而是以趣味性回答取悦用户。随着时间推移,用户的要求越来越高,他们希望聊天机器人能够具有更多功能——而不仅仅是谈天唠嗑接话茬。同时,企业也需要不断对聊天机器人进行商业化探索,以期实现更大的商业价值。
目前聊天机器人根据对话的产生方式,可以分为基于检索的模型(Retrieval-Based Models)和生成式模型(Generative Models)。
1)检索的模型(Retrieval-Based Models)
基于检索的模型有一个预先定义的回答集,我们需要设计一些启发式规则,这些规则能够根据输入的问句及上下文,挑选出合适的回答。
基于检索的模型的优势:
(1)答句可读性好
(2)答句多样性强
(3)出现不相关的答句,容易分析、定位bug
但是它的劣势在于:需要对候选的结果做排序,进行选择
2)生成式模型(Generative Models)
生成式模型不依赖预先定义的回答集,而是根据输入的问句及上下文,产生一个新的回答。
基于生成式模型的优势:
(1)端到端的训练,比较容易实现
(2)避免维护一个大的Q-A数据集
(3)不需要对每一个模块额外进行调优,避免了各个模块之间的误差级联效应
但是它的劣势在于:难以保证生成的结果是可读的,多样的。
聊天机器人的这两条技术路线,从长远的角度看目前技术还都还处在山底,两种技术路线共同面临的挑战有:
(1)如何利用前几轮对话的信息,应用到当轮对话当中
(2)合并现有的知识库的内容进来
(3)能否做到个性化,千人千面。这有点类似于我们的信息检索系统,既希望在垂直领域做得更好;也希望对不同的人的query有不同的排序偏好。
从开发实现上,基于检索的机器人可以使用Solr Cloud或ElasticSearch,把准备好的问答对当成两个字段存到搜索索引了,搜索的时候可以通过关键词或者句子去搜索问题那个字段,然后得到一个相似问题的答案候选集合。之后我们可以根据用户的历史聊天记录或者其它的业务数据得到用户画像数据,针对每个用户得到个性化的回答结果,把最相关的那个答案回复给用户。基于生成模型可以使用seq2seq+attention的方式来实现,seq2seq全称Sequence to Sequence,是一个Encoder–Decoder 结构的网络,它的输入是一个问题序列,输出也是一个答案序列,Encoder 中将一个可变长度的信号序列变为固定长度的向量表达,Decoder 将这个固定长度的向量变成可变长度的目标的信号序列。而强化学习应用到Seq2Seq可以使多轮对话更持久。
2. 问答机器人
当下的智能客服是对话机器人商业落地的经典案例。各大手机厂商纷纷推出标配语音助手,金融、零售、通信等领域相继接入智能客服辅助人工……
问答机器人的本质是在特定领域的知识库中,找到和用户提出的问题语义匹配的知识点。
当顾客询问有关商品信息、售前、售后等基础问题,问答机器人能够给出及时而准确的回复,当机器人不能回答用户问题时,就会通过某种机制将顾客转接给人工客服。因此,拥有特定领域知识库的问答机器人在知识储备上要比闲聊机器人更聪明、更专业、更准确,说它们是某一领域的专家也不为过。
针对具体情况选择相应的问答型对话解决方案,包括:
基于分类模型的问答系统;
基于检索和排序的问答系统;
基于句向量的语义检索系统。
基于分类模型的问答系统将每个知识点各分一类,使用深度学习、机器学习等方法,效果较好。但需要较多的训练数据,且更新类别时,重新训练的成本较高,因此更适合数据足够多的静态知识库。
基于检索和排序的问答系统能实时追踪知识点的增删,从而有效弥补分类模型存在的问题。但仍然存在检索召回问题,假如用户输入的关键词没有命中知识库,系统就无法找到合适的答案。
更好的解决方案是基于句向量的语义检索。通过句向量编码器,将知识库数据和用户问题作为词编码输出,基于句向量的语义检索能实现在全量数据上的高效搜索,从而解决传统检索的召回问题。
3. 任务机器人
任务机器人在特定条件下提供信息或服务,以满足用户的特定需求,例如查流量、查话费、订票、订餐、咨询等。由于用户需求复杂多样,任务机器人一般通过多轮对话明确用户的目的。想要知道任务机器人是如何运作的,我们需要引入任务机器人的一个重要概念——动作(Dialog Act)。
任务型对话系统的本质是将用户的输入和系统的输出都映射为对话动作,并通过对话状态来实现上下文的理解和表示。例如,在机器人帮助预约保洁阿姨的场景下,用户与机器人的对话对应不同的动作。这种做法能够在特定领域下降低对话难度,从而让机器人执行合适的动作。
另外,对话管理模块(Dialog Management)是任务机器人的核心模块之一,也是对话系统的大脑。传统的对话管理方法包括基于FSM、Frame、Agenda 等不同架构的,各适用于不同的场景。
基于深度强化学习的对话管理法,通过神经网络将对话上下文直接映射为系统动作,如此更加灵活,可通过强化学习的方法进行训练,但需要大量真实的、高质量标注的对话数据来训练,只适用于有大量数据的情况。
对话机器人的应用:
对话机器人在人类的“苛求”下越来越智能,有人甚至预言在未来五到十年耗时耗力的沟通将会被机器人取代。对话机器人的应用实践正在逐步证明这一点。
目前,对话机器人主要适用于三类场景:
1)自然对话是唯一的交互方式
车载、智能音箱、可穿戴设备。
2)用对话机器人替代人工
在线客服、智能IVR、智能外呼。
3)用对话机器人提升效率和体验
智能营销、智能推荐、智能下单。
我们可以通过在线营销转化需求度和在线交互需求度两个维度来考量适合对话机器人落地的领域。不过,在技术上来讲,让机器真正理解人类语言仍然是一个艰难的挑战。对于搭建对话机器人,也许可以参考以下建议:
选择合适的场景并设定产品边界;
积累足够多的训练数据;
上线后持续学习和优化;
让用户参与反馈;
让产品体现出个性化。

下面我们基于生成模型的Seq2Seq+attention的方式来实现聊天机器人

对话机器人项目代码实战

对话机器人项目代码实战内容可参见
自然语言处理原理与实战》(人工智能科学与技术丛书)【陈敬雷编著】【清华大学出版社】书籍。
更多的技术交流和探讨也欢迎加我个人微信chenjinglei66。

总结

此文章有对应的配套新书教材和视频:

【配套新书教材】
自然语言处理原理与实战》(人工智能科学与技术丛书)【陈敬雷编著】【清华大学出版社】
新书特色:本书从自然语言处理基础开始,逐步深入各种NLP热点前沿技术,使用了Java和Python两门语言精心编排了大量代码实例,契合公司实际工作场景技能,侧重实战。
全书共分为19章,详细讲解中文分词、词性标注、命名实体识别、依存句法分析、语义角色标注、文本相似度算法、语义相似度计算、词频-逆文档频率(TF-IDF)、条件随机场、新词发现与短语提取、搜索引擎Solr Cloud和Elasticsearch、Word2vec词向量模型、文本分类、文本聚类、关键词提取和文本摘要、自然语言模型(Language Model)、分布式深度学习实战等内容,同时配套完整实战项目,例如对话机器人实战、搜索引擎项目实战、推荐算法系统实战。
本书理论联系实践,深入浅出,知识点全面,通过阅读本书,读者不仅可以理解自然语言处理的知识,还能通过实战项目案例更好地将理论融入实际工作中。
《分布式机器学习实战》(人工智能科学与技术丛书)【陈敬雷编著】【清华大学出版社】
新书特色:深入浅出,逐步讲解分布式机器学习的框架及应用配套个性化推荐算法系统、人脸识别、对话机器人等实战项目。

【配套视频】

推荐系统/智能问答/人脸识别实战 视频教程【陈敬雷】
视频特色:把目前互联网热门、前沿的项目实战汇聚一堂,通过真实的项目实战课程,让你快速成为算法总监、架构师、技术负责人!包含了推荐系统、智能问答、人脸识别等前沿的精品课程,下面分别介绍各个实战项目:
1、推荐算法系统实战
听完此课,可以实现一个完整的推荐系统!下面我们就从推荐系统的整体架构以及各个子系统的实现给大家深度解密来自一线大型互联网公司重量级的实战产品项目!
2、智能问答/对话机器人实战
由浅入深的给大家详细讲解对话机器人项目的原理以及代码实现、并在公司服务器上演示如何实际操作和部署的全过程!
3、人脸识别实战
从人脸识别原理、人脸识别应用场景、人脸检测与对齐、人脸识别比对、人脸年龄识别、人脸性别识别几个方向,从理论到源码实战、再到服务器操作给大家深度讲解!

自然语言处理NLP原理与实战 视频教程【陈敬雷】
视频特色:《自然语言处理NLP原理与实战》包含了互联网公司前沿的热门算法的核心原理,以及源码级别的应用操作实战,直接讲解自然语言处理的核心精髓部分,自然语言处理从业者或者转行自然语言处理者必听视频!

人工智能《分布式机器学习实战》 视频教程【陈敬雷】
视频特色:视频核心内容有互联网公司大数据和人工智能、大数据算法系统架构、大数据基础、Python编程、Java编程、Scala编程、Docker容器、Mahout分布式机器学习平台、Spark分布式机器学习平台、分布式深度学习框架和神经网络算法、自然语言处理算法、工业级完整系统实战(推荐算法系统实战、人脸识别实战、对话机器人实战)。

上一篇:自然语言处理系列六十五》神经网络算法》GAN生成对抗网络算法
下一篇:自然语言处理系列六十七》搜索引擎项目实战》搜索引擎项目概述


http://www.ppmy.cn/devtools/111318.html

相关文章

大厂校招:星宸科技嵌入式面试及参考答案(5万字长文)

bootloader 具体做了些什么 Bootloader 是在操作系统内核运行之前运行的一段小程序。它主要负责以下几个重要任务: 硬件初始化 Bootloader 首先会对硬件设备进行初始化,包括处理器、内存、中断控制器等关键部件。例如,设置处理器的工作模式、初始化内存控制器以确保内存可以…

ip地址a段b段c段是什么意思

在互联网的世界里,每一个设备都需要一个独特的标识符来相互识别和通信,这就是IP地址。IP地址不仅仅是一串数字,它背后隐藏着网络的组织结构和设备的连接方式。本文将深入探讨IP地址中的A段、B段、C段的含义,以及它们在网络通信中的…

萱仔个人博客系列——hexo+github部署

由于本人前段时间和同专业得到好offer的同学之间的交流,发现博客其实对于找工作来说可以作为个人项目个人经历的展示,我创办cdsn博客的原因主要是为了自己学习使用,但是逐渐到现在也有了一些可爱的粉丝,非常感谢大家对我的点赞收藏…

google vr 入门之制作简易的VR播放器(二)

另外对播放Activity的生命周期方法也做了对应的播放状态处理: Override protected void onPause() { super.onPause(); // Prevent the view from rendering continuously when in the background. mVideoView.pauseRendering(); // If the video is playing …

什么是数据库管理工程师?

数据库管理工程师,通常也被称为数据库管理员(DBA),是专门负责管理和保养数据库管理系统(DBMS)的专业人士。 他们的工作对于保障数据库的稳定运行和数据的安全性及完整性起着关键的作用。 想要成为一名合格…

mysql的zip解压缩版安装

文章目录 一、MySQL下载二、mysql解压缩版安装1、解压缩2、设置环境变量3、mysql初始化4、安装mysql服务5、启动mysql服务6、连接mysql7、修改初始密码8、安装完成 一、MySQL下载 下载网址:MySQL下载 本文以mysql8.4.2版本为例下载解压缩版。 二、mysql解压缩版安…

petalinux工程内核开启usb转串口模块

打开petalinux-config -c kernel Device Drivers —> USB support —> USB Serial converter support —> * USB Winchiphead CH341 Single Port Serial Driver 这样开启zynq7000的usb就可以挂载usb转串口的设备

mysql DBA常用的sql

是否一般查询日志,默认关闭 show variables like ‘general_log’; 是否开启慢日志查询 默认关闭 show global variables like ‘slow_query_log’; 开启慢日志查询 SET GLOBAL slow_query_log ‘ON’; 默认是10 单位s SELECT long_query_time; 设置超过1s就算…