Transformer课程 业务对话机器人Rasa 3.x Tuning Your NLU Model(二)

Rasa 官网

https://rasa.com/

Choosing the Right Components

有用于实体提取、意图分类、响应选择、预处理等的组件。如果您想添加自己的组件,例如运行拼写检查或进行情感分析,请查看自定义NLU组件。

管道通常由三个主要部分组成:

Tokenization

您可以使用WhitespaceTokenizer处理空白标记化(即单词由空格分隔)语言。如果您的语言没有空格标记化,则应使用不同的标记器。我们支持许多不同的标记器,或者您可以创建自己的自定义标记器。

管道下游的一些组件可能需要特定的标记器。您可以在各个组件的requires参数中找到这些要求。如果管道中缺少必需的组件,将抛出错误。

Featurization

您需要决定是否使用提供预训练单词嵌入的组件。我们建议在少量训练数据的情况下,从预先训练的单词嵌入开始。一旦您拥有大量数据,并确保最相关的单词将出现在您的数据中,因此将有一个单词嵌入,有监督的嵌入可以直接从您的训练数据中学习单词的含义,可以使您的模型更加适用于特定域。如果您找不到适合您的语言的预先训练过的模型,您应该使用有监督的嵌入向量。

Pre-trained Embeddings

在管道中使用预先训练好的单词嵌入的好处是,如果你有一个训练示例,比如:“我想买苹果”,并且Rasa被要求预测“买梨”的意图,那么你的模型已经知道“苹果”和“梨”这两个词非常相似。如果您没有足够的训练数据,这一点尤其有用。我们支持一些提供预先训练的单词嵌入的组件:

  • MitieFeaturizer mitie是由MIT提供的state-of-the-art信息抽取工具集, 包含的功能有:文本分类、命名实体识别、二元关系检测

  • SpacyFeaturizer

  • ConveRTFeaturizer

  • LanguageModelFeaturizer

如果您的训练数据是英文的,我们建议您使用ConvertFeatureizer。ConvertFeatureizer的优点是它不会独立地处理用户消息的每个单词,而是为完整的句子创建上下文向量表示。例如,如果您有一个训练示例,例如:“我可以预订一辆车吗?”,Rasa被要求预测“我需要一辆从我的位置出发的车”的意图,因为两个例子的上下文向量表示已经非常相似,所以两个例子的分类意图很可能是相同的。如果您没有足够的训练数据,这也很有用。

ConvertFeatureUriser的另一种替代方法是LanguageModelFeatureUriser,它使用预训练的语言模型(如BERT、GPT-2等)为完整的句子提取类似的上下文向量表示。有关支持的语言模型的完整列表,请参见LanguageModelFeaturer。

如果您的训练数据不是英语,您也可以使用不同的语言模型变体,该语言模型是用您的训练数据特定的语言预先训练的。例如,有中文(基于bert的中文)和日文(基于bert的日文)的bert模型变体。这些语言模型的不同变体的完整列表可在Transformers library的官方文档中找到。

spacynlp还提供许多不同语言的单词嵌入,因此您可以将其作为另一种选择,具体取决于训练数据的语言。

Supervised Embeddings

如果您没有在管道中使用任何预先训练好的单词嵌入,那么您就不会绑定到特定的语言,并且可以训练您的模型使其更特定于领域。例如,在普通英语中,“余额”一词与“对称”密切相关,但与“现金”一词截然不同。在银行领域,“余额”和“现金”密切相关,您希望您的模型能够捕捉到这一点。如果不想使用预先训练好的单词嵌入,则应仅使用类别稀疏特征化器中的特征化器,例如CountVectorsFeatureizer、RegexFeatureizer或LexicalSyntacticFeatureizer。

Intent Classification / Response Selectors

根据您的数据,您可能只希望执行意图分类、实体识别或响应选择。或者,您可能希望合并多个任务。我们为每个任务支持几个组件。我们建议使用DIETClassifier进行意图分类和实体识别,使用ResponseSelector进行响应选择。

默认情况下,所有这些组件都使用管道中生成的所有可用功能。但是,有时限制特定组件使用的功能是有意义的。例如,如果没有使用来自RegexFeatureUrizer或LexicalSyntacticFeatureUrizer的功能,ResponseSelector的性能可能会更好。要实现这一点,可以执行以下操作:通过选项alias为管道中的每个Featureizer设置别名。默认情况下,别名设置为完整Featureizer类名,例如RegexFeatureizer。然后,您可以通过Featureizers选项在ResponseSelector上指定应使用哪些Featureizer的功能。如果不设置Featureizers选项,将使用所有可用功能。

下面是一个示例配置文件,其中DIETClassifier使用所有可用功能,ResponseSelector仅使用ConvertFeatureUrizer和CountVectorsFeatureUrizer中的功能。

language: "en"pipeline:- name: ConveRTTokenizer- name: ConveRTFeaturizeralias: "convert"- name: RegexFeaturizeralias: "regex"- name: LexicalSyntacticFeaturizeralias: "lexical-syntactic"- name: CountVectorsFeaturizeralias: "cvf-word"- name: CountVectorsFeaturizeralias: "cvf-char"analyzer: "char_wb"min_ngram: 1max_ngram: 4- name: DIETClassifierepochs: 100- name: EntitySynonymMapper- name: ResponseSelectorfeaturizers: ["convert", "cvf-word"]epochs: 100

Entity Extraction

实体提取涉及解析用户消息以获取所需的信息。Rasa开源为自定义实体以及预先训练的实体(如日期和位置)提供实体提取器。以下是可用提取器及其最佳用途的摘要:

Improving Performance

Handling Class Imbalance

如果存在较大的类不平衡,分类算法通常表现不佳,例如,如果某些意图的训练数据很多,而其他意图的训练数据很少。为了缓解这个问题,您可以使用平衡的批处理策略。该算法确保所有类都在每个批中表示,或者至少在尽可能多的后续批次中表示,仍然模仿某些类比其他类的记录更多。默认情况下使用平衡批处理。为了关闭它并使用经典的批处理策略,请在配置文件中包含batch_strategy:sequence。

language: "en"pipeline:
# - ... other components
- name: "DIETClassifier"batch_strategy: sequence

Accessing Diagnostic Data

访问诊断数据#

为了更好地理解模型的功能,可以访问预测过程的中间结果。为此,您需要访问消息和预测对象的diagnostic_data数据字段,其中包含有关注意力权重和推断计算的其他中间结果的信息。您可以使用此信息进行调试和微调,例如使用RasaLit。

训练模型后,您可以访问DIET诊断数据,给出一条经过处理的消息,如下所示:

nlu_diagnostic_data = message.as_dict()[DIAGNOSTIC_DATA]for component_name, diagnostic_data in nlu_diagnostic_data.items():attention_weights = diagnostic_data["attention_weights"]print(f"attention_weights for {component_name}:")print(attention_weights)text_transformed = diagnostic_data["text_transformed"]print(f"\ntext_transformed for {component_name}:")print(text_transformed)

您可以通过以下方式访问TED的诊断数据:

prediction = policy.predict_action_probabilities(GREET_RULE, domain, RegexInterpreter()
)
print(f"{prediction.diagnostic_data.get('attention_weights')}")

Configuring Tensorflow

TensorFlow允许通过TF Config子模块在运行时环境中配置选项。Rasa开源支持这些配置选项的较小子集,并对tf.config进行适当调用配置子模块。这个较小的子集包含开发人员经常与Rasa开源一起使用的配置。所有配置选项都是使用环境变量指定的,如后续章节所示。

Deterministic Operations

如果您正在使用GPU,并且管道中有一个或多个稀疏特征化器,使用TEDPolicy、UnexpectedEntPolicy、DIETClassifier或ResponseSelector中的任何一个,则如果您将环境变量TF_DETERMINISTIC_OPS设置为1,训练和测试将失败,因为底层tensorflow ops tf没有确定的GPU实现tf.sparse.sparse_dense_matmul, tf.nn.sparse_softmax_cross_entropy_with_logits, and tf.math.unsorted_segment 操作。有关更多信息,请参见此处
https://rasa.com/docs/rasa/components/#featurizers

通过检查特征化器的“类型”,您可以在这里看到哪些特征化器是稀疏的。

Optimizing CPU Performance#

仅当您是高级TensorFlow用户并且了解管道中机器学习组件的实现时,我们建议您配置这些选项。这些选项会影响Tensorflow中 的操作方式。将它们保留为默认值是可以的。

根据NLU组件或核心策略使用的TensorFlow操作,您可以通过调整这些选项来利用多核CPU并行性。

Parallelizing One Operation

将TF_INTRA_OP_PARALLELISM_THREADS设置为环境变量,以指定可用于并行执行一个操作的最大线程数。例如,像tf.matmul() tf.reduce_sum 可以在并行运行的多个线程上执行。此变量的默认值为0,这意味着TensorFlow将为每个CPU核心分配一个线程。

Parallelizing Multiple Operations

将TF_INTER_OP_PARALLELISM_THREADS设置为环境变量,以指定可用于并行执行多个非阻塞操作的最大线程数。这些操作包括在TensorFlow图中它们之间没有定向路径的操作。换句话说,一个操作的计算不会影响另一个操作的计算。此变量的默认值为0,这意味着TensorFlow将为每个CPU核心分配一个线程。

要了解这两个选项之间的差异,请参阅此stackoverflow线程。

Optimizing GPU Performance

Limiting GPU Memory Growth

默认情况下,TensorFlow会阻止运行进程的所有可用GPU内存。如果您正在运行多个TensorFlow进程,并且希望在它们之间分配内存,那么这可能会受到限制。要防止Rasa开源阻止所有可用GPU内存,请将环境变量TF_FORCE_GPU_ALLOW_GROWTH设置为True。

Restricting Absolute GPU Memory Available

您可能希望限制Rasa开源进程可以使用的GPU内存的绝对量。

例如,假设您有两个可见GPU(GPU:0和GPU:1),您希望从第一个GPU分配1024MB,从第二个GPU分配2048MB。可以通过将环境变量TF_GPU_MEMORY_ALLOC设置为“0:1024,1:2048”来实现这一点。

Rasa系列博客:

  • 业务对话机器人Rasa 3.x Internals及Rasa框架定制实战
  • 业务对话机器人Rasa核心算法DIET及TED论文详解
  • 业务对话机器人Rasa 3.x部署安装初体验
  • 业务对话机器人Rasa 3.x Playground
  • 业务对话机器人Rasa 3.x Command Line Interface
  • 业务对话机器人Rasa 3.x 命令 rasa shell 及rasa run
  • 业务对话机器人Rasa 3.x 命令rasa run actions、rasa test、rasa data split 、rasa data convert nlu
  • 业务对话机器人Rasa 3.x 命令rasa data migrate、rasa data validate、rasa export、rasa evaluate markers、rasa x
  • 业务对话机器人Rasa 3.x 会话驱动开发(Conversation-Driven Development)
  • 业务对话机器人Rasa 3.x 生成自然语言理解NLU数据
  • 业务对话机器人Rasa 3.x 写入会话数据(Writing Conversation Data)
  • 业务对话机器人Rasa 3.x 聊天和FAQs常见问题解答
  • 业务对话机器人Rasa 3.x docker安装部署
  • 业务对话机器人Rasa 3.x Handling Business Logic
  • 业务对话机器人Rasa 3.x Fallback and Human Handoff
  • 业务对话机器人Rasa 3.x Handling Unexpected Input
  • 业务对话机器人Rasa 3.x Contextual Conversations
  • 业务对话机器人Rasa 3.x Reaching Out to the User
  • 业务对话机器人Rasa 3.x 微信+Rasa机器人实战案例
  • 业务对话机器人Rasa 3.x Tuning Your NLU Model

Transformer课程 业务对话机器人Rasa 3.x Tuning Your NLU Model(二)相关推荐

  1. Transformer课程 业务对话机器人Rasa 3.x Tuning Your NLU Model

    Transformer课程 业务对话机器人Rasa 3.x Tuning Your NLU Model Connecting to Messaging and Voice Channels Rasa开 ...

  2. Transformer课程 业务对话机器人Rasa 3.x 运行命令学习

    Rasa是创造卓越客户体验的重要平台,有了Rasa,所有团队都可以大规模地与客户创建个性化.自动化的交互.Rasa提供了构建最佳助理所需的基础设施和工具,这些助理有意义地改变了客户与企业的沟通方式. ...

  3. Transformer课程 业务对话机器人Rasa 3.x Fallback and Human Handoff

    Transformer课程 业务对话机器人Rasa 3.x Fallback and Human Handoff Rasa 官网 https://rasa.com/blog/ Fallback and ...

  4. Transformer课程 业务对话机器人Rasa 3.x Domain

    Transformer课程 业务对话机器人Rasa 3.x Domain 域定义了助手操作的范围.它指定了机器人应该知道的意图.实体.插槽.响应.表单和操作.它还定义了对话会话的配置. 下面是一个完整 ...

  5. Transformer课程 业务对话机器人Rasa 3.x Playground

    Transformer课程 业务对话机器人Rasa 3.x Playground 打造你的助理 在本指南中,我们将创建一个助理,帮助用户订阅时事通讯.请完成以下每个步骤,了解如何创建简单助理: 1. ...

  6. Transformer课程 业务对话机器人Rasa 3.x NLU Training Data

    Transformer课程 业务对话机器人Rasa 3.x NLU Training Data NLU Training Data NLU训练数据存储有关用户消息的结构化信息. 自然语言理解(NLU) ...

  7. Transformer课程 业务对话机器人Rasa 3.x Rules

    Transformer课程 业务对话机器人Rasa 3.x Rules 规则是一种训练数据,用于训练助手的对话管理模式.规则描述应始终遵循相同路径的简短对话. 不要过度使用规则.规则对于处理小的特定对 ...

  8. Transformer课程 业务对话机器人Rasa 3.x 会话驱动开发(Conversation-Driven Development)

    Transformer课程 业务对话机器人Rasa 3.x 会话驱动开发(Conversation-Driven Development) Rasa 官网 https://rasa.com/ Conv ...

  9. Transformer课程 业务对话机器人 Python使用高级的生成器方法

    Transformer课程 业务对话机器人 Python使用高级的生成器方法 您是否曾经使用过非常大的数据集,导致机器的内存溢出?或者,您可能有一个复杂的函数,每次调用它时都需要维护一个内部状态,但该 ...

最新文章

  1. php多选框怎么传值,php多选框表单checkbox参数传递的问题解析
  2. Python开发环境Wing IDE如何设置Python路径
  3. 计算机科学与技术在线阅读,TL2011计算机科学与技术.pdf
  4. linux x64 asm 参数传递,NASM汇编学习系列(1)——系统调用和参数传递
  5. 【年终总结】2021年有三AI做了什么,2022年我们要做什么?
  6. u-boot命令寻找分析--find_cmd函数
  7. Api网关Kong集成Consul做服务发现及在Asp.Net Core中的使用
  8. oracle判断是否包含字符串的方法
  9. websocket中发生数据丢失_node.js – Websocket传输可靠性(重新连接期间Socket.io数据丢失)...
  10. centos安装redmine项目管理系统
  11. IntelliJ IDEA 2018.2支持Java 11、MacBook Touch Bar等新特性
  12. Linq to Oracle 使用教程(十)绑定数据到 GridView
  13. 【数据分享】维基百科Wiki负面有害评论(网络暴力)文本数据多标签分类挖掘可视化
  14. java 内存不能为,内存不能为written修复工具-内存不能为written修复工具 免费版
  15. 正点原子开发板 使用 mfgtool 上位机固化系统至emmc报错 mfgtool “Push“ error, file=“xxxxx“
  16. 为什么SecureCRT里无法输入?
  17. kubectl 命令详解(三十二):rollout pause
  18. Redis基于Set如何实现用户关注模型?
  19. 如何将Windows8系统的磁盘格式(GPT格式)转换成Windows 7系统的磁盘格式(MBR格式)
  20. 薛兆丰经济学讲义 | 第2章 成本

热门文章

  1. python音乐爬取
  2. P2P产品 -自动投标业务详解
  3. Linux下tomcat启动不了的解决方法
  4. 每日一题——魔鬼之城
  5. 一款开关充电芯片智能手机充电管理的了解
  6. Vmware 15 新建虚拟机黑屏
  7. oracle数据库sqlpuls报:12560(协议适配器错误)的解决办法
  8. 吴恩达机器学习课后作业——线性回归
  9. 有关于KEIL软件空间不足的一些问题<持续更新>
  10. 猜拳问题java解决