Transformer;Hugging Face之transformers库、datasets库详解;Modelscope
@[TOC](Transformer;Hugging Face之transformers库、datasets库详解;Modelscope)
Transformer
Transformer 是一种深度学习模型,它主要用于处理序列数据,如自然语言处理任务中的文本翻译、情感分析等。Transformer 模型由 Google 在 2017 年的论文《Attention is All You Need》中首次提出,其核心创新在于自注意力机制(Self-Attention Mechanism),这使得模型能够并行处理输入序列的所有元素,从而显著提高了训练效率和性能。
Transformer 的主要组成部分
编码器(Encoder)
编码器由多个相同的层堆叠而成,每一层包含两个子层:
- 多头自注意力机制(Multi-Head Self-Attention):允许模型在不同的表示子空间中关注输入的不同部分。
- 前馈神经网络(Feed-Forward Neural Network):一个简单的全连接层,对每个位置的特征进行变换。
解码器(Decoder)
解码器也由多个相同的层堆叠而成,每一层包含三个子层:
- 多头自注意力机制(Multi-Head Self-Attention):与编码器类似,但会应用掩码(Masking)以防止当前位置关注到未来的位置。
- 多头注意力机制(Multi-Head Attention):将编码器的输出作为键(Key)和值(Value),当前解码器的输出作为查询(Query),实现编码器和解码器之间的交互。
- 前馈神经网络(Feed-Forward Neural Network):与编码器中的前馈神经网络相同。
位置编码(Positional Encoding)
由于 Transformer 模型本身不包含任何关于输入序列顺序的信息,因此需要添加位置编码来引入位置信息。位置编码通常采用正弦和余弦函数的形式。
残差连接与层归一化(Residual Connections & Layer Normalization)
每个子层后面都跟着一个残差连接(Residual Connection),然后是层归一化(Layer Normalization)。这有助于缓解梯度消失问题,并加速训练过程。
自注意力机制(Self-Attention Mechanism)
自注意力机制是 Transformer 模型的核心,它允许模型在处理某个位置的输入时,考虑其他所有位置的输入。具体步骤如下:
- 线性变换:将输入向量分别通过三个不同的线性变换(权重矩阵),得到查询(Query)、键(Key)和值(Value)向量。
- 计算注意力分数:通过查询和键的点积计算注意力分数,然后除以键的维度的平方根进行缩放。
- 应用 Softmax 函数:对注意力分数应用 Softmax 函数,得到注意力权重。
- 加权求和:将注意力权重与值向量相乘,然后求和,得到最终的输出。
多头注意力机制(Multi-Head Attention)
多头注意力机制通过将自注意力机制分成多个“头”(Head),每个头独立计算注意力,然后将结果拼接在一起,最后通过一个线性变换得到最终的输出。这样可以捕捉不同子空间的信息,提高模型的表达能力。
datasets库(Hugging Face)
datasets 是一个用于处理机器学习和深度学习任务中数据集的 Python 库。它提供了简单易用的接口来加载、处理和管理各种格式的数据集,支持本地数据集和远程数据集(如 Hugging Face 提供的公共数据集)。
1 | |

加载数据集load_dataset
1 | |
datasets 支持与 transformers 库结合使用,方便对文本数据进行预处理(如分词、编码等)。
1 | |
dataset.map

datasets.Dataset 类详解
datasets.Dataset 是 Hugging Face 的 datasets 库中的一个核心类,用于表示和操作单个数据集(如训练集或测试集)。
创建 Dataset 对象
可以通过多种方式创建 Dataset 对象,例如从字典、CSV 文件、JSON 文件等加载数据。
1 | |
DataSet主要属性

1 | |
数据集转换

transformers库(Hugging Face)
如果想要下载大模型到本地的话,可以使用https://huggingface.co/如果在国内没有vpn是进不去的,可以使用镜像https://hf-mirror.com/或者https://opencsg.com/models。
1 | |
主要功能
- 预训练模型:提供多种预训练模型,如BERT、RoBERTa、GPT、T5等。
- 微调模型:支持对预训练模型进行微调,以适应特定的任务和数据集。
- 多语言支持:支持多种语言的模型,适用于跨语言任务。
- 端到端管道:提供简单的API接口,用于快速构建和部署NLP应用。
模型类(库)
- 通用模型类
AutoModel
用途: 通用的预训练模型,适用于各种任务。
AutoModelForCausalLM
用途: 用于因果语言建模任务,如文本生成。
AutoModelForMaskedLM
用途: 用于掩码语言建模任务,如 BERT。
AutoModelForSeq2SeqLM
用途: 用于序列到序列任务,如翻译。 - 特定任务模型类
AutoModelForSequenceClassification
用途: 用于序列分类任务,如情感分析。
AutoModelForTokenClassification
用途: 用于标记分类任务,如命名实体识别。
AutoModelForQuestionAnswering
用途: 用于问答任务。
AutoModelForMultipleChoice
用途: 用于多项选择任务。
AutoModelForNextSentencePrediction
用途: 用于下一句预测任务。
AutoModelForTextClassification
用途: 用于文本分类任务。
AutoModelForImageClassification
用途: 用于图像分类任务。
AutoModelForSemanticSegmentation
用途: 用于语义分割任务。
AutoModelForObjectDetection
用途: 用于目标检测任务。
AutoModelForSpeechSeq2Seq
用途: 用于语音到文本任务。
AutoModelForAudioClassification
用途: 用于音频分类任务。
AutoModelForCTC
用途: 用于连接时序分类(CTC)任务。
AutoModelForSpeechClassification
用途: 用于语音分类任务。
AutoModelForTextToTextGeneration
用途: 用于文本到文本生成任务。
AutoModelForVision2Seq
用途: 用于视觉到序列生成任务。
AutoModelForTableQuestionAnswering
用途: 用于表格问答任务。
AutoModelForZeroShotClassification
用途: 用于零样本分类任务。
AutoModelForTextGeneration
用途: 用于文本生成任务。
AutoModelForSpeechToText
用途: 用于语音到文本任务。
AutoModelForTextToSpeech
用途: 用于文本到语音任务。
AutoModelForVisionTextDualEncoder
用途: 用于视觉-文本双编码任务。
AutoModelForImageToImage
用途: 用于图像到图像任务。
AutoModelForImageClassificationWithAttention
用途: 用于图像分类任务,带有注意力机制。
AutoModelForImageSegmentation
用途: 用于图像分割任务。
AutoModelForImageSuperResolution
用途: 用于图像超分辨率任务。
使用 AutoModelForSequenceClassification 进行回归任务。关键在于将 num_labels 设置为 1,并使用适当的损失函数和评估指标。
参数详解
AutoTokenizer.from_pretrained()
Hugging Face 的 transformers 库中用于加载预训练分词器的类方法。
pretrained_model_name_or_path:
- 必填参数。
- 指定预训练模型的名字(如
"bert-base-uncased")或模型文件所在的路径。 - 可以是一个 Hugging Face 提供的标准模型名称,也可以是本地存储的模型文件夹路径。
config:
- 可选参数。
- 用于指定与分词器相关的配置信息。如果未提供,方法会尝试从
pretrained_model_name_or_path中自动加载配置文件。
use_fast:
- 默认值为
True。 - 指定是否使用基于 Rust 实现的快速分词器(Fast Tokenizer)。如果设置为
False,则使用传统的 Python 分词器。
- 默认值为
cache_dir:
- 可选参数。
- 指定缓存下载模型文件的目录。如果未提供,则默认使用
~/.cache/huggingface/transformers。
force_download:
- 默认值为
False。 - 如果设置为
True,即使模型已经存在于缓存中,也会强制重新下载。
- 默认值为
local_files_only:
- 默认值为
False。 - 如果设置为
True,只允许从本地加载模型文件,不允许访问网络下载。
- 默认值为
proxies:
- 可选参数。
- 指定代理服务器的字典,例如
{'http': 'http://proxy.example.com', 'https': 'https://proxy.example.com'}。
revision:
- 默认值为
"main"。 - 指定从 Hugging Face Model Hub 加载模型时的版本分支或 commit id。
- 默认值为
subfolder:
- 可选参数。
- 如果模型存储在子文件夹中,可以指定子文件夹路径。
trust_remote_code:
- 默认值为
False。 - 如果设置为
True,允许加载远程代码中的自定义模型或分词器实现。
- 默认值为
tokenizer
Hugging Face 的 transformers 库中用于文本分词和编码的核心工具。
编码时的参数
调用 tokenizer 对文本进行编码时(如 tokenizer(text)),可以传入以下参数:
(1) 输入文本
text:
- 必填参数。
- 输入的文本字符串或列表(支持单句或多句输入)。
text_pair:
- 可选参数。
- 第二个输入文本,通常用于句子对任务(如自然语言推理)。
(2) 输出格式
return_tensors:
- 默认值为 None。
- 指定返回张量的类型:
- ‘pt’: 返回 PyTorch 张量。
- ‘tf’: 返回 TensorFlow 张量。
- ‘np’: 返回 NumPy 数组。
return_token_type_ids:
- 默认值为 True。
- 是否返回 token_type_ids(用于区分句子 A 和句子 B)。
return_attention_mask:
- 默认值为 True。
- 是否返回 attention_mask(用于标识有效 token 和填充部分)。
return_special_tokens_mask:
- 默认值为 False。
- 是否返回特殊标记的掩码(如 [CLS] 和 [SEP])。
(3) 截断和填充
max_length:
- 默认值为 None。
- 设置最大序列长度。超出的部分会被截断。
padding:
- 默认值为 ‘do_not_pad’。
- 指定是否填充序列:
- ‘longest’: 填充到批次中最长序列的长度。
- ‘max_length’: 填充到指定的 max_length。
- ‘do_not_pad’: 不进行填充。
truncation:
- 默认值为 False。
- 是否启用截断。如果设置为 True,超出 max_length 的部分会被截断。
stride:
- 默认值为 0。
- 在滑动窗口模式下,指定窗口之间的步幅。
(4) 其他参数
add_special_tokens:
- 默认值为 True。
- 是否添加特殊标记(如 [CLS] 和 [SEP])。
is_split_into_words:
- 默认值为 False。
- 如果输入已经是分词后的单词列表,则设置为 True。
verbose:
- 默认值为 True。
- 是否输出警告信息。
解码时的参数
调用 tokenizer.decode() 方法将 token IDs 转换回文本时,可以传入以下参数:
skip_special_tokens:
- 默认值为 False。
- 是否跳过特殊标记(如 [CLS] 和 [SEP])。
clean_up_tokenization_spaces:
- 默认值为 True。
- 是否清理多余的空格。
基本使用示例
1 | |
如果想查看具体的 token 内容,可以使用 tokenizer.convert_ids_to_tokens 方法:
1 | |
解码示例
1 | |
AutoModel.from_pretrained()
Hugging Face 的 transformers 库中用于加载预训练模型的核心方法。
必填参数
pretrained_model_name_or_path
- 类型: str 或 os.PathLike
- 作用: 指定预训练模型的名字或本地路径。
如果是字符串(如 “bert-base-uncased”),表示从 Hugging Face Model Hub 下载对应的模型。
如果是路径(如 ./my_model_directory),表示从本地加载模型文件。
可选参数
(1) 缓存与下载相关
cache_dir:
- 类型: str 或 os.PathLike
- 默认值: None
- 作用: 指定缓存模型文件的目录。如果未提供,默认使用 ~/.cache/huggingface/transformers。
force_download:
- 类型: bool
- 默认值: False
- 作用: 是否强制重新下载模型文件,即使它们已经存在于缓存中。
local_files_only:
- 类型: bool
- 默认值: False
- 作用: 是否只允许从本地加载模型文件,不允许访问网络下载。
proxies:
- 类型: dict
- 默认值: None
- 作用: 指定代理服务器的字典,例如 {‘http’: ‘http://proxy.example.com‘, ‘https’: ‘https://proxy.example.com'}。
revision:
- 类型: str
- 默认值: “main”
- 作用: 指定从 Hugging Face Model Hub 加载模型时的版本分支或 commit id。
subfolder:
- 类型: str
- 默认值: None
- 作用: 如果模型存储在子文件夹中,可以指定子文件夹路径。
(2) 配置相关
config:
- 类型: PretrainedConfig 或 dict
- 默认值: None
- 作用: 指定与模型相关的配置信息。如果未提供,方法会尝试从 pretrained_model_name_or_path 中自动加载配置文件。
trust_remote_code:
- 类型: bool
- 默认值: False
- 作用: 是否允许加载远程代码中的自定义模型实现。如果设置为 True,可以加载非官方支持的模型。
(3) 模型加载相关
torch_dtype:
- 类型: str, torch.dtype 或 None
- 默认值: None
- 作用: 指定模型权重的数据类型。例如:
- ‘float16’ 或 torch.float16: 使用半精度浮点数。
- ‘bfloat16’ 或 torch.bfloat16: 使用 bfloat16 数据类型。
- ‘float32’ 或 torch.float32: 使用单精度浮点数(默认)。
low_cpu_mem_usage:
- 类型: bool
- 默认值: False
- 作用: 是否启用低 CPU 内存占用模式。适用于加载大模型时减少内存消耗。
device_map:
- 类型: str 或 Dict[str, Union[int, str]]
- 默认值: None
- 作用: 指定模型在多设备(如 GPU)上的分布策略。例如:
- ‘auto’: 自动分配模型到可用设备。
- ‘balanced’: 平衡地分配模型到多个 GPU。
- {layer_name: device_id}: 手动指定每一层的设备。
offload_folder:
- 类型: str 或 os.PathLike
- 默认值: None
- 作用: 指定将部分模型权重卸载到磁盘的文件夹路径。适用于内存有限的环境。
offload_state_dict:
- 类型: bool
- 默认值: False
- 作用: 是否在加载过程中将状态字典卸载到磁盘。
use_auth_token:
- 类型: str 或 bool
- 默认值: None
- 作用: 如果需要访问私有模型,可以提供 Hugging Face 的访问令牌。
model
常用属性

1 | |
常用方法

forward 方法是模型的前向传播方法,用于输入数据并获取模型输出。常见的输入参数包括:
- input_ids: 输入的 token ID 序列。
- attention_mask: 可选,用于指定哪些 token 需要关注。
- token_type_ids: 可选,用于区分不同类型的 token(如句子 A 和句子 B)。
- position_ids: 可选,用于指定 token 的位置。
- head_mask: 可选,用于指定哪些注意力头需要使用。
- inputs_embeds: 可选,用于直接输入嵌入向量。
- output_attentions: 可选,是否返回注意力权重。
- output_hidden_states: 可选,是否返回所有隐藏状态。
- return_dict: 可选,是否返回 ModelOutput 对象。
1 | |
model.generate 方法详解
model.generate 是 Hugging Face 的 transformers 库中用于生成文本的主要方法。它广泛应用于各种生成任务,如文本生成、对话系统、摘要生成等。

AutoConfig.from_pretrained()
AutoConfig.from_pretrained() 是 Hugging Face Transformers 库中用于加载预训练模型配置的核心方法。
pretrained_model_name_or_path
- 类型:str 或 os.PathLike
- 描述:指定预训练模型的名称或路径。可以是模型的标识符(如 ‘bert-base-uncased’)或本地路径,指向包含配置文件(通常是 config.json)的目录。
cache_dir
- 类型:str 或 os.PathLike,可选
- 描述:指定缓存目录,用于存储从远程下载的配置文件。默认使用库的默认缓存目录。
force_download
- 类型:bool,可选
- 描述:是否强制重新下载配置文件,即使它已经存在于缓存中。默认值为 False。
resume_download
- 类型:bool,可选
- 描述:如果下载中断,是否从中断处继续下载。默认值为 False。
proxies
- 类型:dict,可选
- 描述:指定代理服务器,用于通过代理下载配置文件。
use_auth_token
- 类型:str 或 bool,可选
- 描述:用于访问私有模型的认证令牌。如果为 True,会尝试从环境变量 HF_AUTH_TOKEN 中读取令牌;如果是字符串,则直接作为认证令牌。
revision
- 类型:str,可选
- 描述:指定模型的版本或分支(如 “main” 或 Git 提交哈希)。默认值为 “main”。
local_files_only
- 类型:bool,可选
- 描述:是否仅使用本地文件,而不尝试从远程下载。默认值为 False。
config
在使用 AutoConfig.from_pretrained() 加载配置对象后,config 对象包含了与预训练模型相关的各种配置参数。
model_type
- 类型:str
- 描述:模型的类型,例如 ‘bert’、’gpt2’、’roberta’ 等。
vocab_size
- 类型:int
- 描述:词汇表的大小。
hidden_size
- 类型:int
- 描述:隐藏层的大小。
num_hidden_layers
- 类型:int
- 描述:隐藏层的数量。
num_attention_heads
- 类型:int
- 描述:注意力头的数量。
intermediate_size
- 类型:int
- 描述:中间层的大小。
hidden_act
- 类型:str
- 描述:隐藏层激活函数的类型,例如 ‘gelu’、’relu’ 等。
hidden_dropout_prob
- 类型:float
- 描述:隐藏层的 dropout 概率。
attention_probs_dropout_prob
- 类型:float
- 描述:注意力概率的 dropout 概率。
max_position_embeddings
- 类型:int
- 描述:最大位置嵌入的数量。
type_vocab_size
- 类型:int
- 描述:类型词汇表的大小(主要用于 BERT 等模型)。
initializer_range
- 类型:float
- 描述:初始化权重的范围。
layer_norm_eps
- 类型:float
- 描述:层归一化的 epsilon 值。
num_labels
- 类型:int
- 描述:分类任务的标签数量。
TrainingArguments
Hugging Face 的 transformers 库中的一个类,用于配置训练过程中的各种参数。通过 TrainingArguments,你可以轻松地控制训练的各个方面,包括训练步数、学习率、批量大小、评估策略等。
常用参数


Trainer
Hugging Face 的 transformers 库中的一个核心类,用于简化模型的训练、评估和预测过程。
常用参数

1 | |
常用方法

1 | |
LogitsProcess 和 LogitsProcessList 详解
LogitsProcess 是一个接口或基类,通常用于定义对 logits(模型输出的未归一化的预测值)进行处理的逻辑。它的主要作用是对模型生成的 logits 进行特定的后处理操作,例如温度调整、去重复、长度惩罚等。
LogitsProcess常见功能
- 温度采样 (Temperature Sampling):通过调整温度参数来控制生成文本的多样性。
- Top-K 采样:仅保留概率最高的 K 个词,并从这些词中随机选择下一个词。
- Top-P (Nucleus) 采样:保留累积概率达到阈值 P 的最小词集合,并从中随机选择。
- 重复惩罚 (Repetition Penalty):降低已经生成过的词的概率,避免重复生成。
- 长度惩罚 (Length Penalty):根据生成序列的长度调整概率分布。
LogitsProcessList 是一个容器类,用于存储多个 LogitsProcessor 对象。它允许将多个不同的 logits 处理逻辑组合在一起,在生成过程中依次应用这些处理逻辑。
LogitsProcessList工作原理
- 在每次生成步骤中,LogitsProcessList 会遍历其内部的所有 LogitsProcessor,并对 logits 应用每个处理器的逻辑。
- 最终返回经过所有处理器处理后的 logits。
Modelscope
ModelScope 是阿里云开源的模型即服务(MaaS)平台,提供丰富的预训练模型。
1 | |
示例
使用Transformers库加载本地qwen2.5b模型进行回归预测
步骤1:准备环境
1 | |
步骤2:数据处理
1 | |
步骤3:修改模型结构
1 | |
步骤4:训练配置
1 | |
步骤5:训练循环
1 | |
- 可尝试尝试解冻部分基础模型层(如最后3层)
使用AutoModelForSequenceClassification,并指定num_labels=1进行回归预测
参考
1.基于本地Qwen2-7b-Instruct模型做回归预测
2.https://github.com/datawhalechina/unlock-hf
3.https://modelscope.cn/docs/intro/quickstart
4.https://qwenlm.github.io/blog/qwen3/