Rasa系列教程(一) -- 系统及各组件介绍

这篇具有很好参考价值的文章主要介绍了Rasa系列教程(一) -- 系统及各组件介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言

一、传统对话机器人架构

二、对话系统流程

2.1 ASR语音识别

2.2 NLU自然语言理解

2.3 DM对话管理

2.4 NLG自然语言生成

2.5 TTS语音合成

三、Rasa组件介绍

3.1 Rasa简介

3.2 Rasa安装

3.3 Rasa项目基本流程

3.4 Rasa常用命令

3.4 Rasa常用命令
​​​​​​​


前言

        人机对话是一个很难的问题,在商业与技术上都没有固定的套路,被称为NLP领域中“王冠上的钻石”。


一、传统对话机器人架构

        早期的对话机器人架构主要基于模板和规则,如AIML(Artifical Intelligence Maekup Language)。这里以AIML的查询天气模板为例讲述规则系统。

<?xml version="1.0" encoding="utf-8"?>
<aiml version="1.0">

<category>
<pattern>*</pattern>
<that>你现在在什么地方</that>
<template>
    <think><set name="where"><formal><star/></formal></set></think>
    <random>
        <li><get name="where"/>是个好地方.</li>
        <li>真希望我也在<get name="where"/>, 陪你.</li>
        <li>我刚刚看了下<get name="where"/>的天气哦.</li>
    </random>
</template>
</category>

<category>
<pattern>外面热吗</pattern>
<template>
    你现在在<get name="where"/>,
    <system>python getweather.py reltime <get name="where"></system>
</template>
</category>

</aiml>

        规则的描述主要基于正则表达式。将用户的问题匹配到类似模板,可以取得预定义好的答案。事实上,像AliceBot这样基于AIML的对话机器人,拥有4万多个不同的类别数据,是一个海量的规则数据库。

        使用规则的优点是:准确率高,但缺点明显:规则只能覆盖较少部分,且随着时间推移,规则越写越多,难以维护。此外,对话机器人还需要维护一个庞大的问答知识库,对用户的问题通过计算句子之间的相似度来寻找数据库中已有的最相近的问题,从而给出相应答案。

        知乎和Quora等问答网站不希望用户提问很多重复的问题,因此对用户的每一个新的问题,这些网站都会和已有的问题进行匹配,从而产生一些skip-thought计算句向量等方法。


二、对话系统流程

        当前人机对话按流程主要分为5个部分:

  • ASR:语音识别模块;
  • NLU:自然语言理解模块;
  • DM:对话管理模块;
  • NLG:自然语言生成模块;
  • TTS:语音合成模块;

Rasa系列教程(一) -- 系统及各组件介绍

2.1 ASR语音识别

        语音识别(Automatic Speech Recognition, ASR)也称语音转文字,是将人类的语音内容转换成相应文字的技术。这方面已经有比较多的商业解决方案(科大讯飞、百度等)和开源项目(Kaldi、DeepSpeech等),技术已经相对成熟。

2.2 NLU自然语言理解

        自然语言理解(Natural Language Understanding, NLU)是一个比较宽泛的领域。这里的NLU是指分析用户语言中表达的意图(intent)和相关实体(entity)的技术。

        NLU模块主要对用户的就问题在句子级别进行分类和意图识别,同时在词级别找出用户问题中的关键实体,并且进行实体槽填充。举个例子:用户说"我想吃羊肉泡馍",NLU要识别出用户的意图是"寻找餐馆",而关键实体是"羊肉泡馍"。有了意图和关键实体,就方便DM模块对后端数据库进行查询。

        从NLP和机器学习角度看,意图识别是一个文本分类问题,实体槽填充是一个传统的命名实体识别问题。两者都需要标注数据。下面是Rasa中NLU数据的格式:

nlu:
- intent: greet
 examples: |
    - 你好!
    - 早上好!

- intent: restaurant_search
 examples: |
    - 找个吃[拉面](food)的店。
    - 这附近哪里有吃[麻辣烫](food)的地方。

        这看上去和AIML数据非常像。然而NLU数据实际用到了以这些标注数据训练出的复杂的机器学习模型,表现能力和泛化能力大大增强。只要列出了"拉面"和"麻辣烫",如果出现"凉皮"、"糖葫芦"等词,Rasa良好的NLU系统依旧会把它们标注为食物。

        一种常见的NLU架构方案如下图所示,对输入的文本首先经过分句、分词、词性标注等基础自然语言预处理。对某些应用来讲,指代消解是非常重要的步骤。将原有的指代词甚至零指代补全成完整名称,可以消除很多NLU数据的歧义。之后通过机器学习、深度学习、规则等方式进行意图识别和实体标注。

Rasa系列教程(一) -- 系统及各组件介绍

2.3 DM对话管理

        对话管理(Dialog Management, DM)是指根据对话历史状态决定当前的动作或对用户的反应。DM模块是对话系统流程的控制中心,有着至关重要的作用。其首要任务是负责管理整个对话的流程。通过对上下文的维护和解析,DM模块要决定用户提供的意图是否明确,以及实体槽的信息是否足够,以进行数据库查询或开始执行相应的任务

        当DM模块认为用户提供的信息不全或模棱两可时,就要维护一个多轮对话的语境,不断引导式地询问用户以得到更多的信息,或者提供不同的可能选项让用户选择。DM模块要存储和维护当前对话的状态、用户的历史行为、系统的历史行为、知识库中的可能结果等。当DM模块认为已经清楚得到了全部需要的信息后,就会将用户的查询变成数据库查询语句知识库(或知识图谱)中查询响应资料,或者实现和完成相应的任务(如购物下单,或者类似拨打电话等)。

        一个DM例子如下图所示:

Rasa系列教程(一) -- 系统及各组件介绍

        在实际中,DM模块肩负着大量杂活,是与使用需求强绑定的,大部分使用规则系统,实现和维护都比较繁琐。因此,在新的研究中,将DM模块的状态建模成一个序列标注的监督学习问题,甚至用强化学习加入一个用户模拟器来将DM模块训练成一个深度学习模型。我们后面会看到Rasa在其Core模块中是如何简洁又巧妙地实现DM的。

2.4 NLG自然语言生成

        自然语言生成(natural Language Generation, NLG)是将意图和相应的实体转换成人类用户可以理解的文本的过程。当前主要的方案有模板法神经网络序列生成法。模板法比较单一,然而是人工设计的,所以可读性最好。神经网络序列生成法的形式变化多样,类似千人千面,响应的质量和稳定性难以控制。目前在实际应用中,多以模板法为主,对模板法稍加改造(如随机选择一组模板中的一个)以克服其过于呆板的缺点。

        NLG模块是机器与用户交互的"最后一公里"。闲聊机器人往往在大量语料上用一个seq2seq的生成模型,直接生成反馈给用户的自然语言。然而在垂直领域的任务型机器人中并不适用,用户需要的是解决问题的准确答案,而不是俏皮话。

        当下很多人尝试用深度学习做端到端的以任务为目标的对话机器人,有的基于传统的对话机器人框架,即NLU+DM+NLG,每一个模块都换成深度学习模型,再加入用户模拟器进行强化学习,进行端到端的训练;还有的使用"Memort Networks"方式,偏向于seq2seq,将整个知识库都编码在一个复杂的深度网络中,再和编码过的问题结合起来解码生成答案。这主要应用在机器阅读理解上,注明的斯坦福的SQuAD比赛,有一些神乎其技的结果,但在垂直领域任务导向的对话机器人上的成功应用还有待观察。 

2.5 TTS语音合成

        语音合成也称文字转语音(Text to Speech, TTS),是将文字转换成人类可以理解的语音技术。TTS已经发展许多年,业界有比较成熟的解决方案,从效果来说达到了可以实用的地步。出于研发成本的考虑,在实际使用中多直接使用专业公司(科大讯飞、百度)提供的TTS引擎或服务。


三、Rasa组件介绍

3.1 Rasa简介

Rasa是一个用于构建对话机器人的开源机器学习框架,几乎覆盖了对话系统的所有功能,是目前主流的开源机器对话机器人框架。

Rasa框架包含4个部分:

  • Rasa NLU:提取用户想要做什么和关键的上下文信息;
  • Rasa Core:基于对话历史,选择最优的回复和动作;
  • 通道(channel)和动作(action):连接对话机器人与用户及后端服务系统(使用界面),支持即时通信软件对接Rasa;
  • tracker store、lock store、event broker等辅助系统;

Rasa的核心工作逻辑如下:

Rasa系列教程(一) -- 系统及各组件介绍

        大多数机器人都需要调用外部服务来完成对应功能,例如,在天气查询机器人需要天气信息服务商的接口来完成实际天气情况的查询,订餐机器人需要调用外部服务完成金融消费和餐品下单。在Rasa中,这种由于具体业务决定的动作被称为自定义动作(custom action)。自定义动作运行在一个单独的服务器进程中,也被称为动作服务器(action server)。动作服务器通过HTTP和Rasa Core进行通信。

3.2 Rasa安装

 安装Rasa非常容易,在命令行中使用pip命令即可安装。

pip install rasa

3.3 Rasa项目基本流程

构建一个完整的Rasa项目工程会有如下步骤:

(1)初始化项目

(2)准备NLU训练数据

(3)配置NLU模型

(4)准备故事(story)数据

(5)定义领域(domain)

(6)配置Rasa Core模型

(7)训练模型

(8)测试机器人

(9)让人们使用机器人

3.4 Rasa常用命令

Rasa常用命令如下表所示:

命令 功能
rasa init 创建一个新的项目,包含样本训练模型、配置和动作
rasa train 使用NLU训练数据、故事数据、配置训练模型,默认情况下模型保存在./models目录中
rasa interactive 交互式的训练:通过和机器人对话修正可能的错误,并将对话数据导出
rasa run 运行rasa服务器
rasa shell 等价于执行rasa run命令,开启基于命令行界面的对话界面和机器人交流
rasa run actions 运行rasa动作服务器
rasa x 启动Rasa X服务器(如果没有安装Rasa X的话会提示安装)
rasa -h 打印Rasa命令的帮助信息

3.4 Rasa常用命令

        成功安装Rasa后,开发者就可以使用Rasa自带的命令行工具创建一个示例项目:

rasa init

        rasa init运行后会询问新创建的项目位于哪里(默认是当前目录),一级创建示例项目后是否立即训练模型(默认是Yes),开发者可以选择No,然后自己通过rasa train命令训练模型。

        示例项目创建成功后,选择的项目目录下将会增加如下文件:

—— actions
    —— actions.py
    —— __init__.py
—— config.yml
—— credentials.yml
—— data
    —— nlu.py
    —— rules.py
    —— stories.py
—— domain.yml
—— endpoints.yml
—— tests
    —— test_stories.py

        所有Rasa命令行工具都默认使用这套文件目录布局,因此这是创建Rasa工程的最佳方法。我们鼓励在命令行中运行rasa train命令来训练这个项目模型,并通过使用rasa shell命令来和机器人进行对话。文章来源地址https://www.toymoban.com/news/detail-496504.html

到了这里,关于Rasa系列教程(一) -- 系统及各组件介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Rasa 3.x 学习系列-Rasa [3.5.4] -2023-04-05新版本发布

    Rasa 3.x 学习系列-Rasa [3.5.4] -2023-04-05新版本发布 Rasa Pro 3.5 中引入的两项新功能将帮助您更好地测试和保护您的 AI 助手:端到端测试和机密管理。 通过全面的验收和集成测试评估 AI 助手的性能。我们易于更新的端到端测试可以设置为运行每个流程和集成,以帮助您自信地部署

    2023年04月10日
    浏览(22)
  • FPGA学习实践之旅——前言及目录

    很早就有在博客中记录技术细节,分享一些自己体会的想法,拖着拖着也就到了现在。毕业至今已经半年有余,随着项目越来越深入,感觉可以慢慢进行总结工作了。趁着2024伊始,就先开个头吧,这篇博客暂时作为汇总篇,记录在这几个月以及之后从FPGA初学者到也算有一定

    2024年02月03日
    浏览(35)
  • Jmeter系列-环境部署、详细介绍、安装目录介绍(1)

    http://jmeter.apache.org/下载最新版本的 JMeter,解压文件到任意目录 1、下载(注意选择操作系统对应的位数32/64) 官网 :http://www.oracle.com 2、安装(一键式) ,所有步骤选择项默认选择项。 3、配置环境变量 JAVA_HOME=JDK完整安装路径 环境变量Path添加:%JAVA_HOME%bin;%JAVA_HOME%jrebin;

    2024年02月09日
    浏览(34)
  • docker 的整体架构及各模块组件 《深入docker底层原理》

    Docker 是一个 C/S 模式的架构,后端是一个松耦合架构,模块各司其职。 1、用户是使用 Docker Client 与 Docker Daemon 建立通信,并发送请求给后者。 2、Docker Daemon 作为 Docker 架构中的主体部分,首先提供 Docker Server 的功能使其可以接受 Docker Client 的请求。 3、Docker Engine 执行 Docke

    2024年02月12日
    浏览(32)
  • CANOE入门系列---下载安装及各选项卡详解

    开始一段新的旅程啦,仿真入门系列,本po主带大家一起来咯 官网链接:点击进入 本次安装为Demo版本 点击下载Demo版本 填写邮箱信息,后续会发送下载路径和序列号用于激活 进入下载好的文件夹,单击 选择Install CANoe 一路默认安装 安装成功后点击进入,点击Activate,输入激

    2023年04月12日
    浏览(24)
  • 【PyTorch教程】pytorch入门系列 ——土堆教程的目录及索引

    一、几句题外话 深度学习上手已经很长时间了,还记得最初的入门是跟着 B站up小土堆 的一步步学起来的,从起初的环境配置,到现在调整整个模型的进阶,非常感谢土堆的贡献。 写这个博客的初衷是为了自己 看着方便 ,由于多台电脑多个环境下查看这些内容很麻烦,所以

    2024年03月17日
    浏览(43)
  • nextjs系列教程(二):项目创建及目录结构

    1. 使用 create-next-app创建新的 Next.js 应用程序,它会自动为你设置所有内容。 2. 如果你希望使用 TypeScript 开发项目,可以通过 --typescript 参数创建 TypeScript 项目 3. 创建过程中会提示选择项目配置,截图如下 项目名称,这里输入react_next_pro。 项目是否需要使用Typescript。 项目是

    2024年02月09日
    浏览(37)
  • 《JavaCV从入门到实战教程合集》介绍和目录

    《JavaCV音视频合集》是《JavaCV入门指南》、《JavaCV开发详解》、《JavaCV进阶之FFmpeg》和2022年《JavaCV音视频开发宝典》四合一汇总合集,完整包含《JavaCV入门指南》、《JavaCV开发详解》、《JavaCV进阶之FFmpeg》和《JavaCV音视频开发宝典》系列所有付费内容。 《JavaCV入门指南》 《

    2023年04月11日
    浏览(30)
  • Redis数据结构一之对象的介绍及各版本对应实现

    本文首发于公众号:Hunter后端 原文链接:Redis数据结构一之对象的介绍及各版本对应实现 本篇笔记开始介绍 Redis 数据结构的底层实现。 当我们被问到 Redis 中有什么数据结构,或者说数据类型,我们可能会说有字符串、列表、哈希、集合、有序集合。 其实这几种数据类型在

    2024年02月04日
    浏览(30)
  • C/C++系列系统学习目录

    友情链接:专栏地址 编程规范:C/C++语言编程规范 章节 内容 1.初识C语言 【C语言篇】初识C语言 2.C语言最基础入门 【C语言篇】C语言最基础入门 3.C语言的输入输出相关知识 【C语言篇】C语言的输入/输出相关知识 4.C语言的if选择结构和循环结构 【C语言篇】C语言的if选择结构

    2024年02月12日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包