rasa

7. DIET in Rasa

2021-04-07  本文已影响0人  博士伦2014

在 Rasa 1.8 发布后,Rasa 的研究团队发布了一种适用于 NLU 的轻量级多任务的新架构transformer:双重意图和实体Transformer(DIET)。

在本文中,将介绍 DIET 的功能,以及如何在 Rasa 中使用它来获得比以往更高的准确性。 Rasa 在论文中证明该体系结构对当前的最新技术进行了改进,性能优于 BERT 的微调,并且训练速度快了六倍。

一、DIET 是什么

DIET是一种多任务transformer体系结构,可同时处理意图分类和实体识别。 它提供了即插即用各种预训练embeddings的功能,例如BERT,GloVe,ConveRT等。 在Rasa的实验中,没有一组embeddings在不同数据集上始终是最好的。 因此,模块化体系结构尤为重要。


DIET

二、为什么使用 DIET

大规模的预训练语言模型对于构建对话式AI应用程序的开发人员而言并不理想。而 DIET 之所以与众不同,是因为:

大规模的预训练语言模型在诸如GLUE和SuperGLUE的语言理解基准上已显示出令人鼓舞的结果,尤其是与其他预训练方法例如GloVe和有监督方法相比,显示出了很大的改进。 由于这些embeddings都是在大型自然语言文本语料库上进行训练的,因此它们能够很好地概括各种任务。

DIET 的作者曾经帮助构建了一个help desk assistant,该助手可以自动进行对话和可重复的IT流程。在构建过程中,将 BERT 集成在了里面,因为当时 BERT 和其他主流语言模型在各种 NLP 任务上均取得了最佳性能。 BERT 在解决某些问题的同时,也提出了新的挑战:这真的很慢,需要GPU来训练。

大型模型往往需要大量计算和训练,并且对于想要构建可以快速进行训练和迭代的强大 AI 助手的软件开发人员来说,存在着实际的挑战。此外,如果要构建多语种的 AI 助手,那么在不进行大规模预训练的情况下达到高水平的性能就非常重要,因为大多数预训练的模型都是以英文文本进行训练的。

在 DIET 之前,Rasa 的 NLU 管道使用词袋模型,每条用户消息有一个特征向量。这已经是一个快速而难以逾越的基准,但 DIET 已经超越了它。

DIET 使用了考虑单词顺序的序列模型,从而提供了更好的性能,具有即插即用的模块化架构。例如,可以使用 DIET 进行意图分类和实体提取,还可以执行单个任务,例如,将其配置为关闭意图分类并对其进行训练,仅用于实体提取。


high level illustration of DIET

DIET 不仅训练速度相当快,而且在性能上与大规模的预训练语言模型相当,并且优于微调的 BERT。

三、如何使用 DIET

为了使用新的 DIET 体系结构进行意图分类和实体提取,需要将 DIETClassifier 组件添加到 NLU 管道配置文件中。
这是调用rasa init时创建的配置文件。

language: en
pipeline:
  - name: WhitespaceTokenizer
  - name: RegexFeaturizer
  - name: LexicalSyntacticFeaturizer
  - name: CountVectorsFeaturizer
  - name: CountVectorsFeaturizer
    analyzer: "char_wb"
    min_ngram: 1
    max_ngram: 4
  - name: DIETClassifier
    epochs: 100
  - name: EntitySynonymMapper
  - name: ResponseSelector
    epochs: 100

DIETClassifier 依赖于两类特征提取器-密集特征提取器和稀疏特征提取器

此外可以使用各种超参数对 DIETClassife r进行微调:可以通过指定 transformer 的大小,transformer 层的数量,要使用的注意力头数等来配置神经网络的体系结构。

Rasa 专门出了几期 video 来讲解 DIET 这个模型,有需要的可以看看。
另外,还有一个 DIET Interactive Demo:光标放在对应模块上可以显示出该模块的参数

DIET Interactive Demo

图中两层的 Transformer 实际是 Transformer 的 Encoder 部分

这里有DIET论文的中文翻译:DIET:Dual Intent and Entity Transformer——RASA论文翻译
大多数情况下没有必要再额外实现一个 Betr 的分类器,毕竟 DIET 中 Transformer 的各种参数是可以自己设置的,增加层数,增加维度都可以通过设置参数实现。

DIETClassifier
transformer_size | 256 | Number of units in transformer
number_of_transformer_layers | 2 | Number of transformer layers.
number_of_attention_heads | 4 | Number of attention heads in transformer
batch_size | [64, 256] | Initial and final value for batch sizes. Batch size will be linearly increased for each epoch. If constant batch_size is required, pass an int, e.g. 8

以上~
谢谢大家~

上一篇下一篇

猜你喜欢

热点阅读