【LLM Course】Ch 1 - Transformer 模型

使用 Pipelines

简介

Transformers 库中最基本的对象是 pipeline() 函数
它将模型与所需的预处理和后续处理步骤连接起来, 使我们能够通过直接输入任何文本并获得最终的结果

步骤

  1. 文本被预处理成模型可理解的格式
  2. 将预处理后的文本传给模型
  3. 对模型预测进行处理并输出

可用的 pipeline

  • eature-extraction (获取文本的向量表示)
  • fill-mask (完形填空)
  • ner (命名实体识别)
  • question-answering (问答)
  • sentiment-analysis (情感分析)
  • summarization (提取摘要)
  • text-generation (文本生成)
  • translation (翻译)
  • zero-shot-classification (零样本分类)

实战 : 零样本分类

什么是零样本分类

Zero - shot
不需要对数据上的模型进行微调即可使用它

代码部分

  • 代码 :
1
2
3
4
5
6
7
from transformers import pipeline

classifier = pipeline("zero-shot-classification")
classifier(
    "This is a course about the Transformers library",
    candidate_labels=["education", "politics", "business"],
)
  1. 导入库
  2. 创建实例, 指定 pipeline 种类
  3. 调用实例, 输入文本, 候选标签

输出 :

1
2
3
{'sequence': 'This is a course about the Transformers library',
 'labels': ['education', 'business', 'politics'],
 'scores': [0.8445963859558105, 0.111976258456707, 0.043427448719739914]}

调用其他模型

1
2
3
4
5
6
7
8
from transformers import pipeline

generator = pipeline("text-generation", model="distilgpt2")
generator(
    "In this course, we will teach you how to",
    max_length=30,
    num_return_sequences=2,
)

这里是一个文本生成/补全的 pipeline
和不指定模型相比, 唯一的区别就是在 pipeline 实例化中需要指定一下 model
这个 model 需要是 Huggingface 的 Hub 中的模型

Transformer 如何工作

发展历史

Transformer 架构 于 2017 年 6 月提出。原本研究的重点是翻译任务。随后推出了几个有影响力的模型

  • 2018 年 6 月: GPT ,第一个预训练的 Transformer 模型,用于各种 NLP 任务并获得极好的结果
  • 2018 年 10 月: BERT ,另一个大型预训练模型,该模型旨在生成更好的句子摘要(下一章将详细介绍!)
  • 2019 年 2 月: GPT-2 ,GPT 的改进(并且更大)版本,由于道德问题没有立即公开发布
  • 2019 年 10 月: DistilBERT ,BERT 的提炼版本,速度提高 60%,内存减轻 40%,但仍保留 BERT 97% 的性能
  • 2019 年 10 月: BART 和 T5 ,两个使用与原始 Transformer 模型原始架构的大型预训练模型(第一个这样做)
  • 2020 年 5 月, GPT-3 ,GPT-2 的更大版本,无需微调即可在各种任务上表现良好(称为零样本学习)

Transformer 是语言模型

  • 以上的模型以无监督学习的方式接受大量原始文本的训练
  • 模型可以对训练过的内容有着统计学的理解, 但是对于特定实际任务效果一般, 因此需要迁移学习
  • 迁移学习中, 一般会使用监督微调的方式

Transformer 是大模型

  • 训练大模型需要大量的数据和计算资源
  • 为了避免从头训练导致的浪费, 我们采取共享语言模型的方式:
    • 共享训练的权重
    • 对于新需求, 在原有的权重上进行微调

迁移学习

预训练

  • 从头开始训练模型
  • 在大量的数据上进行, 训练时间长

微调

  • 在于训练后进行
  • 使用特定任务的数据集, 对预训练后的模型进行额外训练
  • 需要的时间, 数据较少
  • 比从头开始训练效果更好
为何不直接在特定任务数据集上做预训练?
  • 微调可以利用模型在预训练时获取的广泛知识
  • 预训练已经有大量的数据基础, 使得微调只需少量特定数据即可

Transformer 的通用架构

(并没有讲的很深, 我也没记太多, 详细内容可以看我的 Transformer 原始论文的论文笔记)

简介

主要由 Encoder - Decoder 组成:

  • Encoder (左侧):编码器接收输入并构建其表示(特征)。这意味着模型的使命是从输入中获取理解。
  • Decoder (右侧):解码器使用编码器的表示(特征)以及其他输入来生成目标序列。这意味着模型的使命是生成输出。Architecture of a Transformers models
    其中, 二者都可以独立使用, 具体用法取决于任务:
  • Encoder-only 模型:适用于需要理解输入的任务,如句子分类和命名实体识别
  • Decoder-only 模型:适用于生成任务,如文本生成
  • Encoder-decoder 模型 或者 sequence-to-sequence 模型:适用于需要根据输入进行生成的任务,如翻译或摘要

注意力层

  • 表示模型在处理单词时, 对于每个单词的重视程度

原始结构

Architecture of a Transformers models

  • 最初为了翻译而设计

一些术语

本课程会用到一些相关的术语:

  • architecture(架构):这是模型的骨架 —— 每个层的定义以及模型中发生的每个操作
  • Checkpoints(权重参数又称检查点):这些是将在给架构中结构中加载的权重参数,是一些具体的数值
  • Model(模型):这是一个笼统的术语,没有“架构”或“参数”那么精确:它可以指两者。为了避免歧义,本课程使用将使用架构和参数
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计