转载自:https://huggingface.co/learn/nlp-course/zh-CN/

原中文文档有很多地方翻译的太敷衍了,因此才有此系列文章。

NLP课程(一)- 介绍

常见NLP任务

常见 NLP 任务的列表,每个任务都有一些示例:

  • 对整个句子进行分类: 获取评论的情绪,检测电子邮件是否为垃圾邮件,确定句子在语法上是否正确或两个句子在逻辑上是否相关
  • 对句子中的每个词进行分类: 识别句子的语法成分(名词、动词、形容词)或命名实体(人、地点、组织)
  • 生成文本内容: 用自动生成的文本完成提示,用屏蔽词填充文本中的空白
  • 从文本中提取答案: 给定问题和上下文,根据上下文中提供的信息提取问题的答案
  • 从输入文本生成新句子: 将文本翻译成另一种语言,总结文本

pipline()函数

推理pipeline (huggingface.co)

Transformers能做什么? - Hugging Face NLP Course

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

简单示例(情感分析):

1
2
3
4
5
from transformers import pipeline

classifier = pipeline("sentiment-analysis")
classifier("I've been waiting for a HuggingFace course my whole life.")
[{'label': 'POSITIVE', 'score': 0.9598047137260437}]

我们也可以多传几句!

1
2
3
4
5
classifier(
["I've been waiting for a HuggingFace course my whole life.", "I hate this so much!"]
)
[{'label': 'POSITIVE', 'score': 0.9598047137260437},
{'label': 'NEGATIVE', 'score': 0.9994558095932007}]

在pipline函数中可以指定要完成的任务类型与要选择的模型,然后输入可以被模型所理解的文本格式

https://huggingface.co/models中左侧选定对应任务的标签,即可选择对应任务的模型,同时会给出模型的使用示例与对应参数。

1
2
3
4
5
6
7
8
9
10
11
12
13
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,
)
[{'generated_text': 'In this course, we will teach you how to manipulate the world and '
'move your mental and physical capabilities to your advantage.'},
{'generated_text': 'In this course, we will teach you how to become an expert and '
'practice realtime, and with a hands on experience on both real '
'time and real'}]

默认情况下,pipeline选择一个特定的预训练模型,该模型已针对相应任务进行了微调。创建实例化对象时,将下载并缓存模型。如果重新运行该命令,则将使用缓存的模型,无需再次下载模型。

将一些文本传递到pipeline时涉及三个主要步骤:

  1. 文本被预处理为模型可以理解的格式。
  2. 预处理的输入被传递给模型。
  3. 模型处理后输出最终人类可以理解的结果。

目前可用的一些pipeline是:

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

Transformer 工作原理

见论文Transformer部分

  • Encoder-only models: 适用于需要理解输入的任务,如句子分类和命名实体识别。
  • Decoder-only models: 适用于生成任务,如文本生成。
  • Encoder-decoder models 或者 sequence-to-sequence models: 适用于需要根据输入进行生成的任务,如翻译或摘要。

Transformer架构最初是为翻译而设计的。在训练期间,编码器接收特定语言的输入(句子),而解码器需要输出对应语言的翻译。在编码器中,注意力层可以使用一个句子中的所有单词(正如我们刚才看到的,给定单词的翻译可以取决于它在句子中的其他单词)。然而,解码器是按顺序工作的,并且只能注意它已经翻译过的句子中的单词。例如,当我们预测了翻译目标的前三个单词时,我们将它们提供给解码器,然后解码器使用编码器的所有输入来尝试预测第四个单词。

为了在训练过程中加快速度(当模型可以访问目标句子时),解码器会被输入整个目标,但不允许获取到要翻译的单词(如果它在尝试预测位置2的单词时可以访问位置2的单词,解码器就会偷懒,直接输出那个单词,从而无法学习到正确的语言关系!)。例如,当试图预测第4个单词时,注意力层只能获取位置1到3的单词。

编码器模型

解码器模型

序列到序列模型