前言

近年来,NLP的发展可谓日新月异,过去大家都在自己的细分领域中默默耕耘,比如做分类、匹配的同学研究Bert+MLP;做NER、序列标注的同学折腾BERT+CRF;做翻译、摘要的同学捣鼓Encoder-Decoder框架;那种勃勃生机,万物竞发的场景犹在眼前。


但是,自2020年以来,通用模型已逐渐成为了新的趋势,即把多种自然语言处理任务的能力集成到了一个模型之中。实践证明,通过多任务学习交互往往可以提高模型效果,同时也可显著减少模型开发和应用成本,为开发者和用户都提供了极大便利。

 

生成 VS 抽取

鉴于此,笔者回顾了近几年历任通用模型,将其主要归纳为「生成」和「抽取」两种解码范式
 

 

生成式:

模型自主生成一段基于输入的结果,优势是灵活度高,只要能在输入文本和相应Prompt中清晰说明任务需求即可。劣势是由于结果是自由生成,不与输入严格绑定,因此生成结果不稳定,可能会产生无效结果;且输出需要逐字解码,推理速度较慢。

抽取式:

模型输出结果完全来自于输入内容片段,优势是输出结果稳定。劣势是每次推理时都需要推理n个样本(其中n为标签数量),因此模型推理时间随标签数量线性增长。

 

生成虽“秀”,抽取更“稳”

在实际生产环境中,对模型输出结果的稳定性往往具有更高的要求,因此,达摩院自然语言智能团队提出了基于「抽取解码」的自然语言理解架构SiamesePrompt,系列模型也在ModelScope进行了开源,开源模型是:

  • 零样本自然语言理解SiameseUniNLU

  • 零样本通用信息抽取SiameseUIE

  • 零样本属性情感抽取SiameseAOE

SiamesePrompt系列模型,基于提示(Prompt)+文本(Text)的构建思路,通过设计适配于多种任务的Prompt,并利用指针网络(Pointer Network)实现片段抽取(Span Extraction),从而实现对自然语言理解全任务的统一处理,在通用性、推理效率、推理精度方面效果都有显著提升。

 

不仅涵盖了UniMC和DuUIE中提到的所有任务,还通过递归解码支持任意元组(四元组、五元组等)的信息抽取任务;

在零样本情况下,F1 Score较竞品模型提升24.6%,在少样本情况下(去除了部分数量较少的数据集)提升3-5个百分点;

通过Siamese Network结构,将推理速度提升了30%。

 

SiamesePrompt架构

在传统的MRC架构中,当我们有多个Prompt时,需要将待推理的Prompt逐个枚举,依次和Text交互,从而获取最终的隐向量表示,这样的一个缺点是Text需要反复编码,因此推理时间和Prompt数量成正相关。

 

孪生神经网络(Siamese neural networks)是一类神经网络模型,它的基本思想是将两个相同结构的神经网络共享参数,然后将它们分别应用于输入数据,通常用于度量两个输入之间的相似度或差异性。

 

近年来的研究表明,底层Transformer其实更多的是Local信息的交互,上层才是Global信息的交互,因此,我们将语言模型的前N-n层改为孪生神经网络,将Prompt和Text单独编码,仅让它们在后n层再做融合交互。这样一来,Text的前N-n层的向量表示,我们就可以反复使用。由于Text的长度往往远大于Prompt,因此可以大幅缩短推理时间。

 

想法验证

为了证实我们的猜想,我们进行了初步的实验验证,我们在四个ABSA数据集上进行实验,最终发现,对于24层transformers的Roberta-large模型,只需要保留8层的Cross-Attention Layer就可以几乎齐平传统MRC(24层Cross-Attention Layer)的效果。

 

 

模型实战

 

安装ModelScope

依据ModelScope的介绍,实验环境可分为两种情况。在此推荐使用第2种方式,点开就能用,省去本地安装环境的麻烦,直接体验ModelScope。

 

本地环境安装

可参考https://www.modelscope.cn/docs/%E7%8E%AF%E5%A2%83%E5%AE%89%E8%A3%85

 

Notebook

ModelScope直接集成了线上开发环境,用户可以直接在线训练、调用模型。

打开模型页面,点击右上角“在Notebook中打开”,选择机器型号后,即可进入线上开发环境。

 

SiameseUIE通用信息抽取模型

模型介绍

SiameseUIE通用信息抽取模型,支持命名实体识别(NER)、关系抽取(RE)、事件抽取(EE)、属性情感抽取(ABSA)等多类任务的抽取。和市面上已有的通用信息抽取模型不同的是:

  • 更通用:SiameseUIE基于递归的训练推理架构,不仅可以实现常见的NER、RE、EE、ABSA这类包含一个或两个抽取片段的信息抽取任务,也可以实现包含更多抽取片段的信息抽取任务,例如:比较观点识别五元组任务等等,因此更为通用,几乎可以解决所有的信息抽取问题;
  • 更高效:SiameseUIE基于孪生神经网络的思想,将预训练语言模型(PLM)的前 N-n 层改为双流,后 n 层改为单流。我们认为语言模型的底层更多的是实现局部的简单语义信息的交互,顶层更多的是深层信息的交互,因此前N-n层不让Prompt和Text做过多的交互,而是分别单独编码,同时将前N-n层Text的隐向量表示缓存下来,实现将推理速度提升30%;
  • 更精准:我们在4类任务、6个领域、9个数据集上进行了测试,在零样本情况下,F1 Score较竞品模型提升24.6%,在少样本情况下(去除了部分数量较少的数据集)提升3-5个百分点;数据评估及结果

我们在4类任务、6个领域、9个数据集上进行了测试,我们选择DuUIE作为Baseline,在零样本情况下,F1 Score较DuUIE模型提升24.6%; 

 

 在少样本情况下(去除了部分数量较少无法微调的数据集)F1 Score较竞品模型提升3-5个百分点;

加载模型

使用以下三行命令即可加载SiameseUIE模型

 

from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks
semantic_uie = pipeline(Tasks.siamese_uie, 'damo/nlp_structbert_siamese-uie_chinese-base', model_revision='v1.0')

模型调用

与一般的文本分类模型不同,SiamesePrompt系列模型可以自定义标签(但注意需要按照给定格式),模型将根据给定的标签执行抽取任务。以实体抽取任务为例,构造方式为{实体类型: None}:

schema={
        '人物': None,
        '地理位置': None,
        '组织机构': None
    }

接着,调用模型:

semantic_uie(
    input='1944年毕业于北大的名古屋铁道会长谷口清太郎等人在日本积极筹资,共筹款2.7亿日元,参加捐款的日本企业有69家。', 
    schema=schema
)

返回结果为:

{
  'output': [
    [{
      'type': '人物',
      'span': '谷口清太郎',
      'offset': [18, 23]
    }],
    [{
      'type': '地理位置',
      'span': '日本',
      'offset': [26, 28]
    }],
    [{
      'type': '地理位置',
      'span': '日本',
      'offset': [48, 50]
    }],
    [{
      'type': '组织机构',
      'span': '北大',
      'offset': [8, 10]
    }],
    [{
      'type': '组织机构',
      'span': '名古屋铁道',
      'offset': [11, 16]
    }]
  ]
}

类似地,对于关系抽取、事件抽取、属性情感抽取任务都有相应的标签构造模版,只要按照模版构造好所需要的标签,就可以让调用模型的不同能力,实现不同需求。

 

示例

在ModelScope平台上,也可直接调用模型示例感受效果,非常地方便,展示如下:

 

SiameseUniNLU通用自然语言理解模型

模型介绍

SiameseUniNLU通用自然语言理解模型,支持命名实体识别、关系抽取、事件抽取、属性情感抽取、情感分类、文本分类、指代消解、文本匹配、自然语言推理、阅读理解等多类任务,为几乎所有非生成式自然语言理解任务提供了统一的解决方案,其特点为:

 

更通用:UniNLU为各种理解类任务都设计了相应适配的Prompt,并通过大量训练,使得一个模型几乎可以解决所有自然语言理解类任务,支持的任务包括:

  • 命名实体识别:抽取输入文本中的实体片段
  • 关系抽取:抽取输入文本中具备特定关系类型的主客实体片段
  • 事件抽取:抽取输入文本中相互联系的事件论元片段
  • 属性情感抽取:抽取输入文本中特定对象的相关情感词片段
  • 指代消解:判断给定代词是否指向文中的某一对象
  • 情感分类:给定一段文本和候选情感标签,返回可以恰当表示该段文本情感倾向的标签
  • 文本分类:给定一段文本和候选类别标签,返回可以恰当表示该段文本所属类别的标签
  • 文本匹配:给定两段文本和相应相似度标签,返回可以恰当表示两段文本相似度的标签,文本相似度标签通常为“相似”,“不相似”两种
  • 自然语言推理:给定两段文本和相应文本关系标签,返回可以恰当表示两段文本关系的标签,文本关系标签通常为“蕴含”,“矛盾”,“中立”三种
  • 阅读理解:输入问题及参考文本,返回基于该段参考文本的问题答案,通常分为选择类阅读理解和抽取类阅读理解

 

更高效:与Siamese-UIE类似,基于孪生神经网络的思想,实现推理提速30%;

更精准:我们在10类任务、6个领域、15个数据集上进行了测试,在零样本和少样本两个设定下都远超PCLUE1.5的表现;

 

我们从自建数据集(10类任务、6个领域、15个数据集)和P-CLUE榜单两个数据集上验证了我们模型在自然语言理解数据上的表现:

 

P-CLUE榜单:

我们在推理数据集上达到了榜单SOTA,分类F1页超过了PromptCLUE V1.5的表现,在阅读理解数据集上,由于存在一部分生成式阅读理解任务(SiamesePrompt架构不能做生成任务),因此表现欠佳。

 

加载模型

使用以下三行命令即可加载SiameseUniNLU模型

from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks

semantic_nlu = pipeline(Tasks.siamese_uie, 'damo/nlp_structbert_siamese-uninlu_chinese-base', model_revision='v1.0')

模型调用

类似地,SiameseUniNLU模型同样可以自定义标签(再次强调要按照给定格式哦),模型将根据给定的标签执行抽取任务。以分类任务为例,文本标签通过英文逗号“,”隔开,拼接在输入文本前面并用“|”分隔,schema构造方式如下,调用模型:

semantic_nlu(
  input='民生故事,文化,娱乐,体育,财经,房产,汽车,教育,科技,军事,旅游,国际,证券股票,农业三农,电竞游戏|学校召开2018届升学及出国深造毕业生座谈会就业指导', 
    schema={
        '分类': None
        }
)

返回结果为:

{
  'output': [
    [
      {
        "offset": [
          23,
          25
],
        "span": "教育",
        "type": "分类"
      }
    ]
  ]
}

对其他任务也各自按照相应方式构造输入样例即可

 

示例

模型调用方式与SiameseUIE类似,这里分别展示情感分类,文本匹配,抽取式阅读理解,选择式阅读理解,文本分类,关系抽取任务几个测试样例结果

 

SiameseAOE通用属性情感抽取模型

模型介绍

SiameseAOE通用属性情感模型,是SiamesePrompt系列专门针对属性情感抽取任务的版本,通过在500w条ABSA标注数据集进行预训练得到,在自建测试集上F1达到了0.808。

 

可支持各类属性情感抽取任务,尤其在商品评价解析领域,能够帮助用户和商家快速把握商品特征和评价反馈。

模型特征和调用方式这里就不赘述了,和上面两个模型都类似,反正就是好用,直接上具体例子吧。

 

加载模型

使用以下三行命令即可加载SiameseAOE模型

from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks

semantic_aoe = pipeline(Tasks.siamese_uie, 'damo/nlp_structbert_siamese-aoe_chinese-base', model_revision='v1.0')

模型调用

重要内容说三遍,按照给定格式输入内容,schema按照{属性词: {情感词: None}}方式构造,调用模型:

semantic_aoe(
  input='很满意,音质很好,发货速度快,值得购买', 
    schema={
        '属性词': {
            '情感词': None,
        }
    }
)

输出结果

{
  'output': [
    [{
      'type': '属性词',
      'span': '音质',
      'offset': [4, 6]
    }, {
      'type': '情感词',
      'span': '很好',
      'offset': [6, 8]
    }],
    [{
      'type': '属性词',
      'span': '发货速度',
      'offset': [9, 13]
    }, {
      'type': '情感词',
      'span': '快',
      'offset': [13, 14]
    }]
  ]
}

示例

 

总结

我们这次推出的SiamesePrompt系列模型在模型效果上显著领先于竞品模型,并在部分任务上达到SOTA效果;在任务广度上实现了更全面的统一,涵盖了几乎所有的非生成类自然语言理解任务;同时在推理速度上也实现了明显提升。

 

模型传送门

 

SiameseUIE

https://modelscope.cn/models/damo/nlp_structbert_siamese-uie_chinese-base/summary

 

SiameseUniNLU

https://modelscope.cn/models/damo/nlp_structbert_siamese-uninlu_chinese-base/summary

 

SiameseAOE

https://modelscope.cn/models/damo/nlp_structbert_siamese-aoe_chinese-base/summary

 

参考文献

[1] Leveraging Local and Global Patterns for Self-Attention Networks(Xu et al., ACL 2019)

[2] A Unified MRC Framework for Named Entity Recognition(Li et al., ACL 2020)

[3] Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer(Raffel et al., Journal of Machine Learning Research 2020)

[4] Training language models to follow instructions with human feedback(Ouyang et al., 2022)

[5] Unified Structure Generation for Universal Information Extraction(Lu et al., ACL 2022)

[6] Zero-Shot Learners for Natural Language Understanding via a Unified Multiple Choice Perspective(Yang et al., EMNLP 2022)

[7] https://openai.com/research/instruction-following

[8] https://github.com/PaddlePaddle/PaddleNLP/tree/develop/model_zoo/uie

[9] https://github.com/CLUEbenchmark/pCLUE

 

 
Logo

ModelScope旨在打造下一代开源的模型即服务共享平台,为泛AI开发者提供灵活、易用、低成本的一站式模型服务产品,让模型应用更简单!

更多推荐