跳转至

6 NLP中常用的预训练模型

学习目标

  • 了解当下NLP中流行的预训练模型
  • 掌握如何加载和使用预训练模型

当下NLP中流行的预训练模型:

  • BERT
  • GPT
  • Transformer-XL
  • XLNet
  • XLM
  • RoBERTa
  • DistilBERT
  • ALBERT
  • T5
  • XLM-RoBERTa

6.1 BERT及其变体

  • 概念

    BERT(Bidirectional Encoder Representations from Transformers)Google在2018年提出的一种预训练语言模型,它通过双向Transformer架构捕捉上下文信息,显著提升了自然语言处理(NLP)任务的性能。BERT的出现标志着NLP领域的一个重要里程碑,随后涌现了许多基于BERT的变体模型。

  • 核心思想

    BERT的核心思想是利用Transformer的Encoder结构,通过双向上下文的学习方式,从大规模无标注文本中预训练得到高质量的文本表示。它通过两个自监督任务进行预训练:

    • Masked Language Model (MLM): 随机屏蔽输入文本中的一些词,然后让模型预测被屏蔽的词。这迫使模型学习双向的上下文信息。
    • Next Sentence Prediction (NSP): 给定两个句子,让模型判断它们是否是原文中连续的句子。这个任务让模型学习句子间的关系。
  • BERT版本

    • bert-base-uncased: 编码器具有12个隐层, 输出768维张量, 12个自注意力头, 共1.1亿参数量, 在小写的英文文本上进行训练而得到。
    • bert-large-uncased: 编码器具有24个隐层, 输出1024维张量, 16个自注意力头, 共3.4亿参数量, 在小写的英文文本上进行训练而得到。
    • bert-base-cased: 编码器具有12个隐层, 输出768维张量, 12个自注意力头, 共1.1亿参数量, 在不区分大小写的英文文本上进行训练而得到。
    • bert-large-cased: 编码器具有24个隐层, 输出1024维张量, 16个自注意力头, 共3.4亿参数量, 在不区分大小写的英文文本上进行训练而得到。
    • bert-base-multilingual-uncased: 编码器具有12个隐层, 输出768维张量, 12个自注意力头, 共1.1亿参数量, 在小写的102种语言文本上进行训练而得到。
    • bert-large-multilingual-uncased: 编码器具有24个隐层, 输出1024维张量, 16个自注意力头, 共3.4亿参数量, 在小写的102种语言文本上进行训练而得到。
    • bert-base-chinese: 编码器具有12个隐层, 输出768维张量, 12个自注意力头, 共1.1亿参数量, 在简体和繁体中文文本上进行训练而得到。

6.2 GPT

  • 概念

    GPT(Generative Pre-trained Transformer)是OpenAI提出的一个基于Transformer的自回归语言模型,专注于文本生成任务。GPT采用单向解码器架构,即从左到右逐步生成文本,适用于多种NLP任务,如文本生成、机器翻译、代码补全、对话系统等

  • 核心思想

    GPT 模型的核心思想是利用Transformer的Decoder结构,通过单向的自回归 (Autoregressive)方式,从大规模无标注文本中预训练得到强大的语言模型。它只有一个目标:预测文本序列中的下一个词,以此来学习语言的规律。这种自回归的方式让GPT模型能够流畅地生成文本,并表现出强大的上下文理解能力。

  • GPT版本

    • gpt-1: 2018年发布的初代模型,解码器具有12个隐层, 输出768维张量, 12个自注意力头, 共1.1亿参数量, 由OpenAI在英文语料上进行训练而得到。
    • gpt-2: 2019年发布,解码器具有12个隐层, 输出768维张量, 12个自注意力头, 共1.24亿/3.55亿/7.74亿参数量, 在OpenAI GPT-2英文语料上进行训练而得到。
    • gpt2-xl: 解码器具有48个隐层, 输出1600维张量, 25个自注意力头, 共15亿参数量, 在大型的OpenAI GPT-2英文语料上进行训练而得到。
    • gpt-3: 2020年发布,解码器具有96个隐层, 输出12288维张量, 96个自注意力头, 共1750亿参数量。
    • gpt-4:2023年发布,推理能力、多模态、数学能力等方面大幅提升,推测其参数量远大于GPT-3,可能在1-10万亿 之间,解码器隐层可能增加到120-200,输出张量维度可能达到16000-32000,自注意力头数可能增加到128-160(每个头仍保持128维左右)。
    • gpt-4 Turbo:2023年11月发布,更小更快更便宜,但仍具备GPT-4级别的能力。参数可能在数千亿,隐层可能略少于GPT-4(如 96-128 层),自注意力头数仍保持在96-128之间。

6.3 Transformer-XL

  • 概念

    Transformer-XL是Google AI团队于2019年提出的一种改进型Transformer模型,旨在解决Transformer在长文本建模上的局限性。它通过引入相对位置编码长距离上下文缓存机制,显著提升了模型在长序列上的表现

  • 核心思想

    • Recurrence (循环机制): 将先前片段的隐藏状态缓存起来,作为当前片段处理的上下文信息,从而打破了固定长度上下文的限制。
    • Relative Positional Encoding (相对位置编码): 使用相对位置编码,而不是绝对位置编码,使得模型能够更好地捕捉片段之间的相对位置关系。
  • Transformer-XL版本

    • transfo-xl-wt103: 编码器具有18个隐层, 输出1024维张量, 16个自注意力头, 共2.57亿参数量, 在wikitext-103英文语料进行训练而得到。

6.4 XLNet及其变体

  • 概念

    XLNet是由Google Brain和CMU的研究人员在2019年提出的一种广义自回归预训练模型。它结合了BERT的双向上下文建模能力和Transformer-XL的长序列处理能力,通过排列语言建模(Permutation Language Modeling, PLM)实现了更强大的预训练效果。

  • 核心思想

    • 排列语言建模(PLM)
      • XLNet通过随机排列输入序列的顺序,使得模型能够从所有可能的位置组合中学习上下文信息。
      • 在每种排列中,模型以自回归的方式预测下一个词,但实际输入序列的顺序保持不变。
      • 这种方法既保留了自回归模型的优点,又能够捕捉双向上下文信息。
    • 双流自注意力机制(Two-Stream Self-Attention)
      • 为了解决排列语言建模中的位置信息问题,XLNet引入了双流自注意力机制:
        • 内容流(Content Stream):用于建模当前词的内容信息。
        • 查询流(Query Stream):用于建模当前词的位置信息。
      • 通过这种方式,XLNet能够在不泄露当前位置信息的情况下预测下一个词。
    • 集成Transformer-XL
      • XLNet继承了Transformer-XL的片段级递归机制和相对位置编码,能够处理更长的序列并保持上下文连贯性。
  • XLNet版本

    • xlnet-base-cased: 编码器具有12个隐层, 输出768维张量, 12个自注意力头, 共1.1亿参数量, 在英文语料上进行训练而得到。
    • xlnet-large-cased: 编码器具有24个隐层, 输出1024维张量, 16个自注意力头, 共2.4亿参数量, 在英文语料上进行训练而得到。

6.5 XLM

  • 概念

    XLM(Cross-lingual Language Model)是由Facebook AI在2019年提出的一种跨语言预训练模型。XLM的目标是通过共享的语义空间实现多语言之间的知识迁移,从而在跨语言任务(如机器翻译、跨语言文本分类等)中取得优异表现。

  • 核心思想

    • 共享词嵌入 (Shared Word Embeddings): 使用相同的词嵌入空间来表示不同语言的单词。
    • 跨语言预训练目标: 设计各种跨语言的预训练目标,使得模型能够在不同语言之间建立联系。
    • 使用多语言训练数据: 利用多语言的语料库进行训练。
  • XLM版本

    • xlm-mlm-en-2048: 编码器具有12个隐层, 输出2048维张量, 16个自注意力头, 在英文文本上进行训练而得到。

6.6 RoBERTa及其变体

  • 概念

    RoBERTa(Robustly Optimized BERT Pretraining Approach)是由Facebook AI在2019年提出的一种改进版 BERT模型。RoBERTa通过更高效的预训练策略和更大的数据集,显著提升了BERT的性能

  • 核心思想

    • 更大的数据集和更长的训练时间
      • RoBERTa使用了比BERT更大规模的数据集(如 Common Crawl 数据),并延长了训练时间。
      • 这使得模型能够学习更丰富的语言表示。
    • 移除下一句预测(NSP)任务
      • BERT中的NSP任务被证明对模型性能提升有限,RoBERTa移除了该任务,专注于掩码语言建模(MLM)。
    • 动态掩码策略
      • BERT在预训练时使用静态掩码,即每个序列的掩码位置固定。
      • RoBERTa引入了动态掩码策略,每次输入序列时重新生成掩码位置,增加了模型的鲁棒性。
    • 更大的批量大小
      • RoBERTa使用了更大的批量大小(如8K),提升了训练效率和模型性能。
    • 更高效的优化器
      • RoBERTa使用了AdamW优化器,并调整了学习率和权重衰减参数,进一步提升了训练效果。
  • RoBERTa版本

    • roberta-base: 编码器具有12个隐层, 输出768维张量, 12个自注意力头, 共1.25亿参数量, 在英文文本上进行训练而得到。
    • roberta-large: 编码器具有24个隐层, 输出1024维张量, 16个自注意力头, 共3.55亿参数量, 在英文文本上进行训练而得到。

6.7 DistilBERT及其变体

  • 概念

    DistilBERT是由Hugging Face在2019年提出的一种轻量级BERT模型。它通过知识蒸馏(Knowledge Distillation)技术,将BERT模型压缩为一个更小、更快的版本,同时保留了BERT的大部分性能。DistilBERT特别适合资源受限的场景(如移动设备或边缘计算)。

  • 核心思想

    • 知识蒸馏
      • 使用BERT作为教师模型,DistilBERT作为学生模型。
      • 学生模型通过模仿教师模型的输出分布(如softmax概率)来学习。
    • 减少模型层数
      • DistilBERT只有6层Transformer层,而BERT-base 有 12 层。
      • 通过减少层数,显著降低了模型的计算成本。
    • 移除Token-Type Embeddings和Pooler:DistilBERT移除了BERT中的Token-Type Embeddings和 Pooler层,进一步减少了模型参数。
    • 保留BERT的核心结构:DistilBERT保留了BERT的多头自注意力机制和前馈神经网络结构,确保了模型的表达能力。
  • DistilBERT版本

    • roberta-base: 编码器具有12个隐层, 输出768维张量, 12个自注意力头, 共1.25亿参数量, 在英文文本上进行训练而得到。
    • roberta-large: 编码器具有24个隐层, 输出1024维张量, 16个自注意力头, 共3.55亿参数量, 在英文文本上进行训练而得到。

6.8 ALBERT

  • 概念

    ALBERT(A Lite BERT)是由Google Research和Toyota Technological Institute at Chicago在2019年提出的一种轻量级BERT变体。ALBERT通过参数共享因式分解技术显著减少了模型参数量,同时保持了与BERT相当的性能。ALBERT特别适合资源受限的场景,并在多项自然语言处理任务中取得了优异的表现。

  • 核心思想

    • 参数共享(Parameter Sharing)
      • ALBERT在Transformer层的不同层之间共享参数(如注意力机制和前馈神经网络)。
      • 这种方法显著减少了模型参数量,同时保持了模型的表达能力。
    • 因式分解嵌入(Factorized Embedding Parameterization)
      • 在BERT中,词嵌入矩阵的大小为\(V×H\),其中\(V\)是词表大小,\(H\)是隐藏层大小。
      • ALBERT 将词嵌入矩阵分解为两个较小的矩阵\(V×E\)\(E×H\),其中\(E\)是嵌入大小(通常\(E≪H*E≪H\))。
      • 这种方法减少了词嵌入矩阵的参数量。
    • 句子顺序预测(Sentence Order Prediction, SOP)
      • ALBERT移除了BERT中的下一句预测(NSP)任务,引入了句子顺序预测任务。
      • SOP任务要求模型判断两个句子的顺序是否正确,从而更好地建模句子间的关系。
  • ALBERT版本

    • albert-base-v1: 编码器具有12个隐层, 输出768维张量, 12个自注意力头, 共1.25亿参数量, 在英文文本上进行训练而得到。
    • albert-base-v2: 编码器具有12个隐层, 输出768维张量, 12个自注意力头, 共1.25亿参数量, 在英文文本上进行训练而得到, 相比v1使用了更多的数据量, 花费更长的训练时间。

6.9 T5及其变体

  • 概念

    T5(Text-To-Text Transfer Transformer)是由Google Research在2019年提出的一种通用文本生成模型。T5的最大特点是将所有自然语言处理任务统一为文本到文本的转换任务,即输入和输出都是文本。这种统一的框架使得T5能够广泛应用于多种任务,如文本分类、翻译、摘要生成等。

  • 核心思想

    • 文本到文本的统一框架
      • 所有任务的输入和输出都是文本字符串。比如:
        • 文本分类:输入为文本,输出为类别标签(如 “positive” 或 “negative”)。
        • 翻译:输入为源语言文本,输出为目标语言文本。
        • 摘要生成:输入为长文本,输出为摘要。
    • 模型架构
      • T5基于标准的Transformer架构,但采用了编码器-解码器结构。
      • 编码器用于理解输入文本,解码器用于生成输出文本。
  • T5版本

    • t5-small: 编码器具有6个隐层, 输出512维张量, 8个自注意力头, 共0.6亿参数量, 在C4语料上进行训练而得到。
    • t5-base: 编码器具有12个隐层, 输出768维张量, 12个自注意力头, 共2.2亿参数量, 在C4语料上进行训练而得到。
    • t5-large: 编码器具有24个隐层, 输出1024维张量, 16个自注意力头, 共7.7亿参数量, 在C4语料上进行训练而得到。

6.10 XLM-RoBERTa及其变体

  • 概念

    XLM-RoBERTa(Cross-lingual Language Model RoBERTa)是基于RoBERTa的跨语言预训练模型,由Facebook AI于2019年推出。XLM-RoBERTa结合了XLM (Cross-lingual Language Model)RoBERTa的优势,采用了无监督预训练大规模数据集,以增强其跨语言的理解能力。

  • 核心思想

    • 多语言训练数据: 使用包含100多种语言的大规模语料库进行预训练,包括Common Crawl数据集。
    • 共享词嵌入: 通过Byte-Pair Encoding (BPE) 构建一个跨语言的共享词汇表,使得不同语言的词汇可以映射到同一语义空间。
    • BPE 分词器: 使用SentencePiece BPE分词器,可以更好地处理多种语言和未登录词。
    • RoBERTa 的训练策略: 采用RoBERTa的训练策略,包括移除NSP任务、使用动态掩码、更大的batch size、更长的训练时间等。
  • XLM-RoBERTa版本

    • xlm-roberta-base: 编码器具有12个隐层, 输出768维张量, 8个自注意力头, 共1.25亿参数量, 在2.5TB的100种语言文本上进行训练而得到.
    • xlm-roberta-large: 编码器具有24个隐层, 输出1027维张量, 16个自注意力头, 共3.55亿参数量, 在2.5TB的100种语言文本上进行训练而得到.

Tips:所有上述预训练模型及其变体都是以transformer为基础,只是在模型结构如神经元连接方式,编码器隐层数,多头注意力的头数等发生改变,这些改变方式的大部分依据都是由在标准数据集上的表现而定,因此,对于我们使用者而言,不需要从理论上深度探究这些预训练模型的结构设计的优劣,只需要在自己处理的目标数据上,尽量遍历所有可用的模型对比得到最优效果即可.