huggingface NLP -Transformers库

在这里插入图片描述

1 特点

1.1 易于使用:下载、加载和使用最先进的NLP模型进行推理只需两行代码即可完成。
1.2 灵活:所有型号的核心都是简单的PyTorch nn.Module 或者 TensorFlow tf.kears.Model,可以像它们各自的机器学习(ML)框架中的任何其他模型一样进行处理。
1.3 简单:当前位置整个库几乎没有任何摘要。“都在一个文件中”是一个核心概念:模型的正向传递完全定义在一个文件中,因此代码本身是可以理解的,并且是可以破解的。

2 管道的内部

2.1 使用分词器进行预处理
2.1.1 Transformer模型无法直接处理原始文本, 因此我们管道的第一步是将文本输入转换为模型能够理解的数字
2.1.2 tokenizer(标记器),负责

  • 将输入拆分为单词、子单词或符号(如标点符号),称为标记(token)
  • 将每个标记(token)映射到一个整数
  • 添加可能对模型有用的其他输入
    使用
  • 通过from_pretrained 指定模型(checkpoint)
  • 指定要返回的张量类型(PyTorch、TensorFlow或plain NumPy),我们使用return_tensors参数
    输出-高维向量?
    • 矢量输出通常较大。它通常有三个维度
      • Batch size: 一次处理的序列数(在我们的示例中为2)。
      • Sequence length: 序列的数值表示的长度(在我们的示例中为16)。
      • Hidden size: 每个模型输入的向量维度。-高维向量
      • 最后一个值,它被称为“高维”。隐藏的大小可能非常大(768通常用于较小的型号,而在较大的型号中,这可能达到3072或更大
outputs = model(**inputs)
print(outputs.last_hidden_state.shape)

2.2 Model heads: Making sense out of numbers
2.2.1 模型头将隐藏状态的高维向量作为输入,并将其投影到不同的维度。它们通常由一个或几个线性层组成:
2.2.2
在这里插入图片描述

2.3 对输出进行后处理
2.4 语言建模 Pipeline 的顺序
2.4.1 标记器(Tokenizer) 处理文本并返回 id。模型处理这些 id 并输出一个预测。然后可以再次使用 标记器(Tokenizer) 将这些预测转换回某些文本

3 名词

3.1 checkpoint
3.1.1 name of our model
3.1.2 已经预训练好的模型,使用from_pretrained() 装载

4 模型

4.1 automodel
4.1.1 AutoModel类及其所有相关项实际上是对库中各种可用模型的简单包装。它是一个聪明的包装器,因为它可以自动猜测检查点的适当模型体系结构,然后用该体系结构实例化模型。
4.1.2 如果您知道要使用的模型类型,则可以使用直接定义其体系结构的类
4.1.3 AutoModel只需要知道初始化的Checkpoint(检查点)就可以返回正确的体系结构
4.2 随机值对其进行初始化
4.2.1 该模型可以在这种状态下使用,但会输出胡言乱语

from transformers import BertConfig, BertModel

config = BertConfig()
model = BertModel(config)
# Model is randomly initialized!

4.3 pretrained函数
4.3.1 本质是使用训练后的参数来运行模型

from transformers import BertModel

model = BertModel.from_pretrained("bert-base-cased")

4.3.3 下载cache目录
通过Hugging Face的Transformers库自动下载模型,会先缓存在默认路径:
Linux:‘~/.cache/huggingface/hub’
Windows :C:\Users\username.cache\huggingface\hub
https://blog.csdn.net/yyh2508298730/article/details/137773125
4.4 保存模型
4.4.1 model.save_pretrained(“directory_on_my_computer”)
4.4.2 会将两个文件保存到磁盘
config.json pytorch_model.bin
4.4.3 如果你使用的是Hugging Face的Transformers库,并且想要自定义模型的保存路径,你可以通过设置环境变量HF_HOME或HUGGINGFACE_HUB_CACHE来全局修改默认路径。这样,当你调用save_pretrained方法时,模型将会保存到你指定的新路径中
4.5 使用Transformers模型进行推理
4.5.1 ransformer模型只能处理数字——分词器生成的数字
4.5.2 输入
使用张量作为模型的输入

output = model(model_inputs)
model_inputs = torch.tensor(encoded_sequences)

4.6 Transformer模型的输出有多少个维度
4.6.1 3个维度,分别是: 序列长度(Sequence Length)、批次大小(Batch Size)和隐藏层大小(Hidden Size)
4.7 head层
4.7.1 一个附加组件,通常由一个或几个层组成,用于将Transformer的预测转换为特定于任务的输出
4.7.2 自注意力层确实包含注意力“Head”层
4.8 Tokenizer(标记器)和模型应该来自相同的Checkpoint(检查点)。

5 标记器(Tokenizer)

5.1 标记器(Tokenizer)是 NLP 管道的核心组件之一。它们有一个目的:将文本转换为模型可以处理的数据。模型只能处理数字,因此标记器(Tokenizer)需要将我们的文本输入转换为数字数据。
5.2 类型
5.2.1 基础
基于词的(Word-based)
第一种标记器是基于词的(word-based).它通常很容易设置和使用,只需几条规则,并且通常会产生不错的结果
每个单词都分配了一个 ID,从 0 开始一直到词汇表的大小。该模型使用这些 ID 来识别每个单词
需要一个自定义标记(token)来表示不在我们词汇表中的单词。这被称为“未知”标记(token),通常表示为“[UNK]”或”“
减少未知标记数量的一种方法是使用更深一层的标记器(tokenizer),即基于字符的(character-based)标记器(tokenizer)。
基于字符(Character-based)
基于字符的标记器(tokenizer)将文本拆分为字符,而不是单词。这有两个主要好处:
词汇量要小得多。
词汇外(未知)标记(token)要少得多,因为每个单词都可以从字符构建。
问题
从直觉上讲,它的意义不大:每个字符本身并没有多大意义,而单词就是这种情况
在中文中,每个字符比拉丁语言中的字符包含更多的信息。
我们的模型最终会处理大量的词符(token):虽然使用基于单词的标记器(tokenizer),单词只会是单个标记,但当转换为字符时,它很容易变成 10 个或更多的词符(token)
子词标记化(subword tokenization)
子词分词算法依赖于这样一个原则,即不应将常用词拆分为更小的子词,而应将稀有词分解为有意义的子词。
子词
“annoyingly”可能被认为是一个罕见的词,可以分解为“annoying”和“ly”。这两者都可能作为独立的子词出现得更频繁,同时“annoyingly”的含义由“annoying”和“ly”的复合含义保持
5.2.2 其它模型使用的tokenizer
Byte-level BPE, 用于 GPT-2
WordPiece, 用于 BERT
SentencePiece or Unigram, 用于多个多语言模型
5.3 加载和保存-和模型一致
5.3.1 load

from transformers import BertTokenizer

tokenizer = BertTokenizer.from_pretrained("bert-base-cased")

5.3.2 save

tokenizer.save_pretrained("directory_on_my_computer")

5.4 编码
5.4.1 文本翻译成数字被称为编码(encoding).编码分两步完成:标记化,然后转换为输入 ID
标记化过程由标记器(tokenizer)的tokenize() 方法实现:
5.4.2 第一步是将文本拆分为单词(或单词的一部分、标点符号等),通常称为标记(token)
输入 ID 的转换由标记器(tokenizer)的convert_tokens_to_ids()方法实现:
5.4.3 实际上不用分别调用
tokenizer(“Using a Transformer network is simple”)
5.5 解码
5.5.1 解码(Decoding) 正好相反:从词汇索引中,我们想要得到一个字符串。这可以通过 decode() 方法实现
decoded_string = tokenizer.decode([7993, 170, 11303, 1200, 2443, 1110, 3014])
print(decoded_string)
5.5.2 decode 方法不仅将索引转换回标记(token),还将属于相同单词的标记(token)组合在一起以生成可读的句子

6 处理多个序列

6.1 问题
6.1.1 我们如何处理多个序列?
6.1.2 我们如何处理多个序列不同长度?
6.1.3 词汇索引是让模型正常工作的唯一输入吗?
6.1.4 是否存在序列太长的问题?
6.2 数字列表转换为张量
6.2.1 方式1
tokenized_inputs = tokenizer(sequence, return_tensors=“pt”)
print(tokenized_inputs[“input_ids”])
6.2.2 方式2-隐式转换
input_ids = torch.tensor([ids])
6.3 Batching 是一次通过模型发送多个句子的行为
6.4 填充输入
6.4.1 将多个不等长度的序列(id)转为张量-tensor
6.4.2 Padding通过在值较少的句子中添加一个名为Padding token的特殊单词来确保我们所有的句子长度相同
6.5 Attention masks
6.5.1 Attention masks是与输入ID张量形状完全相同的张量,用0和1填充:1s表示应注意相应的标记,0s表示不应注意相应的标记(即,模型的注意力层应忽略它们)。
6.6 长序列
6.6.1 对于Transformers模型,我们可以通过模型的序列长度是有限的。大多数模型处理多达512或1024个令牌的序列,当要求处理更长的序列时,会崩溃。此问题有两种解决方案
使用支持的序列长度较长的模型。
截断序列。
6.6.2 指定max_sequence_length参数
sequence = sequence[:max_sequence_length]
6.7 不同长度的序列批处理
6.7.1 截断是一个正确的方式,可以将他们转化为一个固定长度的矩形序列
6.7.2 填充是一个正确的方式,可以将他们转化为一个固定长度的矩形序列
6.7.3 处理不同长度的序列时,注意力遮蔽是最重要的
7 放在一起
7.1 标记化、到输入ID的转换、填充、截断和注意掩码
7.2 指定pad模式

# Will pad the sequences up to the maximum sequence length

model_inputs = tokenizer(sequences, padding="longest")

# Will pad the sequences up to the model max length
# (512 for BERT or DistilBERT)
model_inputs = tokenizer(sequences, padding="max_length")
# Will pad the sequences up to the specified max length
model_inputs = tokenizer(sequences, padding="max_length", max_length=8)

7.3 截断序列
7.3.1 model_inputs = tokenizer(sequences, max_length=8, truncation=True)
7.4 特定框架张量的转换
7.4.1 # Returns PyTorch tensors
model_inputs = tokenizer(sequences, padding=True, return_tensors=“pt”)

Returns TensorFlow tensors

model_inputs = tokenizer(sequences, padding=True, return_tensors=“tf”)

Returns NumPy arrays

model_inputs = tokenizer(sequences, padding=True, return_tensors=“np”)
7.5 特殊词符(token)
7.5.1 由模型决定是否添加,如何添加
7.5.2 有些模型不添加特殊单词,或者添加不同的单词;模型也可能只在开头或结尾添加这些特殊单词
7.6 Tokenizer(标记器)和模型应该来自相同的Checkpoint(检查点)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/936865.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

解决 MyBatis 中空字符串与数字比较引发的条件判断错误

问题复现 假设你在 MyBatis 的 XML 配置中使用了如下代码&#xff1a; <if test"isCollect ! null"><choose><when test"isCollect 1">AND exists(select 1 from file_table imgfile2 where task.IMAGE_SEQimgfile2.IMAGE_SEQ and im…

项目15:简易扫雷--- 《跟着小王学Python·新手》

项目15&#xff1a;简易扫雷 — 《跟着小王学Python新手》 《跟着小王学Python》 是一套精心设计的Python学习教程&#xff0c;适合各个层次的学习者。本教程从基础语法入手&#xff0c;逐步深入到高级应用&#xff0c;以实例驱动的方式&#xff0c;帮助学习者逐步掌握Python的…

Centos7上Jenkins+Docker+Git+SpringBoot自动化部署

文章目录 1.宿主机安装maven2.安装jenkins3.配置Jenkins4.Jenkins脚本自动安装JDK&#xff08;可选&#xff09; 1.宿主机安装maven wget https://dlcdn.apache.org/maven/maven-3/3.9.9/binaries/apache-maven-3.9.9-bin.tar.gz mv apache-maven-3.9.9-bin.tar.gz /usr/local…

前端-自定义Ant Design 表格(可编辑表格)

选取的的是&#xff1a;表格 Table - Ant Design 其实ant design本身就有增加和删除单列数据的封装好的表格&#xff0c;但是个人觉得那个功能繁多&#xff0c;自己实现封装也便于之后理解和二次使用。 初步效果&#xff08;舍去切换样式的功能&#xff09;&#xff1a; 突破的…

如何打造个人知识体系?

第一&#xff0c;每个人的基本情况不同。比如我有一个类别跟「设计」相关&#xff0c;这是自己的个人爱好&#xff0c;但不一定适合其他人。再比如我还有一个类别跟「广告文案」相关&#xff0c;因为里面很多表达可以借用到演讲或写作中&#xff0c;这也不适合所有人。 第二&am…

Java版-图论-最短路-Floyd算法

实现描述 网络延迟时间示例 根据上面提示&#xff0c;可以计算出&#xff0c;最大有100个点&#xff0c;最大耗时为100*wi,即最大的耗时为10000&#xff0c;任何耗时计算出来超过这个值可以理解为不可达了&#xff1b;从而得出实现代码里面的&#xff1a; int maxTime 10005…

【EthIf-04】 EthIf_CtrlIdx控制器索引

1 EthernetInterface功能spec 上层的模块访问以太网接口模块「EthernetInterface」&#xff0c;以太网接口模块通过以太网驱动程序层与多个以太网控制器交互的。 1.1 以太网控制器资源的索引 通过以太网接口模块中的以太网控制器资源的索引允许用户轻松访问多个以太网控制器…

IDEA报错:无效的源发行版、无效的目标发行版

1. 无效的源发行版 创建项目的时候&#xff0c;会遇见这个报错&#xff0c;原因就是编译的JDK版本与发布版本不一致。 解决方法&#xff1a; 1.1. 找到问题所在地 英文&#xff1a;File -> Project Structure ->Project Settings 中文&#xff1a;文件->项目结构 …

7_Sass Introspection 函数 --[CSS预处理]

Sass 的 Introspection 函数允许开发者检查和操作样式表的内部结构&#xff0c;包括选择器、属性、值等。这些函数提供了对编译过程中 Sass 文件内容的深入访问能力&#xff0c;使得更复杂的逻辑处理成为可能。以下是一些常用的 Sass Introspection 函数及其用法示例&#xff1…

【实现多网卡电脑的网络连接共享】

电脑A配备有两张网卡&#xff0c;分别命名为eth0和eth1&#xff08;对于拥有超过两张网卡的情况&#xff0c;解决方案相似&#xff09;。其中&#xff0c;eth0网卡能够连接到Internet&#xff0c;而eth1网卡则通过网线直接与另一台电脑B相连&#xff08;在实际应用中&#xff0…

怎么禁用 vscode 中点击 go 包名时自动打开浏览器跳转到 pkg.go.dev

本文引用怎么禁用 vscode 中点击 go 包名时自动打开浏览器跳转到 pkg.go.dev 在 vscode 设置项中配置 gopls 的 ui.navigation.importShortcut 为 Definition 即可。 "gopls": {"ui.navigation.importShortcut": "Definition" }ui.navigation.i…

试题转excel;word转excel;大风车excel

一、问题描述 一名教师朋友&#xff0c;偶尔会需要整理一些高质量的题目到excel中 以往都是手动复制搬运&#xff0c;几百道题几乎需要一个下午的时间 关键这些事&#xff0c;枯燥无聊费眼睛&#xff0c;实在是看起来就很蠢的工作 就想着做一个工具&#xff0c;可以自动处理…

如何对小型固定翼无人机进行最优的路径跟随控制?

控制架构 文章继续采用的是 ULTRA-Extra无人机&#xff0c;相关参数如下&#xff1a; 这里用于guidance law的无人机运动学模型为&#xff1a; { x ˙ p V a cos ⁡ γ cos ⁡ χ V w cos ⁡ γ w cos ⁡ χ w y ˙ p V a cos ⁡ γ sin ⁡ χ V w cos ⁡ γ w sin ⁡ χ…

java抽奖系统登录下(四)

6.4 关于登录 最简单的登录&#xff1a; 1、web登录页填写登录信息&#xff0c;前端发送登录信息到后端&#xff1b; 2、后端接受登录信息&#xff0c;并校验。校验成功&#xff0c;返回成功结果。 这种登录会出现一个问题&#xff0c;用户1成功登录之后&#xff0c;获取到后台…

面经zijie

以下是对 C# GC 和 Lua GC 的详细分析&#xff0c;包括它们的原理、特性、优化方式及对比。 C# GC&#xff1a;详细分析 C# 的垃圾回收器 (Garbage Collector, GC) 是一个自动内存管理系统&#xff0c;它在程序运行时负责管理对象的分配和释放&#xff0c;防止内存泄漏。 1. …

利用代理IP爬取Zillow房产数据用于数据分析

引言 最近数据分析的热度在编程社区不断攀升&#xff0c;有很多小伙伴都开始学习或从事数据采集相关的工作。然而&#xff0c;网站数据已经成为网站的核心资产&#xff0c;许多网站都会设置一系列很复杂的防范措施&#xff0c;阻止外部人员随意采集其数据。为了解决这个问题&a…

海康萤石摄像机接入EasyNVR流程:开启RTSP-》萤石视频添加到EasyNVR-》未来支持海康SDK协议添加到EasyNVR

EasyNVR目前支持GB28181、RTSP、ONVIF、RTMP&#xff08;推流&#xff09;这几种协议接入&#xff0c;目前正在增加海康HIKSDK、大华DHSDK等几种SDK的接入&#xff0c;我们今天就介绍一下萤石摄像机怎么通过RTSP接入到EasyNVR。 第一步&#xff1a;萤石摄像机开启 萤石设备默…

Pytest-Bdd-Playwright 系列教程(14):Docstring 参数

Pytest-Bdd-Playwright 系列教程&#xff08;14&#xff09;&#xff1a;Docstring 参数 前言一、什么是docstring?二、基本语法三、主要特点四、实际例子五、注意事项六、使用建议总结 前言 在自动化测试的过程中&#xff0c;我们经常需要处理复杂的测试数据或需要输入多行文…

Quad Remesher使用教程

为什么要拓扑&#xff1f; 我们知道&#xff0c;模型在三维软件中的表现&#xff0c;是由一系列的面通过不同角度组合而成的。3D模型制作层面上的拓扑&#xff0c;按我的理解来说&#xff0c;就是一个模型的面的结构分布——布线。想表现和制作一个三维模型&#xff0c;有无限…

智慧政务数据中台建设及运营解决方案

数据中台&#xff1a;政府数字化转型的引擎 数据中台作为政府数字化转型的核心驱动力&#xff0c;起源于美军的作战体系&#xff0c;强调高效、灵活与强大。它不仅促进了政府决策的科学性&#xff0c;还推动了政府服务的精细化与智能化。 数据中台的应用场景&#xff1a;数字…