Transformer课程 业务对话机器人Rasa 3.x Tuning Your NLU Model(二)
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(二)相关推荐
- Transformer课程 业务对话机器人Rasa 3.x Tuning Your NLU Model
Transformer课程 业务对话机器人Rasa 3.x Tuning Your NLU Model Connecting to Messaging and Voice Channels Rasa开 ...
- Transformer课程 业务对话机器人Rasa 3.x 运行命令学习
Rasa是创造卓越客户体验的重要平台,有了Rasa,所有团队都可以大规模地与客户创建个性化.自动化的交互.Rasa提供了构建最佳助理所需的基础设施和工具,这些助理有意义地改变了客户与企业的沟通方式. ...
- Transformer课程 业务对话机器人Rasa 3.x Fallback and Human Handoff
Transformer课程 业务对话机器人Rasa 3.x Fallback and Human Handoff Rasa 官网 https://rasa.com/blog/ Fallback and ...
- Transformer课程 业务对话机器人Rasa 3.x Domain
Transformer课程 业务对话机器人Rasa 3.x Domain 域定义了助手操作的范围.它指定了机器人应该知道的意图.实体.插槽.响应.表单和操作.它还定义了对话会话的配置. 下面是一个完整 ...
- Transformer课程 业务对话机器人Rasa 3.x Playground
Transformer课程 业务对话机器人Rasa 3.x Playground 打造你的助理 在本指南中,我们将创建一个助理,帮助用户订阅时事通讯.请完成以下每个步骤,了解如何创建简单助理: 1. ...
- Transformer课程 业务对话机器人Rasa 3.x NLU Training Data
Transformer课程 业务对话机器人Rasa 3.x NLU Training Data NLU Training Data NLU训练数据存储有关用户消息的结构化信息. 自然语言理解(NLU) ...
- Transformer课程 业务对话机器人Rasa 3.x Rules
Transformer课程 业务对话机器人Rasa 3.x Rules 规则是一种训练数据,用于训练助手的对话管理模式.规则描述应始终遵循相同路径的简短对话. 不要过度使用规则.规则对于处理小的特定对 ...
- Transformer课程 业务对话机器人Rasa 3.x 会话驱动开发(Conversation-Driven Development)
Transformer课程 业务对话机器人Rasa 3.x 会话驱动开发(Conversation-Driven Development) Rasa 官网 https://rasa.com/ Conv ...
- Transformer课程 业务对话机器人 Python使用高级的生成器方法
Transformer课程 业务对话机器人 Python使用高级的生成器方法 您是否曾经使用过非常大的数据集,导致机器的内存溢出?或者,您可能有一个复杂的函数,每次调用它时都需要维护一个内部状态,但该 ...
最新文章
- php多选框怎么传值,php多选框表单checkbox参数传递的问题解析
- Python开发环境Wing IDE如何设置Python路径
- 计算机科学与技术在线阅读,TL2011计算机科学与技术.pdf
- linux x64 asm 参数传递,NASM汇编学习系列(1)——系统调用和参数传递
- 【年终总结】2021年有三AI做了什么,2022年我们要做什么?
- u-boot命令寻找分析--find_cmd函数
- Api网关Kong集成Consul做服务发现及在Asp.Net Core中的使用
- oracle判断是否包含字符串的方法
- websocket中发生数据丢失_node.js – Websocket传输可靠性(重新连接期间Socket.io数据丢失)...
- centos安装redmine项目管理系统
- IntelliJ IDEA 2018.2支持Java 11、MacBook Touch Bar等新特性
- Linq to Oracle 使用教程(十)绑定数据到 GridView
- 【数据分享】维基百科Wiki负面有害评论(网络暴力)文本数据多标签分类挖掘可视化
- java 内存不能为,内存不能为written修复工具-内存不能为written修复工具 免费版
- 正点原子开发板 使用 mfgtool 上位机固化系统至emmc报错 mfgtool “Push“ error, file=“xxxxx“
- 为什么SecureCRT里无法输入?
- kubectl 命令详解(三十二):rollout pause
- Redis基于Set如何实现用户关注模型?
- 如何将Windows8系统的磁盘格式(GPT格式)转换成Windows 7系统的磁盘格式(MBR格式)
- 薛兆丰经济学讲义 | 第2章 成本