几个与BERT相关的预训练模型分享-ERNIE,XLM,LASER,MASS,UNILM

2023-11-10 08:20

本文主要是介绍几个与BERT相关的预训练模型分享-ERNIE,XLM,LASER,MASS,UNILM,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

基于Transformer的预训练模型汇总

1. ERNIE: Enhanced Language Representation with Informative Entities(THU)

特点:学习到了语料库之间得到语义联系,融合知识图谱到BERT中,本文解决了两个问题,structured knowledge encoding 和 Heterogeneous Information Fusion(如何融合语言的预训练向量空间和知识表征的向量空间)

因此,本文提出了同时在大规模语料库和知识图谱上预训练语言模型

  1. 信息抽取+编码知识信息:识别文本中的实体,并将实体与KG中的实体对齐(用knowledge embedding方法),得到的entity embedding作为ERNIE的输入,这样ERNIE将知识模块的实体表征正和岛予以模块的隐藏层中。
  2. 语言模型训练,使用了MLM+NSP+随机mask实体的方法

模型结构:
ERNIE的模型结构

如图所示,其中T-encoder用来提取输入端的基础词法信息,这部分与BERT一样,把从embedding层输入的文本送到Transformer中做特征提取。K-enocder是本文的创新点,用来将外部的指示图信息融入。其中外部信息包括T-encoder的结果和TransE计算出的知识嵌入。

2. ERNIE: Enhanced Representation through Knowledge Integration (ERNIE2.0)

本文中正式引入了continual learning以达成多任务模型,为了解决多种任务,作者新增了task embedding。模型结构如下:
在这里插入图片描述
在这里插入图片描述
如图所示,任务被分成了三类:

  1. Word-aware Pre-training Tasks:其中包括knowledge masking task(常规mask),Capitalization prediction task(预测大写),Token-Document relation prediction task(预测某一个段落的token是否出现在同一篇文档的另外段落中)。
  2. Structure-aware Pre-training Tasks:包括Sentence Reordering Task(把一段话分割成多个片段进行重排顺序),Sentence distance task(预测句子之间的距离,三分类任务)
  3. Semantic-aware Pre-training Tasks:包括Disclosure relation task(预测句子间的语义关系),IR relevance task(信息解锁文本的相关性)

3. ERNIE-Tiny

作为轻量版的预训练模型,Tiny的体积要比base小很多,运行速度也比ERNIE-base快了4.3倍。Tiny使用了更浅的模型,更大的hidden-size,使用了subword代替char(增大了词粒度,缩小了文本长度),同时也使用了知识蒸馏的方法(tiny为学生模型,base为老师模型)。

Tiny中的知识蒸馏:在这里插入图片描述

关于如何缩小体积很大的预训练模型,一般有以下几种方法:

  1. 知识蒸馏Distillation:通过将大模型的知识提取,转移导入到小模型中的过程。使用大模型作为老师模型,通过输入训练数据到老师模型,用以训练学生模型,使学生模型达到相似效果。
  2. 量化Quantization:将高精度的模型使用低精度表示,使模型变小
  3. 剪枝Pruning:减掉对结果无用的部分模型,精细化模型。剪枝的具体操作是将剪掉的部分模型参数设置为0.分为权重剪枝,神经元剪枝,权重矩阵剪枝。

4.Cross-lingual Language Model Pretraining

对于BERT的改进可以大体分为两个方向:第一个是纵向,即去研究bert模型结构或者算法优化等方面的问题,致力于提出一种比bert效果更好更轻量级的模型;第二个方向是横向,即在bert的基础上稍作修改去探索那些vanilla bert还没有触及的领域。直观上来看第二个方向明显会比第一个方向简单,关键是出效果更快。本文就属于第二类。

本文使用了跨语言的语言模型XLM,使用了两种预训练方法:

  1. 基于单语语料的无监督学习
  2. 基于跨语言的平行语料库的有监督学习

其在几个多语任务上比如XNLI和机器翻译都拉高了SOTA。那么我们就来看看具体的模型,整体框架和BERT是非常类似,修改了几个预训练目标。

  1. Shared sub-word vocabulary:目前的词向量基本都是在单语言语料集中训练得到的,所以其embedding不能涵盖跨语言的语义信息。为了更好地将多语言的信息融合在一个共享的词表中,作者在文本预处理上使用了字节对编码算法(「Byte Pair Encoding (BPE)」),大致思想就是利用单个未使用的符号迭代地替换给定数据集中最频繁的符号对(原始字节)。这样处理后的词表就对语言的种类不敏感了,更多关注的是语言的组织结构。
  2. Masked Language modeling (MLM)
  3. Causal Language Modeling (CLM)
  4. Translation Language Modeling (TLM):是本文的核心,用有监督的跨语言并行数据训练模型

5. Massively Multilingual Sentence Embeddings for Zero-Shot Cross-Lingual Transfer and Beyond

提出了LASER,使用单个模型解决多语言问题,模型结构:在这里插入图片描述

6. MASS: Masked Sequence to Sequence Pre-training for Language Generation

问题:传统的BERT不能解决NLG生成问题。

不同于BERT仅使用Transformer的encoder,作者提出联合训练Transformer的encoder和decoder来解决这个问题。其中encoder训练使用了MLM,decoder的训练输入为与encoder一样的句子,但是做相反的masking。

7.Unified Language Model Pre-training for Natural Language Understanding and Generation(Microsoft/2019)

同样是为了解决NLG问题,UNILM这个模型直接解决掉NLU和NLG两方面的问题,是典型的的多任务模型。

预训练模型的目标函数有三种:

  1. 单向语言模型,如ELMo,GPT
  2. 双向语言模型,如BERT
  3. SeqSeq模型
    这三个函数使用一组Transformer进行训练,参数共享。

目标函数示意:
在这里插入图片描述
模型输入为一串序列(或一对序列,依照目标函数的格式),在embedding部分与一般的BERT是一样的,分成token/position/segment embedding.

mask部分使用了self attention,即为对不同的模型使用不同的mask方法,目的是同意语言模型。本文中共有三种mask形式。依照三种目标函数定义:

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

8.结论

  1. 模型和数据都很大,但是最终出来的效果是美的,争取往小而美的方向发展;
  2. 相比于BERT仅仅关注在encoder上,LASER的工作则是考虑了encoder-decoder的联合训练。从LASER模型框架上也可以看出其无法提取word级别的特征,擅长于跨语言任务;
  3. 对于XLM和MASS都是涉及跨语言模型,补充了BERT在NLG任务上的不足。模型层面而言XLM没有使用传统的encoder-decoder框架,属于比较讨巧的方式;
  4. UNILM可以同时处理NLU和NLG任务,在GLUE上首次不加外部数据打赢了BERT。后续的改进可以考虑加入跨语言任务的预训练,比如XLM和MASS做的工作。

Ref:
ERNIE: Enhanced Language Representation with Informative Entities(THU/ACL2019)
ERNIE2.0: A Continual Pre-training Framework for Language Understanding
ERNIE-tiny
Cross-lingual Language Model Pretraining
XLM – Enhancing BERT for Cross-lingual Language Model
Massively Multilingual Sentence Embeddings for Zero-Shot Cross-Lingual Transfer and Beyond
MASS: Masked Sequence to Sequence Pre-training for Language Generation
Unified Language Model Pre-training for Natural Language Understanding and Generation(Microsoft/2019)
芝麻街跨界NLP | 预训练模型专辑(二)
芝麻街跨界NLP,没有一个ERNIE是无辜的

这篇关于几个与BERT相关的预训练模型分享-ERNIE,XLM,LASER,MASS,UNILM的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Go语言代码格式化的技巧分享

《Go语言代码格式化的技巧分享》在Go语言的开发过程中,代码格式化是一个看似细微却至关重要的环节,良好的代码格式化不仅能提升代码的可读性,还能促进团队协作,减少因代码风格差异引发的问题,Go在代码格式... 目录一、Go 语言代码格式化的重要性二、Go 语言代码格式化工具:gofmt 与 go fmt(一)

Python虚拟环境与Conda使用指南分享

《Python虚拟环境与Conda使用指南分享》:本文主要介绍Python虚拟环境与Conda使用指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、python 虚拟环境概述1.1 什么是虚拟环境1.2 为什么需要虚拟环境二、Python 内置的虚拟环境工具

CSS3中的字体及相关属性详解

《CSS3中的字体及相关属性详解》:本文主要介绍了CSS3中的字体及相关属性,详细内容请阅读本文,希望能对你有所帮助... 字体网页字体的三个来源:用户机器上安装的字体,放心使用。保存在第三方网站上的字体,例如Typekit和Google,可以link标签链接到你的页面上。保存在你自己Web服务器上的字

详解如何使用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处理大量Excel文件的十个技巧分享

《Python处理大量Excel文件的十个技巧分享》每天被大量Excel文件折磨的你看过来!这是一份Python程序员整理的实用技巧,不说废话,直接上干货,文章通过代码示例讲解的非常详细,需要的朋友可... 目录一、批量读取多个Excel文件二、选择性读取工作表和列三、自动调整格式和样式四、智能数据清洗五、

JDK9到JDK21中值得掌握的29个实用特性分享

《JDK9到JDK21中值得掌握的29个实用特性分享》Java的演进节奏从JDK9开始显著加快,每半年一个新版本的发布节奏为Java带来了大量的新特性,本文整理了29个JDK9到JDK21中值得掌握的... 目录JDK 9 模块化与API增强1. 集合工厂方法:一行代码创建不可变集合2. 私有接口方法:接口

电脑系统Hosts文件原理和应用分享

《电脑系统Hosts文件原理和应用分享》Hosts是一个没有扩展名的系统文件,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应... Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应

解决tomcat启动时报Junit相关错误java.lang.ClassNotFoundException: org.junit.Test问题

《解决tomcat启动时报Junit相关错误java.lang.ClassNotFoundException:org.junit.Test问题》:本文主要介绍解决tomcat启动时报Junit相... 目录tomcat启动时报Junit相关错误Java.lang.ClassNotFoundException

Maven中引入 springboot 相关依赖的方式(最新推荐)

《Maven中引入springboot相关依赖的方式(最新推荐)》:本文主要介绍Maven中引入springboot相关依赖的方式(最新推荐),本文给大家介绍的非常详细,对大家的学习或工作具有... 目录Maven中引入 springboot 相关依赖的方式1. 不使用版本管理(不推荐)2、使用版本管理(推