huggingface NLP -Transformers库

news2024/12/15 9:13:37

在这里插入图片描述

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(检查点)。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1. 机器学习基本知识(2)——机器学习分类

1.4 机器学习分类 1.4.1 训练监督 1. 监督学习:已对训练数据完成标记 分类:根据数据及其分类信息来进行训练,使模型能够对新的数据进行分类 回归:给出一组特征值来预测目标数值 2. 无监督学习:没有对训练数据进行任…

[C#]使用winform部署ddddocr的onnx模型进行验证码识别文字识别文字检测

【算法介绍】 ddddocr是一个强大的Python OCR(光学字符识别)库,特别适用于验证码识别。它利用深度学习技术,如卷积神经网络(CNN)和循环神经网络(RNN),对图像中的文字进行…

day10 电商系统后台API——接口测试(使用postman)

【没有所谓的运气🍬,只有绝对的努力✊】 目录 实战项目简介: 1、用户管理(8个) 1.1 登录 1.2 获取用户数据列表 1.3 创建用户 1.4 修改用户状态 1.5 根据id查询用户 1.6 修改用户信息 1.7 删除单个用户 1.8 …

云服务器搭建lamp的wordpress

Ubuntu系统搭建过程目录 一、检查环境1.1 检查是否安装Apache1.2 检查是否安装Mysql1.3 检查是否安装PHP 二、安装Apache截图 三、安装Mysql3.1 安全安装配置3.2 修改权限和密码3.3 重启MySQL服务 四、安装PHP4.1 测试截图 五、下载并安装wordpress以及配置5.1 下载并解压移动5…

C#速成(GID+图形编程)

常用类 类说明Brush填充图形形状,画刷GraphicsGDI绘图画面,无法继承Pen定义绘制的对象直线等(颜色,粗细)Font定义文本格式(字体,字号) 常用结构 结构说明Color颜色Point在平面中定义点Rectan…

babeltrace与CTF相关学习笔记-4

babeltrace与CTF相关学习笔记-4 写在前面metadata_string 重头开始定位,操作meta的位置bt_ctf_trace_get_metadata_string stream部分内存的问题 写在前面 正在并行做几件事。 在编译过程中,突然想到,还是再详细研究一下之前的例程。 一是详…

多旋翼无人机 :桨叶设计—跷跷板结构

多旋翼无人机 :桨叶设计——跷跷板结构 前言跷跷板结构 前言 2024年11月,大疆发布了最新的农业无人机T70和T100。其中T70不同于以往的机型,在桨夹处采用了翘翘板结构,大疆将其命名为“挥舞桨叶”。 T70 无人机如下 放大其中螺旋…

低通滤波器,高通滤波器,公式

1 低通滤波器 :输出的是电容的电压 1 低通滤波器可以把低频信号上面的高频信号给滤掉 2 100hz正常通过 3 经过低通滤波器后,波形光滑,绿色波形。一致 4 电容充电速度跟不上输入信号的速度(因为加了电阻,限制了电流&…

如何打造个人知识体系?

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

5G中的ATG Band

Air to Ground Networks for NR是R18 NR引入的。ATG很多部分和NTN类似中的内容类似。比较明显不同的是,NTN的RF内容有TS 38.101-5单独去讲,而ATG则会和地面网络共用某些band,这部分在38.101-1中有描述。 所以会存在ATG与地面网络之间的相邻信…

《自动驾驶技术的深度思考:安全与伦理的挑战》

内容概要 在当今这个自动驾驶技术飞速发展的时代,我们生活的节奏恰似一场疾驰的赛车,然而,赛道上并非总是平坦。在这场技术革命中,安全与伦理问题像是潜伏在阴影中的幽灵,轮番考验着我们的道德底线与法律界限。 随着…

hbuilder 安卓app手机调试中基座如何设置

app端使用基座 手机在线预览功能 1.点击运行 2.点击运行到手机或者模拟器 3.制作自定义调试基座 4.先生成证书【可以看我上一篇文档写的有】,点击打包 5.打包出android自定义调试基座【android_debug.apk】,【就跟app打包一样需要等个几分钟】 6.点击运行到手…

【AIGC】如何高效使用ChatGPT挖掘AI最大潜能?26个Prompt提问秘诀帮你提升300%效率的!

还记得第一次使用ChatGPT时,那种既兴奋又困惑的心情吗?我是从一个对AI一知半解的普通用户,逐步成长为现在的“ChatGPT大神”。这一过程并非一蹴而就,而是通过不断的探索和实践,掌握了一系列高效使用的技巧。今天&#…

汽车免拆诊断案例 | 2014款保时捷卡宴车发动机偶尔无法起动

故障现象 一辆2014款保时捷卡宴车,搭载3.0T 发动机,累计行驶里程约为18万km。车主反映,发动机偶尔无法起动。 故障诊断 接车后试车,发动机起动及运转均正常。用故障检测仪检测,发动机控制单元(DME&#x…

aippt:AI 智能生成 PPT 的开源项目

aippt:AI 智能生成 PPT 的开源项目 在现代办公和学习中,PPT(PowerPoint Presentation)是一种非常重要的展示工具。然而,制作一份高质量的PPT往往需要花费大量的时间和精力。为了解决这一问题,aippt项目应运…

【泛微系统】流程发起次数报表

流程发起次数报表 应用场景: 查询所有发起过业务流程的员工的信息,可作为绩效考核、系统使用情况等依据; 如何使用该SQL生成系统在线报表,实时查询最新的发起数据? 1、数据库创建视图,并定义一个视图名称如;view_test1 2、系统后台建模引擎-表单-右键创建一个虚拟表单…

【电子元器件】电感基础知识

本文章是笔者整理的备忘笔记。希望在帮助自己温习避免遗忘的同时,也能帮助其他需要参考的朋友。如有谬误,欢迎大家进行指正。 一、 电感的基本工作原理 1. 电感的基本工作原理如下: (1) 当线圈中有电流通过时&#…

IDEA 修改格式化仅格式化本次改动代码

最近总是发现格式化的时候会格式化文件所有代码,提交Git 后再看提交日志,就很不清晰。修改方式如下 中文: 格式化代码快捷键[中文配置]: 英文: 格式化代码快捷键[英文配置]:

数据结构开始——时间复杂度和空间复杂度知识点笔记总结

好了,经过了漫长的时间学习c语言语法知识,现在我们到了数据结构的学习。 首先,我们得思考一下 什么是数据结构? 数据结构(Data Structure)是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素…

【游戏设计原理】7 - 加德纳的多元智能理论

虽然多元智能理论是对认知方式的分类,但它也可以为游戏设计提供丰富的思路和策略,帮助设计师创建更具吸引力、包容性和多样性的游戏。通过理解不同玩家的认知方式和优势,我们可以更精准地设计游戏的元素和玩法,使其能够吸引广泛的…