使用 Pipelines
简介
Transformers 库中最基本的对象是 pipeline()
函数
它将模型与所需的预处理和后续处理步骤连接起来, 使我们能够通过直接输入任何文本并获得最终的结果
步骤
- 文本被预处理成模型可理解的格式
- 将预处理后的文本传给模型
- 对模型预测进行处理并输出
可用的 pipeline
eature-extraction
(获取文本的向量表示)fill-mask
(完形填空)ner
(命名实体识别)question-answering
(问答)sentiment-analysis
(情感分析)summarization
(提取摘要)text-generation
(文本生成)translation
(翻译)zero-shot-classification
(零样本分类)
实战 : 零样本分类
什么是零样本分类
Zero - shot
不需要对数据上的模型进行微调即可使用它
代码部分
- 代码 :
|
|
- 导入库
- 创建实例, 指定 pipeline 种类
- 调用实例, 输入文本, 候选标签
输出 :
|
|
调用其他模型
|
|
这里是一个文本生成/补全的 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 (右侧):解码器使用编码器的表示(特征)以及其他输入来生成目标序列。这意味着模型的使命是生成输出。
其中, 二者都可以独立使用, 具体用法取决于任务: - Encoder-only 模型:适用于需要理解输入的任务,如句子分类和命名实体识别
- Decoder-only 模型:适用于生成任务,如文本生成
- Encoder-decoder 模型 或者 sequence-to-sequence 模型:适用于需要根据输入进行生成的任务,如翻译或摘要
注意力层
- 表示模型在处理单词时, 对于每个单词的重视程度
原始结构
- 最初为了翻译而设计
一些术语
本课程会用到一些相关的术语:
- architecture(架构):这是模型的骨架 —— 每个层的定义以及模型中发生的每个操作
- Checkpoints(权重参数又称检查点):这些是将在给架构中结构中加载的权重参数,是一些具体的数值
- Model(模型):这是一个笼统的术语,没有“架构”或“参数”那么精确:它可以指两者。为了避免歧义,本课程使用将使用架构和参数