ACL 2020 | 面向序列标注任务的“集百家所长”多语种模型来了!

2023-11-01 08:30

本文主要是介绍ACL 2020 | 面向序列标注任务的“集百家所长”多语种模型来了!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

上海科技大学和阿里巴巴发布了一篇被ACL2020收录的论文《Structure-Level Knowledge Distillation For Multilingual Sequence Labeling》,论文针对在自然语言处理中的序列标注任务中,多语种模型的表现不及各个语种单独的模型做出了改进,通过知识蒸馏的手段,从各个单语种模型中学习到结构层级的知识,训练一个新的多语种模型,缩短了多语种模型跟各个语种单独模型之间的差距。在4个任务的15个数据集上,文章提出的模型表现都优于多个经典的baseline模型。同时,对于那些缺乏数据的小语种具有较强的泛化能力。

图1 论文信息

论文链接:

https://arxiv.org/pdf/2004.03846.pdf​arxiv.org

 

简介

序列标注是自然语言处理的一类重要的任务,常见的有命名实体识别,词性标注等等,它能够提供一些额外的信息,从而对于下游的自然语言处理任务有着重要影响。大多数当前的序列标注任务都是针对单个语种的,当需要把模型跨语种迁移到那些缺乏语料的语种上时依旧需要训练单独的模型。全世界有7000多种语种,在每个语种上都单独训练一个模型是非常消耗时间跟精力的事情,其中还有很多小语种是严重缺乏足够的训练语料的。因此,训练一个针对多语种的模型显得十分必要,于是MultilingualBERT横空出世。不过,它的效果比不上各个单语种模型,这是因为单语种模型利用了各种强大的预训练好的词表征能力。

对此,文章利用了知识蒸馏,将各个具有强大表征能力的单语种模型的知识迁移到一个多语种模型。知识蒸馏,是通过训练一个student模型去尽可能的模仿teacher模型的预测,希望得到一个较小较快的student模型,同时尽可能具备teacher模型强大的预测能力。

背景

在BiLSTM-CRF中,给定一个输入序列 [公式]和它对应的预测标签 [公式] ,,通过BiLSTM得到的上下文表达可以表示为 [公式] ,则对应的条件概率可以按以下公式计算。其中 [公式] 跟 [公式] 是相应的状态跟转移函数的参数, [公式] 是序列开始的标记。

公式一:

公式二:

相应的负对数似然函数可以表示为:公式三:

最常见的知识蒸馏方法的损失函数如下公式四所示,后续实验中提及的Emission模型就是已经这样的方式得到。公式四:

方法

关于如何从多个单语种模型中通过蒸馏出结构层级的知识从而学习到一个多语种的序列标注模型,文章提出两种方法,一种是Top-K蒸馏,是通过近似最小化teacher跟student的结构层级概率分布得到的,另一种是后验蒸馏,通过聚合结构层级的知识到局部后验概率分布,然后通过最小话两者的局部后验概率分布得到。详情可见图2。

图2 论文模型图

Top-K蒸馏通过维特比算法,得到预测得分最高的K个预测序列,将他们通过公式五的方式计算,可以得到student模型的概率分布关于teacher模型的概率分布的条件期望的一个有偏估计。其中 [公式] , [公式] 分别表示student模型与teacher模型的预测结果。

公式五:

在基本的Top-K方法中,当K变大后效果会变得愈发糟糕。一种改进的方式是加权Top-K,如公式六和公式七所示,其基本思想就是对K个不同的预测序列赋予不同的权重,得分越高的序列赋予更高的权重。

公式六:

公式七:

在Top-K的方法中,当K增大时计算量会增加,进而速度会变慢。文章由此提出另一种方法后验蒸馏,具体的计算方法如公式八和公式九所示。

公式八:

公式九:

当选定好蒸馏方法后,对于任何语种的语料数据,会利用单语种的teacher模型去计算得到Top-K的预测序列或者后验分布,然后多语种的student模型会从这些硬标签跟软标签去联合学习,最小化如下的损失函数,如公式十所示,依次遍历所有语种,训练得到一个多语种的student模型。

公式十:

实验结果

文章在四种不同的序列标注任务中进行了实验,对应的数据集有CoNLLNER,WikiAnnNER,UniversalDependencies和AspectExtraction。具体实验结果如图2所示。其中,Baseline指的是没有经过知识蒸馏而训练得到的多语种模型,Emission模型指的是KD采用Emission的模型,Top-K、Top-WK和Posterior指的是文章提出来的新模型,Pos.+Top-WK指的是混合了Top-WK跟Posterior的模型。

主要有以下六个结论:

  • 在大部分实验中,采用BiLSTM-CRF的多语种模型效果要优于采用BiLSTM-Softmax的多语种模型。这也跟当前序列标注任务的现状是一致的。
  • 单语种的teacher模型效果要优于多语种的student模型。大概率是因为单语种的模型拥有强大的词嵌入,能够提供额外的信息,而这时多语种的student模型所不具备的。
  • Emission模型不具备迁移知识的能力,在大部分数据集上表现都不及baseline模型。
  • Top-K跟Top_WK都要优于baseline模型,其中Top-WK的效果要优于Top-K。
  • Posterior在大部分数据集上都取得最好的效果。
  • Top-WK+Posterior的效果介于Top-WK和Posterior之间。

图3 实验结果图

换句话说,可以归纳为:Posterior>Top-WK+Posterior>Top-WK>Top-K>Baseline>Emission.

总结

文章的主要贡献是,在序列标注任务中,提出了两种结构层级上的知识蒸馏手段,Top-K蒸馏跟后验蒸馏,能够从单语种的teacher模型中蒸馏出知识,学习出一个多语种的student模型。在4个不同任务的25个数据集上,验证了文章提及的这两种方法相对于原有的方法都有一定的提升。

高效可行的多语种模型训练方法,对于数量众多的语言种类而言,不必再去对每种语言训练一个单独的模型,是一种行之有效的解决方法。同时,对于那些相对小众的语种,也具备较强的泛化能力。文章提出的这些方法,在序列标注任务中具有一定的前景,能为下游的一些自然语言处理任务。例如,情感分析、意图识别等提供一定的帮助,值得后续更多更深入的研究。

这篇关于ACL 2020 | 面向序列标注任务的“集百家所长”多语种模型来了!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

一文详解MySQL如何设置自动备份任务

《一文详解MySQL如何设置自动备份任务》设置自动备份任务可以确保你的数据库定期备份,防止数据丢失,下面我们就来详细介绍一下如何使用Bash脚本和Cron任务在Linux系统上设置MySQL数据库的自... 目录1. 编写备份脚本1.1 创建并编辑备份脚本1.2 给予脚本执行权限2. 设置 Cron 任务2

详解如何使用Python从零开始构建文本统计模型

《详解如何使用Python从零开始构建文本统计模型》在自然语言处理领域,词汇表构建是文本预处理的关键环节,本文通过Python代码实践,演示如何从原始文本中提取多尺度特征,并通过动态调整机制构建更精确... 目录一、项目背景与核心思想二、核心代码解析1. 数据加载与预处理2. 多尺度字符统计3. 统计结果可

SpringBoot整合Sa-Token实现RBAC权限模型的过程解析

《SpringBoot整合Sa-Token实现RBAC权限模型的过程解析》:本文主要介绍SpringBoot整合Sa-Token实现RBAC权限模型的过程解析,本文给大家介绍的非常详细,对大家的学... 目录前言一、基础概念1.1 RBAC模型核心概念1.2 Sa-Token核心功能1.3 环境准备二、表结

利用Python实现时间序列动量策略

《利用Python实现时间序列动量策略》时间序列动量策略作为量化交易领域中最为持久且被深入研究的策略类型之一,其核心理念相对简明:对于显示上升趋势的资产建立多头头寸,对于呈现下降趋势的资产建立空头头寸... 目录引言传统策略面临的风险管理挑战波动率调整机制:实现风险标准化策略实施的技术细节波动率调整的战略价

PostgreSQL 序列(Sequence) 与 Oracle 序列对比差异分析

《PostgreSQL序列(Sequence)与Oracle序列对比差异分析》PostgreSQL和Oracle都提供了序列(Sequence)功能,但在实现细节和使用方式上存在一些重要差异,... 目录PostgreSQL 序列(Sequence) 与 oracle 序列对比一 基本语法对比1.1 创建序

Django之定时任务django-crontab的实现

《Django之定时任务django-crontab的实现》Django可以使用第三方库如django-crontab来实现定时任务的调度,本文主要介绍了Django之定时任务django-cront... 目录crontab安装django-crontab注册应用定时时间格式定时时间示例设置定时任务@符号

Android实现定时任务的几种方式汇总(附源码)

《Android实现定时任务的几种方式汇总(附源码)》在Android应用中,定时任务(ScheduledTask)的需求几乎无处不在:从定时刷新数据、定时备份、定时推送通知,到夜间静默下载、循环执行... 目录一、项目介绍1. 背景与意义二、相关基础知识与系统约束三、方案一:Handler.postDel

springboot使用Scheduling实现动态增删启停定时任务教程

《springboot使用Scheduling实现动态增删启停定时任务教程》:本文主要介绍springboot使用Scheduling实现动态增删启停定时任务教程,具有很好的参考价值,希望对大家有... 目录1、配置定时任务需要的线程池2、创建ScheduledFuture的包装类3、注册定时任务,增加、删

Spring Boot 集成 Quartz并使用Cron 表达式实现定时任务

《SpringBoot集成Quartz并使用Cron表达式实现定时任务》本篇文章介绍了如何在SpringBoot中集成Quartz进行定时任务调度,并通过Cron表达式控制任务... 目录前言1. 添加 Quartz 依赖2. 创建 Quartz 任务3. 配置 Quartz 任务调度4. 启动 Sprin

Linux之计划任务和调度命令at/cron详解

《Linux之计划任务和调度命令at/cron详解》:本文主要介绍Linux之计划任务和调度命令at/cron的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux计划任务和调度命令at/cron一、计划任务二、命令{at}介绍三、命令语法及功能 :at