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

相关文章

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

Spring定时任务只执行一次的原因分析与解决方案

《Spring定时任务只执行一次的原因分析与解决方案》在使用Spring的@Scheduled定时任务时,你是否遇到过任务只执行一次,后续不再触发的情况?这种情况可能由多种原因导致,如未启用调度、线程... 目录1. 问题背景2. Spring定时任务的基本用法3. 为什么定时任务只执行一次?3.1 未启用

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

如何使用Python实现一个简单的window任务管理器

《如何使用Python实现一个简单的window任务管理器》这篇文章主要为大家详细介绍了如何使用Python实现一个简单的window任务管理器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起... 任务管理器效果图完整代码import tkinter as tkfrom tkinter i

C++从序列容器中删除元素的四种方法

《C++从序列容器中删除元素的四种方法》删除元素的方法在序列容器和关联容器之间是非常不同的,在序列容器中,vector和string是最常用的,但这里也会介绍deque和list以供全面了解,尽管在一... 目录一、简介二、移除给定位置的元素三、移除与某个值相等的元素3.1、序列容器vector、deque

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

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

Java使用多线程处理未知任务数的方案介绍

《Java使用多线程处理未知任务数的方案介绍》这篇文章主要为大家详细介绍了Java如何使用多线程实现处理未知任务数,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 知道任务个数,你可以定义好线程数规则,生成线程数去跑代码说明:1.虚拟线程池:使用 Executors.newVir

Spring Boot中定时任务Cron表达式的终极指南最佳实践记录

《SpringBoot中定时任务Cron表达式的终极指南最佳实践记录》本文详细介绍了SpringBoot中定时任务的实现方法,特别是Cron表达式的使用技巧和高级用法,从基础语法到复杂场景,从快速启... 目录一、Cron表达式基础1.1 Cron表达式结构1.2 核心语法规则二、Spring Boot中定

使用Python开发一个图像标注与OCR识别工具

《使用Python开发一个图像标注与OCR识别工具》:本文主要介绍一个使用Python开发的工具,允许用户在图像上进行矩形标注,使用OCR对标注区域进行文本识别,并将结果保存为Excel文件,感兴... 目录项目简介1. 图像加载与显示2. 矩形标注3. OCR识别4. 标注的保存与加载5. 裁剪与重置图像

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo