1.Transformer models

首先介绍了 - what is NLP

  • Classifying whole sentences: Getting the sentiment of a review, detecting if an email is spam, determining if a sentence is grammatically correct or whether two sentences are logically related or not

  • Classifying each word in a sentence: Identifying the grammatical components of a sentence (noun, verb, adjective), or the named entities (person, location, organization)

  • Generating text content: Completing a prompt with auto-generated text, filling in the blanks in a text with masked words

  • Extracting an answer from a text: Given a question and a context, extracting the answer to the question based on the information provided in the context

  • Generating a new sentence from an input text: Translating a text into another language, summarizing a text
    NLP isn’t limited to written text though. It also tackles complex challenges in speech recognition and computer vision, such as generating a transcript of an audio sample or a description of an image.

然后介绍了transformer模型的架构和它的衍生模型

encoder model

编码器模型仅使用 Transformer 模型的编码器。在每个阶段,注意力层都可以访问初始句子中的所有单词。这些模型通常具有“双向”注意力的特征,通常称为自动编码模型。

这些模型的预训练通常围绕着以某种方式破坏给定的句子(例如,通过屏蔽其中的随机单词)并让模型找到或重建初始句子。

编码器模型最适合需要理解完整句子的任务,例如句子分类、命名实体识别(以及更一般的单词分类)和提取式问答。

一些主要的encoder模型:

  • ALBERT
  • BERT
  • DistilBERT
  • ELECTRA
  • RoBERTa

decoder model

解码器模型仅使用 Transformer 模型的解码器。在每个阶段,对于给定的单词,注意力层只能访问句子中位于它之前的单词。这些模型通常称为自回归模型。

解码器模型的预训练通常围绕预测句子中的下一个单词。

这些模型最适合涉及文本生成的任务。

一些主要的decoder模型:

  • CTRL
  • GPT
  • GPT-2
  • Transformer XL

seq2seq model

编码器-解码器模型(也称为序列到序列模型)使用 Transformer 架构的两个部分。在每个阶段,编码器的注意力层可以访问初始句子中的所有单词,而解码器的注意力层只能访问输入中位于给定单词之前的单词。

这些模型的预训练可以使用编码器或解码器模型的目标来完成,但通常涉及更复杂的事情。例如,T5是通过用单个掩码特殊词替换随机文本跨度(可以包含多个词)来预训练的,然后目标是预测这个掩码词替换的文本。

序列到序列模型最适合围绕根据给定输入生成新句子的任务,例如摘要、翻译或生成式问答。

一些主要的seq2seq模型:

  • BART
  • mBART
  • Marian
  • T5

总结:

2.Using Transformers

首先介绍了transformer库的一些特点:

  • 易于使用:只需两行代码即可下载、加载和使用最先进的 NLP 模型进行推理。

  • 灵活性:从本质上讲,所有模型都是简单的 PyTorchnn.ModuleTensorFlowtf.keras.Model类,并且可以像其各自机器学习 (ML) 框架中的任何其他模型一样进行处理。

  • 简单性:在整个库中几乎没有任何抽象。“一体化文件”是一个核心概念:模型的前向传递完全定义在单个文件中,因此代码本身是可理解和可破解的。

然后以一些完整的例子来介绍:

from transformers import pipelineclassifier = pipeline("sentiment-analysis")
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}]

Preprocessing with a tokenizer

正如我们在第 1 章中看到的,这个pipeline将三个步骤组合在一起:预处理、通过模型传递输入和后处理:


与其他神经网络一样,Transformer 模型不能直接处理原始文本,因此我们pipeline的第一步是将文本输入转换为模型可以理解的数字。为此,我们使用了一个tokenizer,它将负责:

  • 将输入拆分为称为标记的单词、子词或符号(如标点符号)
  • 将每个标记映射到一个整数
  • 添加可能对模型有用的其他输入

所有这些预处理都需要以与模型预训练时完全相同的方式完成,因此我们首先需要从Model Hub下载该信息。为此,我们使用AutoTokenizer类及其from_pretrained()方法。

from transformers import AutoTokenizercheckpoint = "distilbert-base-uncased-finetuned-sst-2-english"
tokenizer = AutoTokenizer.from_pretrained(checkpoint)

一旦我们有了tokenizer,我们就可以直接将我们的句子传递给它,我们将得到一个准备好提供给我们模型的字典!唯一要做的就是将输入 ID 列表转换为张量。

raw_inputs = ["I've been waiting for a HuggingFace course my whole life.","I hate this so much!",
]
inputs = tokenizer(raw_inputs, padding=True, truncation=True, return_tensors="pt") #pt代表pytorch
print(inputs)

输出:

{'input_ids': tensor([[  101,  1045,  1005,  2310,  2042,  3403,  2005,  1037, 17662, 12172, 2607,  2026,  2878,  2166,  1012,   102],[  101,  1045,  5223,  2023,  2061,  2172,   999,   102,     0,     0,     0,     0,     0,     0,     0,     0]]), 'attention_mask': tensor([[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],[1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]])
}

然后载入模型:

from transformers import AutoModelcheckpoint = "distilbert-base-uncased-finetuned-sst-2-english"
model = AutoModel.from_pretrained(checkpoint)

The vector output by the Transformer module is usually large. It generally has three dimensions:

  • Batch size: The number of sequences processed at a time (2 in our example).
  • Sequence length: The length of the numerical representation of the sequence (16 in our example).
  • Hidden size: The vector dimension of each model input.
outputs = model(**inputs)
print(outputs.last_hidden_state.shape)

输出

torch.Size([2, 16, 768])

Model heads: 从数字中寻找意义

The model heads将隐藏状态的高维向量作为输入,并将它们投影到不同的维度上。它们通常由一个或几个线性层组成:

Transformer 模型的输出直接送到模型头进行处理。

在此图中,模型由其嵌入层和后续层表示。嵌入层将标记化输入中的每个输入 ID 转换为表示相关标记的向量。随后的层使用注意力机制操纵这些向量以产生句子的最终表示。

对于我们的示例,我们需要一个带有序列分类头的模型(能够将句子分类为正面或负面)。所以,我们实际上不会使用这个AutoModel类,而是AutoModelForSequenceClassification:

from transformers import AutoModelForSequenceClassificationcheckpoint = "distilbert-base-uncased-finetuned-sst-2-english"
model = AutoModelForSequenceClassification.from_pretrained(checkpoint)
outputs = model(**inputs)
print(outputs.logits.shape)

输出维度

torch.Size([2, 2])

Postprocessing the output 将输出处理为我们需要的类型

我们从模型中获得的作为输出的值本身并不一定有意义。让我们来看看:

print(outputs.logits)

输出:

tensor([[-1.5607,  1.6123],[ 4.1692, -3.3464]], grad_fn=<AddmmBackward>)

我们的模型预测[-1.5607, 1.6123]了第一句话和[ 4.1692, -3.3464]第二句话。这些不是概率,而是一些实数,即模型最后一层输出的原始非标准化分数。要转换为概率,它们需要经过一个SoftMax层(所有

Hugging Face Course-Introduction学习小记 (part1)相关推荐

  1. 8086汇编学习小记-王爽汇编语言实验12

    8086汇编学习小记-王爽汇编语言实验12 0号中断处理程序,开始安装在0000:0200处的程序最后用死循环导致显示不出'divided error',改成直接退出就正常显示了.注意修改ss,sp之 ...

  2. js 正则学习小记之匹配字符串

    原文:js 正则学习小记之匹配字符串 今天看了第5章几个例子,有点收获,记录下来当作回顾也当作分享. 关于匹配字符串问题,有很多种类型,今天讨论 js 代码里的字符串匹配.(因为我想学完之后写个语法高 ...

  3. 多项式快速插值学习小记

    今天终于抽空把这个综(du)合(liu)知识点学了,心力交瘁-- 多项式快速插值 给出 nnn 个点 (xi,yi)(x_i,y_i)(xi​,yi​) ,要求一个次数为 n−1n-1n−1 的多项式 ...

  4. 多项式的ln、exp、快速幂和开根学习小记

    不妨又学习了一下多项式的求ln.exp.快速幂和开根操作. 这些操作比之前的求逆更上了一层台阶,应用同样很广. 多项式求逆等知识在我的博客里有讲:多项式的求逆.取模和多点求值学习小记 多项式ln 给出 ...

  5. 积性函数与Dirichlet卷积 学习小记

    前言 首先感谢 XHM 大佬的悉心指导,我懂得了不少~. 链一下他关于这方面的见解.博客--XHM 的Dirichlet卷积 学习小记 一些定义 回归正题,这次我学习了一下狄利克雷卷积方面的知识. 先 ...

  6. js 正则学习小记之左最长规则

    js 正则学习小记之左最长规则 原文:js 正则学习小记之左最长规则 昨天我在判断正则引擎用到的方法是用 /nfa|nfa not/ 去匹配 "nfa not",得到的结果是 'n ...

  7. python 温度 符号_【火马】Python学习小记01

    Python 学习小记 Life is short,you need Python! 写在前面 自从重新拾起2016年开始注册的公众号"火马编程",我就把TA当作了自己的一块&qu ...

  8. Python学习 Week2 part1

    本周内容较多,一时间消化不了,分两段写出来 part1:列表和元组 part2:字符串和字典等 列表 #列表的定义 #list=['list0','list1','list2'','...'] nam ...

  9. 8086汇编学习小记-1

    8086汇编学习小记-1 View Code assume cs : codesg, ds : datasg, ss : stacksgdatasg SEGMENT... datasg ENDSsta ...

  10. 游戏黑客圣经GHB1学习笔记 part1(1-5)

    游戏黑客圣经(Game Hacking Bible1) 我在这里记录我所有课程的学习笔记,包括一些小技巧以及源码,俗话说好记性不如烂笔头,写在这里,用于温故而知新. 前言 学习游戏黑客的必备条件 智力 ...

最新文章

  1. 摄影测量--测边交会
  2. python取两个set的并集、交集、差集
  3. jep 使用方法与简介
  4. Oracle 日志解析ogg,对一段OracleGoldenGate(OGG)传输进程日志(.rpt文件)的解释
  5. 如何判断工作簿中是否存在某个工作表
  6. 免费高清可商用图片素材站推荐
  7. 【unity记录】导入标准资源包(Standard Assets)
  8. 廊坊金彩教育:如何提高店铺评分
  9. 【MATLAB第3期】源码分享#数学建模常用算法程序整理
  10. MinGW编译log4cpp
  11. python将excel导入mysql_【Python】将excel文件导入mysql数据库
  12. 计算机如何显示e盘文档,我把电脑E盘里文件隐藏了,怎么弄可以显示出来!
  13. 基于Python的ERP系统中主生产计划(MPS)的计算
  14. js 在一个日期上面加上指定时间(几小时、几分钟、几秒)
  15. 【elasticsearch】elasticsearch教程 es整合springboot教程 kibana安装教程 解决kibana访问404
  16. Java 北大青鸟 第一学期 第六章 循环结构(二) 上级练习+课后作业
  17. Diffusion Models - 扩散模型(一)
  18. 第十一周周末总结+反思
  19. 生活中要怎么预防马尾神经损伤
  20. 戴尔服务器R730内部架构介绍

热门文章

  1. apache高性能配置
  2. JSP 中 forward 转发 和 sendRedirect 重定向的区别
  3. mysql 字段 英文 变 中文_Oracle将英文字符集数据转换成中文
  4. KMP算法 next数组 nextval数组
  5. 当前只读状态:是_DM数据库的启停以及数据库状态检查
  6. 微型计算机普遍采用的数字编码是,计算机原理复习题1
  7. 【ZOJ4110】Strings in the Pocket (马拉车算法+分析)
  8. java calendar数组_Java Calendar Date使用总结
  9. 计算机课程新讨论话题,信息技术组内主题讨论-.DOC
  10. 算法:唯一路径Unique Paths 动态规划和二项系数解法