【AdaSeq论文解读系列】ACL 21-自动组合各种BERT模型,在实体抽取、观点抽取、句法分析等六大结构预测任务20+个数据集获SOTA,比ensemble更强!

本文主要是介绍【AdaSeq论文解读系列】ACL 21-自动组合各种BERT模型,在实体抽取、观点抽取、句法分析等六大结构预测任务20+个数据集获SOTA,比ensemble更强!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

作者:落叶

链接:https://zhuanlan.zhihu.com/p/593364152

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

本文介绍了一项研究工作,提出了在结构预测问题上自动拼接word embedding(word embedding)以提高模型准确度的方法。该论文已被ACL2021接收为长文。

论文标题:

Automated Concatenation of Embeddings for Structured Prediction

论文地址:

https://aclanthology.org/2021.acl-long.206.pdf

代码链接:

https://github.com/Alibaba-NLP/ACE

1. 简介

基于上下文信息的预训练模型显着提高了自然语言处理中结构预测任务的性能。非常多的工作利用了如ELMo,BERT,Flair,XLM-R等预训练模型不断地刷新了各种结构预测任务的SOTA。最近的许多工作发现通过拼接不同类型的word embedding可以获得更好的词特征表示 ,从而进一步提高自然语言处理中结构预测问题的效果。然而,找到最佳的word embedding拼接组合往往与具体的任务和可候选的word embedding种类有关。同时,随着基于上下文信息的预训练语言模型的种类增加,让这个问题变得更加困难。受神经网络架构搜索(Neural Architecture Search, NAS)的最新进展所启发,本研究提出了Automated Concatenation of Embeddings (ACE)的方法,为结构预测任务寻找更好的embedding拼接。在这个方法中,控制器基于其信念模型(belief model)迭代地进行搜索过程,并对每个候选的word embedding对目标任务的有效性进行建模。在每一步,控制器基于信念模型对word embedding的拼接进行采样,然后将拼接的词特征表示作为输入提供给任务模型。该模型在任务数据集上进行训练,并将模型准确度作为奖励信号(reward signal)返回以进行更新控制器的信念模型。我们使用强化学习中的策略梯度(policy gradient)算法来解决优化问题。为了提高搜索过程的效率,我们还设计了一个特殊的奖励函数,通过基于当前拼接方式和所有先前采样的拼接方式之间的变换情况来累积所有奖励。我们在 6 个结构预测任务,包括命名实体识别(NER)、词性标注(PoS Tagging)、分块(Chunking),观点抽取(Aspect Extraction),句法依存分析(syntactic dependency parsing)和语义依存分析(semantic dependency parsing)上进行实验,在21个数据集刷新了SOTA。

2. 方法

任务模型

对于任务模型,我们在序列结构和图结构的结构预测问题上进行实验。给定输入句子x 和结构输出的结构预测y任务,我们可以计算概率分布:

其中表示给定输入所有可能的输出结构。根据不同的结构预测任务,输出结构可以是标签序列、树、图或其他结构。在本文中,我们使用序列结构和图结构输出作为两个示例的结构预测任务。我们使用 BiLSTM-CRF模型在序列结构任务进行预测,使用 BiLSTM-Biaffine模型在图结构的任务上进行预测:

其中 V是输入句子的词表示矩阵,包含n个词。第i个词的词表示 是 L种word embedding的拼接:

其中表示第个word embedding模型。

搜索空间设计

在NAS中,神经网络可以表示为具有一组节点和有向边的有向无环图。每个节点代表一个操作,而每条边代表这些节点之间的输入和输出。在 ACE 中,我们将每个候选embedding表示为一个节点。节点的输入是输入句子x,输出是对应的embedding v。由于我们将embedding拼接为任务模型的词表示,因此我们的搜索空间中的节点之间没有连接,从而可以显著减少搜索空间,最终搜索空间包含指数个可能的节点组合。为让模型每次搜索能够共享模型的参数,我们使用一个二元向量 a作为embedding mask来使未选择的embedding置0,从而让词特征的长度在每次搜索时保持不变。

在搜索空间内进行搜索

在搜索过程中,控制器迭代地为任务模型生成embedding mask。我们引入一个新的控制器参数。选择拼接的概率分布为下图所示。其中每个元素是从伯努利分布中独立采样,定义为:

其中是sigmoid函数。给定embedding mask,训练任务模型直到收敛并在验证集上返回模型准确度。由于准确度不能反向传播到控制器,我们使用强化算法进行优化,准确度用作训练控制器的奖励信号。控制器的目标是通过policy gradient最大化期望的reward 。我们的reward函数定义为:

在我们的方法中,由于计算精确的期望是非常困难的,我们采用每次采样单个拼接的方式来更新控制器的参数:

模型训练

为了训练控制器,我们使用字典来存储拼接和相应的验证集准确度。训练过程中,我们迭代训练控制器和下游任务模型,直到最大迭代次数。

3. 实验

实验数据集

为了展示 ACE 的有效性,我们对从句法任务到语义任务的各种结构预测任务进行了广泛的实验。这些任务是命名实体识别 (NER)、词性标注 (POS Tagging)、分块 (Chunking)、评价对象抽取 (Aspect Extraction, AE)、句法依存分析 (Syntactic Dependency Parsing, DP)和语义依存分析 (Semantic Dependency Parsing, SDP)。

我们实验中的6个结构预测任务的详细信息如下所示:

NER: CoNLL 2002和2003 shared task的4种语言数据集。

POS Tagging: 我们使用三个推特领域数据集,Ritter11-T-POS,ARK-Twitter和 Tweebank-v2数据集。

Chunking: CoNLL 2000 数据集。

AE: SemEval 14、SemEval 15和 SemEval 16 shared task中的多个数据集。

DP: Penn Tree Bank (PTB) 3.0

SDP: SemEval 15 shared task中的三个数据集。

在这些任务中,NER、PoS Tagging、Chunking和AE是序列结构的输出,而DP和SDP是图结构的输出。 POS Tagging、chunking 和 DP 是句法结构预测任务,而 NER、AE、SDP 是语义结构预测任务。

Embedding选取

针对不同的语言,我们选取了不同的候选embedding组合,这里以英语为例,我们使用ELMo、Flair、BERT base、GloVe、fastText、character embedding、多语言Flair、多语言BERT 和XLM-R。最终在实验中搜索空间的大小为 。

实验结果

为了展示我们方法的有效性,我们将ACE与两个strong baseline进行比较。第一个baseline为All,我们让任务模型自己学习每个对任务有帮助的候选embedding的贡献。我们拼接所有的embedding并训练任务模型,让模型中的线性变换层来自己学习每个embedding的权重。第二个baseline为Random,通过随机搜索的方式来寻找embedding拼接,这是NAS中的一个非常强的baseline。结果显示 ACE 在超过6个任务的23个测试集中的准确度几乎都优于两个baseline。将Random与All进行比较,Random平均优于All 0.4,并且在 23 个测试集中的 14 个测试集上超过了All的准确度,因此拼接所有embedding不是大多数结构预测任务的最佳解决方案,而我们的ACE方法通常可以带来更好的embedding组合。

从之前实验可以看出,ACE 在搜索更好的embedding拼接方面具有优势。我们进一步进行实验来比较ACE与目前的SOTA模型之间的准确度。最近有非常多的工作通过finetune基于transformer结构的embedding来获得更好的效果。然而,当拼接多个embedding时,由于复杂的超参数设置和大量的GPU内存消耗,对特定的embedding组合进行finetune变得困难。为了解决这个问题,我们首先在下游任务上finetune每个基于transformer结构的embedding,然后将这些embedding与其他种类的embedding拼接在一起输入到ACE中。结果表明,使用finetune后的embedding的 ACE模型在所有测试集中都达到了SOTA,这表明找到一个好的embedding拼接有助于提高结构预测任务的效果。我们还发现 ACE 比finetune单个embedding训练的模型更强,这显示了拼接finetune后的embedding的有效性。

4. 结语

在本文中,我们提出了ACE,自动搜索结构预测任务的更好的embedding拼接。我们设计了一个简单的搜索空间,并设计了具有新颖的奖励函数的强化学习来有效地指导控制器搜索更好的embedding拼接,结果表明ACE 在21个数据集的6个任务中达到了SOTA。

可以加入钉钉 4170025534交流哈~

这篇关于【AdaSeq论文解读系列】ACL 21-自动组合各种BERT模型,在实体抽取、观点抽取、句法分析等六大结构预测任务20+个数据集获SOTA,比ensemble更强!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/760209

相关文章

Python的Darts库实现时间序列预测

《Python的Darts库实现时间序列预测》Darts一个集统计、机器学习与深度学习模型于一体的Python时间序列预测库,本文主要介绍了Python的Darts库实现时间序列预测,感兴趣的可以了解... 目录目录一、什么是 Darts?二、安装与基本配置安装 Darts导入基础模块三、时间序列数据结构与

MyBatis Plus实现时间字段自动填充的完整方案

《MyBatisPlus实现时间字段自动填充的完整方案》在日常开发中,我们经常需要记录数据的创建时间和更新时间,传统的做法是在每次插入或更新操作时手动设置这些时间字段,这种方式不仅繁琐,还容易遗漏,... 目录前言解决目标技术栈实现步骤1. 实体类注解配置2. 创建元数据处理器3. 服务层代码优化填充机制详

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

基于Redis自动过期的流处理暂停机制

《基于Redis自动过期的流处理暂停机制》基于Redis自动过期的流处理暂停机制是一种高效、可靠且易于实现的解决方案,防止延时过大的数据影响实时处理自动恢复处理,以避免积压的数据影响实时性,下面就来详... 目录核心思路代码实现1. 初始化Redis连接和键前缀2. 接收数据时检查暂停状态3. 检测到延时过

C语言自定义类型之联合和枚举解读

《C语言自定义类型之联合和枚举解读》联合体共享内存,大小由最大成员决定,遵循对齐规则;枚举类型列举可能值,提升可读性和类型安全性,两者在C语言中用于优化内存和程序效率... 目录一、联合体1.1 联合体类型的声明1.2 联合体的特点1.2.1 特点11.2.2 特点21.2.3 特点31.3 联合体的大小1

Linux权限管理与ACL访问控制详解

《Linux权限管理与ACL访问控制详解》Linux权限管理涵盖基本rwx权限(通过chmod设置)、特殊权限(SUID/SGID/StickyBit)及ACL精细授权,由umask决定默认权限,需合... 目录一、基本权限概述1. 基本权限与数字对应关系二、权限管理命令(chmod)1. 字符模式语法2.

SpringBoot实现RSA+AES自动接口解密的实战指南

《SpringBoot实现RSA+AES自动接口解密的实战指南》在当今数据泄露频发的网络环境中,接口安全已成为开发者不可忽视的核心议题,RSA+AES混合加密方案因其安全性高、性能优越而被广泛采用,本... 目录一、项目依赖与环境准备1.1 Maven依赖配置1.2 密钥生成与配置二、加密工具类实现2.1

Python标准库datetime模块日期和时间数据类型解读

《Python标准库datetime模块日期和时间数据类型解读》文章介绍Python中datetime模块的date、time、datetime类,用于处理日期、时间及日期时间结合体,通过属性获取时间... 目录Datetime常用类日期date类型使用时间 time 类型使用日期和时间的结合体–日期时间(

精选20个好玩又实用的的Python实战项目(有图文代码)

《精选20个好玩又实用的的Python实战项目(有图文代码)》文章介绍了20个实用Python项目,涵盖游戏开发、工具应用、图像处理、机器学习等,使用Tkinter、PIL、OpenCV、Kivy等库... 目录① 猜字游戏② 闹钟③ 骰子模拟器④ 二维码⑤ 语言检测⑥ 加密和解密⑦ URL缩短⑧ 音乐播放

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我