美文网首页rasa
7. DIET in Rasa

7. DIET in Rasa

作者: 博士伦2014 | 来源:发表于2021-04-07 15:22 被阅读0次

    在 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 之所以与众不同,是因为:

    • 它是一种模块化体系结构,适合典型的软件开发工作流程;
    • 在准确性和性能方面,能达到大规模预训练语言模型的效果;
    • 改进了现有技术,胜过目前的SOTA,并且训练速度提高了6倍。

    大规模的预训练语言模型在诸如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 依赖于两类特征提取器-密集特征提取器和稀疏特征提取器

    • ConveRTFeaturizer 是使用 ConveRT 模型的密集型 featurizer 的示例。 LanguageModelFeaturizer 是使用预先训练的语言模型(例如BERT)的密集 featurizer 的另一个示例。
    • CountVectorsFeaturizer 是稀疏特征提取器的一个示例。可以将其配置为使用单词或字符 n-gram。 LexicalSyntacticFeaturizer 是稀疏 featurize r的另一个示例。它使用给定用户消息中每个 token 上的滑动窗口创建用于实体提取的特征。可以配置 LexicalSyntacticFeaturizer 组件以指定要提取的词汇和句法特征的类型。

    此外可以使用各种超参数对 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

    以上~
    谢谢大家~

    相关文章

      网友评论

        本文标题:7. DIET in Rasa

        本文链接:https://www.haomeiwen.com/subject/ohsekltx.html