NLP智能对话系统的思考.pdf

Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...

Full Transcript

NLP 智能对话系统的思考,及实战项目分享【含源码】 杨老师 AINLPer2023-06-08 01:07 引言 在智能对话方面,之前一直做事情是从体验角度,利用当前架构做好热点意图分析、流程设计、优秀话术回 复等,然而并没有对于整个智能对话做过多的总结。今天正好有时间整理一下自己的一些想法。文章主要从「什...

NLP 智能对话系统的思考,及实战项目分享【含源码】 杨老师 AINLPer2023-06-08 01:07 引言 在智能对话方面,之前一直做事情是从体验角度,利用当前架构做好热点意图分析、流程设计、优秀话术回 复等,然而并没有对于整个智能对话做过多的总结。今天正好有时间整理一下自己的一些想法。文章主要从「什 么是智能对话」、「智能对话的特征」、「智能对话的应用」、「智能对话系统的搭建」几个方面介绍。 什么是智能对话? 突然面对这个问题的时候,一般感性的回答会说:它能够满足正常的交流,不会出现特别傻的回答,总不能 我问它南京在哪里,它给我回个新加坡吧。为了弄清它的定义,查了维基百科但没有查到,查了百度给出了一 堆广告;最后在一个帖子上看到了一个比较贴切简洁的回答,即智能对话系统是一种能够与人进行自然语言交 流的计算机程序或机器学习模型。 智能对话特性 一个理想的对话系统应该具备良好的自然语言理解、上下文建模、智能回复生成、错误处理与容错性以及学 习能力。当一个对话系统具备这些能力才能够与用户进行流畅的对话。 o 「自然语言理解」(Natural Language Understanding,NLU):对话系统需要能够准 确地理解用户输入的自然语言,包括识别关键词、提取语义信息、理解用户意图等。 o 「上下文建模」:良好的对话系统应该能够在对话过程中准确地理解上下文,并能够维护 对话历史。这样它就能够根据之前的对话内容作出合理的回应,从而实现更连贯的对话体验。 o 「智能回复生成」:对话系统需要能够生成符合语境的自然语言回复。这需要模型能够理 解用户的意图,并基于理解的内容生成合适的回应。同时,回复应该具有一定的个性化和变化,以 避免机械和单一的对话风格。 o 「错误处理与容错性」:对话系统应该能够识别和处理用户输入中的错误或模棱两可的内 容,并能够提供清晰的提示或请求进一步的澄清,以确保对话的准确性和流畅性。 o 「学习能力」:良好的对话系统应该能够通过与用户的交互不断学习和改进,提高回答的 准确性和适应性。它可以通过对话历史和用户反馈进行模型更新,以逐渐改进自己的表现。目前这 个特征技术条件暂时还需要人来接入。 智能对话的应用 智 能对 话 具 有许 多 潜 在的 应 用和 好 处 。首 先 ,利 用 智 能对 话 可 以用 于 「 开发 虚 拟 助手 」 , 如语 音 助 手( 如 Siri、Alexa、Google 助手等)和聊天机器人。这些助手可以回答用户的问题,提供日程安排、天气信息、交 通导航、音乐播放等服务,并能够执行一些简单的任务。 其次,智能对话支撑客户服务和支持,目前许多公司使用智能对话来提供「客户服务和支持」。通过与用户 进行实时对话,智能对话系统可以回答常见问题,提供产品或服务信息,解决问题或转接到人工代理人处理复 杂问题。 此外,智能对话还可以应用于「教育和培训领域」,为学生提供辅导、答疑解惑和学习资源。智能对话系统 可以回答学生的问题,提供学习建议,并根据学生的需求和能力提供个性化的学习材料。 智能对话还可以成为人机交互的一种友好方式。「相对于传统的命令式界面或者图形用户界面,使用自然语 言进行对话更加直观和自然」。这可以降低使用技巧门槛,使更多的人能够轻松地与智能系统进行交流,从而 更好地利用技术和服务。 智能对话系统搭建 下面通过讲解对话系统的核心理论和一个完整的订餐机器人实战项目(代码实现),来帮助大家更好地理解 和掌握 NLP 技术的核心理论和实际应用,同时也希望对大家实践能力和技术水平的提高有所帮助。 1.场景介绍 我们先来介绍一下订餐机器人项目主要应用场景,对话流程树和具体应用界面如下图: 上图描述的场景主要是:用户可通过与点餐机器人对话完成点餐下单操作。比如:购买菜品、查询已经点单 的菜品、删除菜品、确认订单,最后输入手机号确认点单的结果,最终完成下单。 此场景基本上涵盖了对话系统的意图识别、槽位抽取和填充、状态跟踪、对话策略、数据库操作、文本生成 几大核心部分。当然这个对话系统只是用于最小化的展示,用于让大家理解核心的框架实现,后续可以依据自 己的实际场景进行交互上的、产品上的重新设计和复用。 2.意图识别 有了场景上的概念以后,我们来依次给大家讲解一下各个部分的核心理论。首先要讲到的就是自然语言理解 (NLU)的意图识别部分,也就是说我们首先要知道对方说了什么,我们才能有后续的操作。请先阅读以下两 张 PPT。 意图识别一般情况下有两种方案:一种是采用文本分类方式,另一种是采用文本匹配 的方式去处理。文本分类主要采用分类模型的方式去实现,需要预先规定好类别,并且针对每一个类别去做相 应的训练数据。而文本匹配主要采用预先设置一系列的候选问题,然后我们用问题通过文本匹配算法去匹配候 选问题,然后打分,分值最高的则命中。 文本分类的方式优势是效率比较稳定,速度较快。文本匹配则在增加新匹配问题和回答正确性上有一定优势。 文本匹配有个缺陷,就是效率受匹配问题数量的影响。一般情况下我们从成本、灵活性和正确性的角度考虑, 倾向于采用文本匹配的方案。当然在意图比较固定的情况下,也有可能考虑文本分类的方案。 文本匹配的运行逻辑主要是:首先对用户问题进行预处理,比如:分词、去掉停用词,去标点、大小写转换、 词性标注等。预处理完以后就要和 FAQ 库中的问题进行相似度计算,然后得出答案。 那么标准的 FAQ 库主要是什么呢?它主要有一系列由序号、问题、答案、相似问题组成的记录集合。 「几种常见文本匹 配算法」:编辑距离、Jaccard、BM25、word2vec、深度学习等。1、编辑距离 优点:可解释性强、跨 语种有效、不需要训练模型。缺点:字符之间没有语义相似度、受无关词/停用词影响大、受语序影响大、文 本长度对速度影响大。 2、Jaccard 距离 优点:语序不影响分数(词袋模型)、实现简单、速度快。可跨语种,无需训练等。缺点:语序不影响 分数(双刃剑)、字词之间没有相似度衡量、受无关词影响、非一致文本可能出现满分。 3、word2vec 优点:两个文本包含语义相似的词,会提高相似度;训练需要的数据简单(纯文本预料即 可);计算速度快,可以对知识库问题预先计算向量;将文本转化为数字,使后续复杂模型成为可能。缺点: 词向量的效果决定句向量效果;一词多义的情况难以处理;受停用词和文本长度影响很大(也是词袋模型); 更换语种,甚至更换领域,都需要重新训练。 3.信息抽取 要实现一个对话系统中的第一步就是自然语言理解(NLU),这就包含了意图识别和信息抽取两部分。我们 上面讲完了意图识别,也就是让机器理解用户说了什么,解用户的意图。同时我们介绍了几种用于信息抽取常 用方法。信息抽取是要完成对话系统中一个必要环节,下面我们来大家介绍几种信息抽取的方案。 「基于规则的抽取」 通常我们使用正则表达式来匹配特定的句式、词表。原则上规则能处理好的情况下,尽量不使用模型,因为 这样更加可控,效率也更高。使用规则的方式同样可以计算准确率和召回率。另外需要注意的是规则的顺序有 时候会影响到结果,调试的时候需要注意。 正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有 某 种 子 串 、 将 匹 配 的 子 串 替 换 或 者 从 某 个 串 中 取 出 符 合 某 个 条 件 的 子 串 等 。 lre.search(pattern, string) lre.match(pattern, string) lre.findall(pattern, string) lre.sub(pattern, repl, string) lre.split(pattern, string) 「基于深度学习模型」 基于神 经网络对 每一个字 预测分类标 签并且结 合 CRF 等方法 进行命名 实体识别 ,完成信息 的抽取是 当前常 见的做法。关于序列标注模型的搭建,CRF 的原理以及与神经网络的结合,维特比解码等内容都会在我们的课 程中会有详细讲解。 4.对话状态控制 我们已经讲完了如何识别用户意图(意图识别)和如何抽取用户提供的关键信息(信息抽取)的方法,下面 我们来讲一讲对话状态控制。这块包含两部分:一部分是对话策略与流程控制另一部就是数据库控制。 我们来一起回顾一下对话过程。首先用户输入语音或者文字,比如:用户说帮我订一张到北京的机票。那么 下一步我们开始做意图识别和语义槽的填充,比如:领域是机票、意图是订机票、语义槽到达地是北京。完成 这些步骤以后我们下一步就要进行对话管理,进一步填充完语义槽,达成用户目标。那我们这一节就来讲讲这 块的具体实现。 首先我们要讲一下对话状态跟踪,实际上就是我们要完成订机票这个用户目标,有些 必要的信息就一定要提供,这些必要信息就是槽位(slot)。这些槽位对于对话系统十分重要,因为槽位内部 的信息实际上相当于对话系统对当前对话的记忆,在多轮交互的过程中,这些槽位被不断传递下去,其实相当 于在传递记忆,完成槽位的填充这个过程就是对话状态的跟踪。 然后对话策略我们也要理解。它是什么呢?就是我们根据对话状态,依据槽位填充的进展,我们让机器人下 一步干嘛?叫对话策略。比如系统应该根据情况来判断当前应该向用户提问来收集信息,还是已经可以直接回 答用户的问题,又或者应该查询一下数据库。有了对话策略的概念以后,我们讲一下对话流程树。 我 们在实际工作场景中实现对话策略一般都会构建一个对话流程树。这个流程树体现我们对机器人的所有预期。 简单来说就是根据用户表达的意图,机器人如何反馈,在流程树中体现包括如何回答、需要填充那些槽位、如 何反馈澄清话术等。我们一般会用一个自定义文件(Json、XML 等)记录下来,以便让程序中依据这个流程 树去处理用户的各种意图,跳转各个处理节点。 数据库控制用在哪里呢?就是机器人在与人交互的过程中,经常需要同时与数据库进行交互,因为业务场景 需要的很多信息(如:商品价格信息)都存储在数据库或者内存中,比如:Redis、MongoDB、MySQL 等等。 5.文本生成 我们已经介 绍了自然语言理解 部分(NLU)和对话管 理部分(DM)的知识,那 么我们讲一下如何 生成文本与 用户进行交互。也就是自然语言文本生成(NLG)。文本生成一般采用基于模版填槽的方式。 基于模 版实现比较简单,也可以将槽位信息作为模版内容输出,但也有它的弊端就是比较千篇一律,好处是输出内容 可控,正确性较高。还有一种方式就是基于模型生成的方式,但这种方式对于输出内容比较不可控,如果文本 不连贯、输出不符合预期,那么想要快速调整模型到我们预期的效果,很难可控性比较差。关于生成式任务、 语言 模型及 训练、 文本生 成实现 、Encoder-Decoder 结构 、Attention 机制 会在课 程中有 详细的 讲解和 代码 分享。基本的对话系统所用到的理论和基本实现已经讲解完毕。现在大家应该对于如何实现一个对话机器人系 统有了一个理论上的框架了,那么下面就要看看如何实现它。 6.完整实现 限于篇幅无法完全分享代码的内容和详细的讲解。如果大家有兴趣或者有需要可以 找 老师 索 取。 订 餐机 器 人的 工 程代 码 在很 多 场景 都 可以 复用 , 如: 订 餐、 订 票、 问 询等 。 建议 大 家可 以 自己 RUN 一下工程代码,从理论到实践真 正的跑一下,这样有助于你们的记忆和获得更大的收获。希望 今天的分 享能对大家有所帮助!最后祝大家工作顺利、学有所得。 笔者介绍 Richard , 工学博士。有 15 年通讯和互联网软件研发管理经验,超过 10 年机器学习/算法研发及管理经验。 曾在腾讯、华为等大型公司担任技术管理人员。申请了 10 余个算法专利授权。 Arthur , 首席数据科学家。毕业于浙江大学计算机系。 10 年企业级软件服务与大型电信增值业务软件研发 管理经验,8 年机器学习 /深度学习研 发及管理经验。曾在某 知名大型公司担任技术 管理人员。出版了 2 本深 度学习著作,申请了多个算法专利授权。 David , 普渡大学计算机硕士。有 10 年机器学习/算法研发经验。主要工作方向围绕自然语言理解和对话系 统,接触落地项目种类丰富。申请了 10 余个算法专利授权,在多个算法比赛上获得前三名成绩。 推荐阅读 LLMs 与 AutoG PT 结 合 : 揭 示 GPT-4 惊 人 决 策 能 力 ! Goat-7B 干 翻 GPT-4 , 超 PaLM-540B ! 24G 可 训 练 5 月 总 结 , 10 篇 论 文 : 了 解 大 语 言 模 型 最 新 进 展 ! Me ta 最 新 模 型 LIMA , 没 有 RLHF 远 胜 Alpa ca ! ! DTG 一 种 简 单 有 效 的 Prompt 方 法 , 激 发 LLM 能 力 ! 三 种 Pro mpt 方 法 大 幅 提 升 大 模 型 LLMs 推 理 能 力 ! MPT -7B : 可 商 用 的 开 源 模 型 , 效 果 堪 比 LLa MA-7B 点击下方链接 AINLPer 一个专注自然语言处理(NLP)方向的公众号。机器学习(ML)、深度学习(DL)、自然语言处理相关模型 理解、热门论文(Paper)分享分析、pytorch、C++、Python、Java... 254 篇原创内容 公众号 「资料整理不易,点个赞、再看吧」 Reads 440 ShareFavorite 5Wow

Use Quizgecko on...
Browser
Browser