NLP课程(一)- 介绍
转载自:https://huggingface.co/learn/nlp-course/zh-CN/
原中文文档有很多地方翻译的太敷衍了,因此才有此系列文章。
NLP课程(一)- 介绍
常见NLP任务
常见 NLP 任务的列表,每个任务都有一些示例:
- 对整个句子进行分类: 获取评论的情绪,检测电子邮件是否为垃圾邮件,确定句子在语法上是否正确或两个句子在逻辑上是否相关
- 对句子中的每个词进行分类: 识别句子的语法成分(名词、动词、形容词)或命名实体(人、地点、组织)
- 生成文本内容: 用自动生成的文本完成提示,用屏蔽词填充文本中的空白
- 从文本中提取答案: 给定问题和上下文,根据上下文中提供的信息提取问题的答案
- 从输入文本生成新句子: 将文本翻译成另一种语言,总结文本
pipline()函数
Transformers能做什么? - Hugging Face NLP Course
Transformers 库中最基本的对象是 pipeline() 函数。它将模型与其必要的预处理和后处理步骤连接起来,使我们能够通过直接输入任何文本并获得最终的答案。
简单示例(情感分析):
1 | from transformers import pipeline |
我们也可以多传几句!
1 | classifier( |
在pipline函数中可以指定要完成的任务类型与要选择的模型,然后输入可以被模型所理解的文本格式
在https://huggingface.co/models中左侧选定对应任务的标签,即可选择对应任务的模型,同时会给出模型的使用示例与对应参数。
1 | from transformers import pipeline |
默认情况下,pipeline选择一个特定的预训练模型,该模型已针对相应任务进行了微调。创建实例化对象时,将下载并缓存模型。如果重新运行该命令,则将使用缓存的模型,无需再次下载模型。
将一些文本传递到pipeline时涉及三个主要步骤:
- 文本被预处理为模型可以理解的格式。
- 预处理的输入被传递给模型。
- 模型处理后输出最终人类可以理解的结果。
目前可用的一些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的单词。