开源对话式人工智能Rasa介绍


现有的 NLP BOT 解决方案(例如 Alexa、Google DialogFlow 等)正在使用 Amazon 或 Google 等的服务,这需要将数据传出场所。包括金融机构在内的企业对安全性非常挑剔,并且不太喜欢走出自己的场所来获取任何服务。他们坚持尽可能采用本地解决方案,而不将任何客户数据暴露给任何第三方应用程序或解决方案。我们是否有任何本地 NLP-Bot 解决方案可供选择?幸运的是,我们确实有廉价且非常专业的标准解决方案。

当我们谈论一些此类解决方案时,我们有很多疑问,例如它是否同时支持语音和文本?它支持多种语言吗?我们需要什么样的硬件来支持这样的解决方案?它支持哪些不同的渠道(电话、网络文本、网络语音等)?

有可用的行业标准解决方案(框架),它确实回答了所有上述问题 – Rasa。它有助于构建您的本地解决方案,并且框架的方法非常创新。

什么是Rasa?

Rasa 是一个开源框架,支持 NLP Bot 概念,并提供完全的灵活性来定制事物。下图是 Rasa 的架构图。我将更详细地解释每个组件,以便更好地理解完整的 Rasa。

主要有4个组件,即连接器模块、NLU模块、对话管理模块和NLG模块。

连接器模块

该模块有助于将 NLP Bot 框架与不同渠道(如 Web、Google Agent 和社交媒体(如 Facebook、Slack 等))连接。有一些现成的连接器可用,可用于快速集成。

NLU 组件

NLU 组件由多个子组件组成,它们在理解所说内容方面发挥着非常重要的作用。以下是 NLU 的一些组件

  • 词向量源
  • 特征器
  • 意图分类器
  • 分词器
  • 实体提取器

词向量源

这是加载语言模型的位置,应在配置开始时指定。主要有两种——Mitie 和 Spacy。与 Spacy 相比,Mitie 用于小话语数据集。 Mitie 可能会在不久的将来被弃用,但它在小型数据集上表现良好。如果有数百个示例,训练模型会变得非常缓慢且耗时。

特征器

有不同的特征器,它们用于不同的目的,例如意图分类、实体提取等特征。 MitieFeaturizer、SpacyFeaturizers 创建意图分类的特征。 RegexFeaturizer 用于实体提取。

意图分类器

这些分类器(根据用户查询对意图进行分类)用于意图识别,并且可能会或可能不会接受来自特征器的输入。一些意图分类器还输出意图排名。 KeywordIntentClassifier、MitieIntentClassifier、skLearnIntentClassifier EmbeddingIntentClassifier 是其中一些示例。其中一些分类器需要 Tokenizer 和 Featurizer 作为完整设置的一部分。

分词器

这些标记生成器有助于验证 Mitie 实体提取器使用的标记。 WhitespaceTokenizer、JiebaTokenizer(专门用于中文)、MitieTokenizer、SpacyTokenizer 是一些可用的 Tokenizer。

实体提取器

该组件识别并列出所有实体(来自用户查询的参数)。一些实体提取器包括:MitieEntityExtractor、SpacyEntityExtractor、EntitySynonymMapper、CRFEntityExtractor 和 DucklingExtractor。

处理任何新消息时 NLU 涉及的步骤

收到新消息后,它被传递到解释器,消息被转换为原始文本、意图和实体(槽)。这是 NLU 的一部分。 跟踪器有责任跟踪会话状态。策略接收 Tracker 的当前状态。策略决定下一步要采取什么操作,所选操作将记录到跟踪器中,并将响应发送给用户。 一旦确定了管道组件,就可以定义意图和实体以及训练数据 – 下图是典型的 Spacy 管道工作情况。

对话管理组件

在此组件中,Rasa 根据其训练的对话管理模块决定下一步要采取的步骤(要调用的操作)。 Rasa 在内部根据其训练的对话管理创建流程图。下面是一个相同的例子。作为行动的一部分 – Rasa 可以连接 Web API,以从 Web 服务器获取更多数据。 下面给出了对话流程的示例图 –

NLG 模块

该模块负责通过从操作获取输入并将其传递给用户来生成用户响应。

总结

对话聊天机器人可以使用自然语言工具包构建 – 但随后需要构建更多组件来保存对话上下文和其他内容。 Rasa 通过提供框架使事情变得更加容易,您只需在配置中进行少量更改即可更改内容。甚至像情感分析这样的自定义组件也可以添加为 NLU Pipeline 的一部分。