Rasa实战:构建开源对话机器人
  • 推荐1
  • 收藏0
  • 浏览1.2K

Rasa实战:构建开源对话机器人

孔晓泉 , 王冠 (作者)  孙学瑛 (责任编辑)

  • 书  号:ISBN 978-7-121-42938-5
  • 页  数:
  • 开  本:
  • 出版状态:上市销售
  • 维护人:孙学瑛
Rasa是一款开源的对话机器人框架,能让开发者使用机器学习技术快速创建工业级的对话机器人。得益于丰富的功能、先进的机器学习能力和可以快速上手的特性,Rasa框架是目前流行的开源对话机器人框架。
本书首先介绍Rasa的两个核心组件——Rasa NLU和Rasa Core的工作流程;然后详细介绍通过使用Rasa生态系统从头开始构建、配置、训练和服务不同类型的对话机器人的整体过程,如任务型、FAQ、知识图谱聊天机器人等,其中包括使用基于表单(form)的对话管理、ResponseSelector来处理闲聊和FAQ,利用知识库来回答动态查询的问题等,以及自定义Rasa框架,使用对话驱动的开发模式和工具来开发对话机器人,探索机器人能做什么,并通过交互式学习来轻松修复它所犯的任何错误;最后会介绍将Rasa系统部署到具有高性能和高可扩展性的生产环境中,从而建立一个高效和强大的聊天系统。
对话机器人开源框架Rasa首著,英文版同步上市,Rasa 联合创始人兼 CTO Alan Nichol 亲笔作序力荐,快速创建聪明的工业级对话机器人
孔晓泉
谷歌开发者机器学习技术专家(Google Developer Expert in Machine Learning),TensorFlow Addons Codeowner,Rasa SuperHero。多年来一直在世界500强公司带领团队构建机器学习应用和平台。在NLP和对话机器人领域拥有丰富的理论和实践经验。
王 冠
北京大学学士,香港科技大学硕士,先后于香港应用科技研究院、联想机器智能实验室及瑞士再保险与慕尼黑再保险数据科学团队从事数据建模、计算机图像与NLP的研发工作,发表过数篇相关国际期刊论文,并取得相关专利。当前研究方向为人工智能在金融领域的应用。

Foreword


Conversational AI combines ideas from linguistics, human-computer interaction, artificial intelligence, and machine learning to develop voice and chat assistants for a near-infinite set of use cases. Since 2016 there has been a surge in interest in this field, driven by widespread adoption of mobile chat applications. The coronavirus pandemic accelerated this trend, with almost all one-on-one interactions becoming digital.

2016 was also the year Rasa was first released and we saw the first community contributions come in on GitHub. Open source communities live and die by their users and contributors, and this is doubly true for Rasa, where our global community builds assistants in hundreds of human languages. Xiaoquan Kong and Guan Wang have been leading members of our community for years and I am grateful for their many contributions. Not least Xiaoquan’s efforts to ensure Rasa has robust support for building assistants in Mandarin. I’ve been eagerly awaiting the publication of this book.

Rasa in Action: Building Open-source Conversational AI covers precisely the topics required to become proficient at building real-world applications with Rasa. Aside from covering the fundamentals of natural language understanding and dialogue management, the book emphasizes the real-world context of building great products. In the first chapter, you are challenged to think whether a conversational experience is even the right one to build. The book also covers the essential process of Conversation-Driven Development, without which many assistants get built but fail to serve their intended users. Additionally, readers are taught practical skills like debugging an assistant, writing tests, and deploying an assistant to production.

This book will be of great use for anyone starting out as a Rasa developer, and I’m sure many existing Rasa developers will discover things they didn’t know.

—— Alan Nichol, co-founder and CTO, Rasa


推荐序


对话机器人结合了语言学、人机交互、人工智能和机器学习的理念,可用于开发应用在各种各样的用户场景下的语音和聊天智能助手。自2016年以来,对话机器人在移动App中被广泛采用,并掀起一股浪潮。人们对对话机器人的关注迅速增加,新冠病毒的大流行加速了这一趋势,几乎所有一对一的互动都数字化了。

2016年是Rasa首次发布的一年,我们看到在GitHub上出现了第一批社区贡献者。开源社区因其用户和贡献者而生,这对Rasa来说是在真实地发生着的——在我们的社区,全球开发者用数百种人类语言建立了各种各样的智能助手。本书的作者孔晓泉和王冠多年来一直是我们的社区领袖,我很感谢他们的诸多贡献。尤其是晓泉在确保Rasa的中文支持方面所做的努力,才得以成就本书。我一直非常期待本书的出版。

本书涵盖了熟练使用Rasa构建真实应用所需的全部主题。除涵盖自然语言理解和对话管理的基础知识外,本书着重讲了如何在真实场景中构建优秀的产品。在第1章中,读者会被要求思考这样一个问题:构建一个对话机器人真的是正确的选择吗?通过回答这个问题可以避免“杀鸡用牛刀”的窘境。本书还涵盖了对话驱动开发(Conversation-Driven Development)的基本过程。不使用对话驱动开发可能会出现对话机器人虽然上线却不能很好地满足目标用户需求的问题。此外,本书还向读者传授了一些实用的技能,如如何调试Rasa代码、如何测试,以及如何将对话机器人部署到生产环境中等。

本书对任何想成为Rasa开发者的人来说都是非常有用的,我相信许多现有的Rasa开发者也会从书中发现并学到新的东西。

—— Alan Nichol,Rasa联合创始人兼CTO



前言



自然语言处理(Natural Language Processing,NLP)是人工智能领域的一个重要部分。当人工智能已经在数据建模预测和图像分类识别等场景大放异彩的时候,随着深度学习算法和计算机硬件的不断发展,拥有悠久历史的NLP渐渐展现出新的发展动力和应用落地潜力,而对话机器人是NLP集大成的应用。
对话机器人已经在互联网和传统行业中有了广泛的应用,应用范围包括自动化提升工作效率、增加客户服务智能水平和降低人工运营成本等方面。本书以中文应用为核心,向读者系统地介绍对话机器人的落地构建。
为什么写这本书
在深度学习的发展浪潮中,NLP虽然有了很多重要的进步,但是相比图像视觉识别等领域,NLP有着特殊的一面。因为图像中的猫都是一样的,中国的猫在美国也是猫,不受地区、语言、文化背景等限制,所以图像数据是通用的,算法也一致。文字则不同:全球各地的书写语言各不相同,相同书写语言国家中不同地区的口语方言也各有千秋,用英语语料训练出的NLP模型并不适用于中文,因此NLP语料不具备通用性。
加上人类的语言本身具有歧义性、隐蔽性和常识性,如指代不明、讽刺、缩略等,NLP在技术实现上相当困难,在中文方面尤其如此——一方面,中文NLP缺乏学术界质量良好的大规模中文语料库;另一方面,主流开源框架对中文NLP的支持并不友好。
据笔者所知,当前的NLP参考数据,或者完全基于传统NLP的技术架构,与当前新的技术有所脱节,或者太过理论而缺乏实践,尤其是对中文NLP任务实践的深层次积累。
因此,我们在本书借助Rasa介绍构建对话机器人这一NLP集大成的任务,从而展现中文 NLP 的核心技术的实践和应用。
关于本书作者
孔晓泉 谷歌开发者机器学习技术专家(Google Developer Expert in Machine Learning),TensorFlow Addons Codeowner,Rasa SuperHero。多年来一直在世界 500 强公司带领团队构建机器学习应用和平台。在NLP和对话机器人领域拥有丰富的理论和实践经验。
王冠 北京大学学士,香港科技大学硕士,先后于香港应用科技研究院、联想机器智能实验室及瑞士再保险数据科学团队从事数据建模、计算机图像与NLP的研发工作,发表过数篇相关国际期刊论文和专利。当前研究方向为人工智能在金融领域的应用。
本书主要内容
本书将详细地介绍Rasa的生态体系,按照从入门到内部原理,再到实战的学习路线,让第一次接触机器学习和自然语言理解的用户能够迅速了解、掌握并实际运用中文NLP的核心技术。本书由初级、中级和高级3个级别的Rasa知识组成。本书内容与开发人员水平等级对应表如下所示。
本书内容与开发人员水平等级对应表
开发人员水平等级 等级能力要求 对应本书内容
初级 熟悉Rasa各个组件的概念,熟练利用现有的常用组件构建一个单机Rasa Bot 第1章、第2章、第3章
中级 熟练利用所有内建组件构建一个满足工业标准的分布式Rasa Bot 第4章、第5章、第6章、第7章
高级 熟悉Rasa各个系统的工作原理,按照需要新增、改造或创建新的子系统和组件 第8章、第9章、第10章
如何阅读本书
建议Rasa初学者,从头开始逐步深入,并按照书中的项目逐一实践,在确认已经掌握基础概念后再继续学习。同时建议,初学者不需要等到完全读完整本书再去上手做实际的对话机器人,只要学会自己期望的学习内容就可以开始进行实战,在实战中遇到不懂的问题时,再来回顾本书或把本书当作参考手册反复查阅。
对于已经有一定经验的Rasa开发者,可以按照需求有选择地精读某些章节。有经验的Rasa开发者快速通读全书也有好处,一来可以了解最新的Rasa提供了哪些读者尚不知道的高级技术(Rasa的技术体系进化得相当快),二来可以建立完善的Rasa知识体系,以后在实战中遇到问题时,可以想起来书中提到的某个技术或方案或许可以解决这一问题。
对于非Rasa系统的对话系统开发者而言,阅读本书可以学习Rasa系统是如何设计架构,以保证系统的可扩展性的。同时Rasa对话管理系统的设计是非常值得其他对话系统设计师参考学习的,我们建议重点阅读第9章“Rasa的工作原理与扩展性”。
致谢
感谢谷歌通过提供谷歌云信用额度(GCP credit)的方式来支持我们的工作。

目录

第1章 人机对话基础和Rasa简介 1
1.1 机器学习基础 1
1.2 自然语言处理基础 3
1.2.1 现代自然语言处理发展
简史 3
1.2.2 自然语言处理的基础
任务 7
1.3 人机对话流程 7
1.3.1 确定对话机器人的应用
场景 7
1.3.2 传统对话机器人架构 8
1.3.3 语音识别 10
1.3.4 自然语言理解 10
1.3.5 对话管理 12
1.3.6 自然语言生成 13
1.3.7 语音合成 14
1.4 Rasa 简介 14
1.4.1 系统结构 15
1.4.2 如何安装Rasa 16
1.4.3 Rasa 项目的基本流程 16
1.4.4 Rasa常用命令 16
1.4.5 创建示例项目 17
1.5 小结 17
第2章 Rasa NLU基础 18
2.1 功能与结构 18
2.2 训练数据 19
2.2.1 意图字段 21
2.2.2 同义词字段 22
2.2.3 查找表字段 23
2.2.4 正则表达式字段 23
2.2.5 正则表达式和查找表的
使用 24
2.3 组件 25
2.3.1 语言模型组件 26
2.3.2 分词组件 26
2.3.3 特征提取组件 27
2.3.4 NER组件 27
2.3.5 意图分类组件 28
2.3.6 实体和意图联合提取
组件 28
2.3.7 回复选择器 28
2.4 流水线 28
2.4.1 什么是流水线 28
2.4.2 配置流水线 28
2.4.3 推荐的流水线配置 30
2.5 输出格式 30
2.5.1 意图字段 32
2.5.2 实体字段 32
2.5.3 其他可能字段 33
2.6 如何使用 Rasa NLU 34
2.6.1 训练模型 34
2.6.2 从命令行测试 34
2.6.3 启动服务 35
2.7 实战:医疗机器人的NLU
模块 36
2.7.1 功能 36
2.7.2 实现 36
2.7.3 训练模型 38
2.7.4 运行服务 39
2.8 小结 40
第3章 Rasa Core基础 41
3.1 功能与结构 41
3.2 领域 41
3.2.1 意图与实体 42
3.2.2 动作 42
3.2.3 词槽 43
3.2.4 回复 43
3.2.5 会话配置 45
3.2.6 全局性配置 45
3.3 故事 45
3.3.1 用户消息 46
3.3.2 机器人动作与事件 46
3.3.3 辅助符号 47
3.4 动作 49
3.4.1 回复动作 49
3.4.2 表单 49
3.4.3 默认动作 49
3.4.4 自定义动作 50
3.5 词槽 50
3.5.1 词槽和对话行为 51
3.5.2 词槽的类型 51
3.5.3 词槽的映射 52
3.5.4 词槽初始化 52
3.6 策略 53
3.6.1 策略的配置 53
3.6.2 内建的策略 53
3.6.3 策略的优先级 54
3.6.4 数据增强 54
3.7 端点 54
3.8 Rasa SDK和自定义动作 55
3.8.1 安装 55
3.8.2 自定义动作 55
3.8.3 tracker对象 56
3.8.4 事件对象 56
3.8.5 运行自定义动作 57
3.9 Rasa支持的客户端 57
3.10 实战:报时机器人 59
3.10.1 功能 59
3.10.2 实现 60
3.10.3 运行动作服务器 66
3.10.4 运行Rasa服务器和
客户端 66
3.11 小结 67
第4章 使用ResponseSelector
实现FAQ和闲聊功能 68
4.1 如何定义用户问题 68
4.2 如何定义问题的答案 69
4.3 如何训练Rasa 69
4.4 实战:构建FAQ机器人 70
4.4.1 功能 70
4.4.2 实现 71
4.4.3 训练模型 77
4.4.4 运行服务 78
4.5 小结 78
第5章 基于规则的对话管理 79
5.1 fallback 79
5.1.1 NLU fallback 79
5.1.2 策略fallback 80
5.2 意图触发动作 80
5.2.1 内建意图触发动作 80
5.2.2 自定义意图触发动作 81
5.3 表单 81
5.3.1 定义表单 82
5.3.2 激活表单 82
5.3.3 执行表单任务 82
5.4 实战:天气预报机器人 83
5.4.1 功能 83
5.4.2 实现 86
5.4.3 客户端/服务器 97
5.4.4 运行 Rasa 服务器 97
5.4.5 运行动作服务器 97
5.4.6 运行网页客户端 98
5.4.7 更多可能的功能 98
5.5 小结 98
第6章 基于知识库的问答 99
6.1 使用ActionQueryKnowledgeBase
100
6.1.1 创建知识库 100
6.1.2 NLU 数据 102
6.1.3 自定义基于知识库的
动作 104
6.2 工作原理 105
6.2.1 对象查询 105
6.2.2 属性查询 105
6.2.3 解析指代 106
6.3 自定义 108
6.3.1 自定义
ActionQueryKnowledgeBase
108
6.3.2 自定义
InMemoryKnowledgeBase
108
6.3.3 创建自定义知识库 110
6.4 实战:基于知识库的音乐百科
机器人 110
6.4.1 功能 110
6.4.2 实现 111
6.4.3 客户端/服务器 122
6.4.4 运行 Rasa 服务器 122
6.4.5 运行动作服务器 122
6.4.6 运行网页客户端 122
6.4.7 使用Neo4j 123
6.5 小结 134
第7章 实体角色和分组 135
7.1 实体角色 135
7.2 实体分组 136
7.3 组件支持情况 136
7.4 实战:订票机器人 136
7.4.1 功能 136
7.4.2 实现 139
7.4.3 客户端/服务器 147
7.4.4 运行 Rasa 服务器 147
7.4.5 运行动作服务器 147
7.4.6 运行网页客户端 148
7.5 小结 148
第8章 测试和生产环境部署 149
8.1 如何测试机器人的表现 149
8.1.1 对NLU和故事数据
进行校验 149
8.1.2 编写测试用的故事 149
8.1.3 评估NLU模型 151
8.1.4 评估对话管理模型 153
8.2 在生产环境中部署机器人 153
8.2.1 部署时间 153
8.2.2 选择模型存储方式 153
8.2.3 选择tracker store 154
8.2.4 选择lock store 156
8.2.5 单机高并发设置 157
8.3 实战:单机部署高性能Rasa
服务 157
8.3.1 架设redis服务器 157
8.3.2 使用redis作为
tracker store 157
8.3.3 使用redis作为
lock store 158
8.3.4 单机高并发设置 158
8.3.5 性能测试 158
8.4 小结 159
第9章 Rasa的工作原理与
扩展性 160
9.1 Rasa的工作原理 160
9.1.1 训练阶段 161
9.1.2 推理阶段 162
9.2 Rasa的扩展性 163
9.2.1 如何使用自定义NLU
组件和自定义策略 163
9.2.2 如何自定义一个NLU
组件或策略 164
9.2.3 自定义词槽类型 165
9.2.4 其他功能的扩展性 166
9.3 实战:实现自定义分词器 166
9.3.1 分词器MicroTokenizer的
简介 166
9.3.2 代码详解 167
9.3.3 使用自定义分词器 176
9.4 小结 177
第10章 Rasa技巧与生态 178
10.1 如何调试Rasa 178
10.1.1 预测结果不正确 178
10.1.2 代码出错 181
10.2 如何阅读Rasa源代码 186
10.2.1 阅读源代码前 186
10.2.2 阅读源代码时 188
10.2.3 阅读源代码后 188
10.3 对话驱动开发和Rasa X 189
10.3.1 对话驱动开发 189
10.3.2 Rasa X 190

10.4 运行交互式学习 193
10.4.1 启动交互式学习 193
10.4.2 进行交互式学习 193
10.4.3 保存交互式学习的数据 196
10.4.4 对话过程可视化 196
10.5 社区生态 197
10.5.1 数据生成工具
Chatito 197
10.5.2 数据生成工具
Chatette 198
10.5.3 数据标注工具
Doccano 199
10.5.4 Rasa Chinese软件包 200
10.6 小结 201
附录A 中英文术语翻译对照表 202


读者评论

推荐用户