一、Transformer的三种使用方式

📍Transformer结构可以根据任务需求灵活裁剪或组合,其在预训练模型中的三种主要使用方式如下:

  1. 只用编码器(Encoder)部分:自编码预训练语言模型

    • 代表模型:BERT、RoBERTa、ALBERT
    • 优势:擅长理解上下文,适合分类、序列标注等理解类任务。
  2. 只用解码器(Decoder)部分:自回归预训练语言模型

    • 代表模型:GPT系列(GPT-2、GPT-3、GPT-4)
    • 优势:擅长生成文本,适合对话系统、文本生成等生成类任务。
  3. 同时使用编码器和解码器:编码器-解码器结构的预训练语言模型

    • 代表模型:T5(Text-To-Text Transfer Transformer)、mT5、BART
    • 优势:统一输入输出为文本,适合多种任务(如摘要、翻译、问答等)。

二、自编码预训练模型

1. 什么是自编码预训练语言模型

自编码预训练语言模型(如BERT)利用上下文信息进行掩码预测,本质上是一种“填空”任务。它通过掩盖输入中的某些词,然后训练模型预测被掩盖的词,从而学习词与词之间的关系。

  • 特点:
  • 输入和输出的长度相同
  • 适合处理句子级理解任务
  • 预训练目标:Masked Language Modeling(MLM)

2. BERT模型结构

📍BERT(Bidirectional Encoder Representations from Transformers)由多层Transformer Encoder堆叠而成:

  • 输入格式:

  • [CLS] token:分类任务使用

  • [SEP] token:区分句子

  • Token Embedding + Segment Embedding + Position Embedding

  • 网络结构:

  • 多层双向Transformer编码器

  • 多头注意力机制 + 残差连接 + 层归一化

3. BERT预训练任务

  • Masked Language Model(MLM):
  • 随机掩盖输入的15%词语,让模型预测原始词语
  • Next Sentence Prediction(NSP):
  • 判断两个句子是否为连续句子(已被RoBERTa等模型移除)

4. BERT的应用方式

BERT可以通过两种方式应用到下游任务:

  • 文本分类任务(如情感分析),在[CLS] token后接一个全连接层进行分类
  • 命名实体识别(NER),对每个token输出接线性层 + CRF,进行序列标注
  • 机器阅读理解

三、自回归预训练模型

1. 自回归预训练语言模型

📍自回归模型采用从左到右逐词预测的方式进行训练。每一步的输入是前面生成的词,模型预测下一个词。

  • 特点:
  • 单向上下文建模(通常是左到右)
  • 擅长生成流畅的文本
  • 预训练目标:预测下一个词(Next Token Prediction)

2. GPT-1模型结构

GPT-1(Generative Pre-trained Transformer 1)是OpenAI在2018年提出的首个基于Transformer架构的大型语言模型。它的核心设计理念是使用Transformer的Decoder部分(进行了少量修改)来构建一个单向的、自回归的语言模型,专门用于生成文本

📍以下是GPT-1网络结构的关键组成部分和特点:

  1. 核心架构:Transformer Decoder (Modified)

    • GPT-1没有使用完整的Transformer架构(包含Encoder和Decoder),而是只使用了Transformer的Decoder部分,并对其进行了简化
    • 关键修改: 移除了原始Transformer Decoder中用于接收Encoder输出的第二个“Encoder-Decoder Attention”子层。这是因为GPT-1在预训练阶段是一个纯粹的无监督语言模型,它只需要根据上文预测下一个词,不需要处理来自另一个序列(如源语言句子)的信息。
  2. 堆叠的Decoder Blocks:

    • 整个模型由 N 个相同的Decoder Block 堆叠而成(在GPT-1论文中,N = 12)。
    • 每个Decoder Block包含两个核心子层:
      • a. Masked Multi-Head Self-Attention:
      • b. Position-wise Feed-Forward Network:
      • c. 残差连接和层归一化:
  3. 输入表示:

    • Token Embedding: 输入文本首先被分割成子词单元(如Byte Pair Encoding - BPE)。每个子词单元被映射成一个高维的稠密向量(Embedding)。
    • Positional Embedding: 由于Transformer本身没有内置的顺序信息,需要额外添加位置编码来表示每个词在序列中的位置。GPT-1使用的是可学习的位置嵌入向量(与Transformer原论文中的固定正弦/余弦编码不同)。每个位置都有一个对应的向量,这些向量会在训练过程中学习得到。
    • 输入向量: 对于序列中的每个位置 i,最终的输入表示是 Token Embedding(i) + Positional Embedding(i)
  4. 输出层:

    • 最后一个Decoder Block的输出是一个高维向量序列(每个位置对应一个向量)。
    • 这个序列会通过一个线性投影层(通常称为LM Head),将每个位置的向量映射到整个词汇表大小的维度。
    • 然后应用 Softmax 函数,将线性层的输出转换为一个概率分布。这个分布表示在给定所有上文的情况下,下一个词是词汇表中每个词的概率。

总结GPT-1结构的关键特点:

  • 单向性: 通过Masked Self-Attention实现,只能利用左侧的上文信息。
  • 自回归: 预测下一个词时依赖于之前生成的所有词。
  • Transformer Decoder Based: 核心是堆叠的、修改过的Transformer Decoder Blocks。
  • 无Encoder-Decoder Attention: 移除了原始Decoder中用于跨序列注意力的部分。
  • 位置嵌入: 使用可学习的位置嵌入。
  • 深度堆叠: 由多个(12层)相同的Block组成。

四、Seq2Seq预训练模型

1. 什么是Seq2Seq预训练模型

📍Seq2Seq模型同时使用Transformer的编码器和解码器部分。它将输入序列编码为一个表示,然后由解码器将其解码成目标序列。

  • 优势:
  • 能同时理解输入文本与生成目标文本
  • 广泛用于翻译、摘要、问答、代码生成等任务

2. 代表模型:T5(Text-To-Text Transfer Transformer)

T5统一了所有NLP任务为“文本到文本”格式:

  • 输入:“任务描述:输入文本”

  • 输出:“目标文本”

  • 模型结构:

  • Encoder:将输入文本编码为隐表示

  • Decoder:根据表示生成输出文本

  • 预训练目标:

  • 采用“Span Corruption”策略进行训练(掩盖连续片段)

  • 应用任务:

  • 文本摘要、问答、文本生成、翻译、情感分析等

五、什么是 Transformers 库?

Transformers 是 Hugging Face 公司推出的一个开源 Python 库,提供了对 预训练语言模型(如 BERT、GPT、T5、RoBERTa 等) 的便捷访问和使用接口。它支持:

  • 多种 NLP 任务:文本分类、命名实体识别、问答、文本生成等;
  • 多种深度学习框架:支持 PyTorch、TensorFlow 和 JAX;
  • 使用简单、模型丰富、社区活跃。

支持的预训练模型举例

Pipelines(管道接口)

封装了常见任务的使用流程,适合快速原型开发。

支持的任务包括:

  • sentiment-analysis
  • text-classification
  • question-answering
  • translation
  • text-generation
  • summarization
  • token-classification(如命名实体识别)
from transformers import pipeline

# 快速使用 pipeline 执行情感分析任务
classifier = pipeline("sentiment-analysis")
result = classifier("I love using Hugging Face Transformers!")
print(result)  # [{'label': 'POSITIVE', 'score': 0.9998}]

Tokenizer(分词器)

  • 将文本转为模型输入的 token ids;
  • 支持批量编码、解码、添加特殊符号等
    tokens = tokenizer("Transformers are amazing!", return_tensors="pt")
    print(tokens)

    四、使用案例:文本分类

    from transformers import AutoTokenizer, AutoModelForSequenceClassification
    import torch
    
    model_name = "distilbert-base-uncased-finetuned-sst-2-english"
    tokenizer = AutoTokenizer.from_pretrained(model_name)
    model = AutoModelForSequenceClassification.from_pretrained(model_name)
    
    # 输入文本
    inputs = tokenizer("I hate this movie.", return_tensors="pt")
    outputs = model(**inputs)
    
    # 获取预测类别
    logits = outputs.logits
    predicted_class = torch.argmax(logits).item()
    print("Predicted label:", predicted_class)

    致谢˚༉‧✰༶🎐

    谢谢大家的阅读,还有很多不足支出,欢迎大家在评论区指出,如果我的内容对你有帮助,可以点赞 , 收藏 ,大家的支持就是我坚持下去的动力!

    “请赐予我平静,去接受我无法改变的 ;赐予我勇气,去改变我能改变的。”

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐