Hugging Face Course-Introduction学习小记 (part1)
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.Module或 TensorFlowtf.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)相关推荐
- 8086汇编学习小记-王爽汇编语言实验12
8086汇编学习小记-王爽汇编语言实验12 0号中断处理程序,开始安装在0000:0200处的程序最后用死循环导致显示不出'divided error',改成直接退出就正常显示了.注意修改ss,sp之 ...
- js 正则学习小记之匹配字符串
原文:js 正则学习小记之匹配字符串 今天看了第5章几个例子,有点收获,记录下来当作回顾也当作分享. 关于匹配字符串问题,有很多种类型,今天讨论 js 代码里的字符串匹配.(因为我想学完之后写个语法高 ...
- 多项式快速插值学习小记
今天终于抽空把这个综(du)合(liu)知识点学了,心力交瘁-- 多项式快速插值 给出 nnn 个点 (xi,yi)(x_i,y_i)(xi,yi) ,要求一个次数为 n−1n-1n−1 的多项式 ...
- 多项式的ln、exp、快速幂和开根学习小记
不妨又学习了一下多项式的求ln.exp.快速幂和开根操作. 这些操作比之前的求逆更上了一层台阶,应用同样很广. 多项式求逆等知识在我的博客里有讲:多项式的求逆.取模和多点求值学习小记 多项式ln 给出 ...
- 积性函数与Dirichlet卷积 学习小记
前言 首先感谢 XHM 大佬的悉心指导,我懂得了不少~. 链一下他关于这方面的见解.博客--XHM 的Dirichlet卷积 学习小记 一些定义 回归正题,这次我学习了一下狄利克雷卷积方面的知识. 先 ...
- js 正则学习小记之左最长规则
js 正则学习小记之左最长规则 原文:js 正则学习小记之左最长规则 昨天我在判断正则引擎用到的方法是用 /nfa|nfa not/ 去匹配 "nfa not",得到的结果是 'n ...
- python 温度 符号_【火马】Python学习小记01
Python 学习小记 Life is short,you need Python! 写在前面 自从重新拾起2016年开始注册的公众号"火马编程",我就把TA当作了自己的一块&qu ...
- Python学习 Week2 part1
本周内容较多,一时间消化不了,分两段写出来 part1:列表和元组 part2:字符串和字典等 列表 #列表的定义 #list=['list0','list1','list2'','...'] nam ...
- 8086汇编学习小记-1
8086汇编学习小记-1 View Code assume cs : codesg, ds : datasg, ss : stacksgdatasg SEGMENT... datasg ENDSsta ...
- 游戏黑客圣经GHB1学习笔记 part1(1-5)
游戏黑客圣经(Game Hacking Bible1) 我在这里记录我所有课程的学习笔记,包括一些小技巧以及源码,俗话说好记性不如烂笔头,写在这里,用于温故而知新. 前言 学习游戏黑客的必备条件 智力 ...
最新文章
- 摄影测量--测边交会
- python取两个set的并集、交集、差集
- jep 使用方法与简介
- Oracle 日志解析ogg,对一段OracleGoldenGate(OGG)传输进程日志(.rpt文件)的解释
- 如何判断工作簿中是否存在某个工作表
- 免费高清可商用图片素材站推荐
- 【unity记录】导入标准资源包(Standard Assets)
- 廊坊金彩教育:如何提高店铺评分
- 【MATLAB第3期】源码分享#数学建模常用算法程序整理
- MinGW编译log4cpp
- python将excel导入mysql_【Python】将excel文件导入mysql数据库
- 计算机如何显示e盘文档,我把电脑E盘里文件隐藏了,怎么弄可以显示出来!
- 基于Python的ERP系统中主生产计划(MPS)的计算
- js 在一个日期上面加上指定时间(几小时、几分钟、几秒)
- 【elasticsearch】elasticsearch教程 es整合springboot教程 kibana安装教程 解决kibana访问404
- Java 北大青鸟 第一学期 第六章 循环结构(二) 上级练习+课后作业
- Diffusion Models - 扩散模型(一)
- 第十一周周末总结+反思
- 生活中要怎么预防马尾神经损伤
- 戴尔服务器R730内部架构介绍
热门文章
- apache高性能配置
- JSP 中 forward 转发 和 sendRedirect 重定向的区别
- mysql 字段 英文 变 中文_Oracle将英文字符集数据转换成中文
- KMP算法 next数组 nextval数组
- 当前只读状态:是_DM数据库的启停以及数据库状态检查
- 微型计算机普遍采用的数字编码是,计算机原理复习题1
- 【ZOJ4110】Strings in the Pocket (马拉车算法+分析)
- java calendar数组_Java Calendar Date使用总结
- 计算机课程新讨论话题,信息技术组内主题讨论-.DOC
- 算法:唯一路径Unique Paths 动态规划和二项系数解法