几个与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

相关文章

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

Golang操作DuckDB实战案例分享

《Golang操作DuckDB实战案例分享》DuckDB是一个嵌入式SQL数据库引擎,它与众所周知的SQLite非常相似,但它是为olap风格的工作负载设计的,DuckDB支持各种数据类型和SQL特性... 目录DuckDB的主要优点环境准备初始化表和数据查询单行或多行错误处理和事务完整代码最后总结Duck

Golang的CSP模型简介(最新推荐)

《Golang的CSP模型简介(最新推荐)》Golang采用了CSP(CommunicatingSequentialProcesses,通信顺序进程)并发模型,通过goroutine和channe... 目录前言一、介绍1. 什么是 CSP 模型2. Goroutine3. Channel4. Channe

关于Maven生命周期相关命令演示

《关于Maven生命周期相关命令演示》Maven的生命周期分为Clean、Default和Site三个主要阶段,每个阶段包含多个关键步骤,如清理、编译、测试、打包等,通过执行相应的Maven命令,可以... 目录1. Maven 生命周期概述1.1 Clean Lifecycle1.2 Default Li

numpy求解线性代数相关问题

《numpy求解线性代数相关问题》本文主要介绍了numpy求解线性代数相关问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 在numpy中有numpy.array类型和numpy.mat类型,前者是数组类型,后者是矩阵类型。数组

将Python应用部署到生产环境的小技巧分享

《将Python应用部署到生产环境的小技巧分享》文章主要讲述了在将Python应用程序部署到生产环境之前,需要进行的准备工作和最佳实践,包括心态调整、代码审查、测试覆盖率提升、配置文件优化、日志记录完... 目录部署前夜:从开发到生产的心理准备与检查清单环境搭建:打造稳固的应用运行平台自动化流水线:让部署像

C#读取本地网络配置信息全攻略分享

《C#读取本地网络配置信息全攻略分享》在当今数字化时代,网络已深度融入我们生活与工作的方方面面,对于软件开发而言,掌握本地计算机的网络配置信息显得尤为关键,而在C#编程的世界里,我们又该如何巧妙地读取... 目录一、引言二、C# 读取本地网络配置信息的基础准备2.1 引入关键命名空间2.2 理解核心类与方法

Golang使用etcd构建分布式锁的示例分享

《Golang使用etcd构建分布式锁的示例分享》在本教程中,我们将学习如何使用Go和etcd构建分布式锁系统,分布式锁系统对于管理对分布式系统中共享资源的并发访问至关重要,它有助于维护一致性,防止竞... 目录引言环境准备新建Go项目实现加锁和解锁功能测试分布式锁重构实现失败重试总结引言我们将使用Go作

Redis的Hash类型及相关命令小结

《Redis的Hash类型及相关命令小结》edisHash是一种数据结构,用于存储字段和值的映射关系,本文就来介绍一下Redis的Hash类型及相关命令小结,具有一定的参考价值,感兴趣的可以了解一下... 目录HSETHGETHEXISTSHDELHKEYSHVALSHGETALLHMGETHLENHSET

Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)

《Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)》:本文主要介绍Python基于火山引擎豆包大模型搭建QQ机器人详细的相关资料,包括开通模型、配置APIKEY鉴权和SD... 目录豆包大模型概述开通模型付费安装 SDK 环境配置 API KEY 鉴权Ark 模型接口Prompt