00202 Hugging Face 常用函数


前言

简单的介绍Hugging Face - 常用函数。

Operating System: Ubuntu 22.04.4 LTS

transformers

HfArgumentParser

api link: https://huggingface.co/docs/transformers/v4.45.2/en/internal/trainer_utils#transformers.HfArgumentParser

HfArgumentParser 是 Hugging Face Transformers 库中的一个工具,用于简化对命令行参数的解析。它基于 Python 的 argparse 模块构建,专门为处理机器学习项目中的参数和配置文件而设计。

以下是一些关于 HfArgumentParser 的关键点:

  1. 集成性:它与 Hugging Face 的其他工具和类(如 TrainingArguments)紧密集成,使得配置训练过程变得更加容易。
  2. 易用性:它提供了一种简单的方式来定义参数,并且可以自动生成帮助信息和提示。
  3. 数据类支持HfArgumentParser 可以直接与 Python 的数据类(data classes)一起工作,使得参数的定义更加清晰和结构化。
  4. 默认值和覆盖:它可以处理默认参数值,并允许通过命令行参数或配置文件来覆盖这些值。

下面是一个简单的例子,展示如何使用 HfArgumentParser

from dataclasses import dataclass, field
from transformers import HfArgumentParser
@dataclass
class ModelArguments:
    model_name_or_path: str = field(
        metadata={"help": "Path to pretrained model or model identifier from huggingface.co/models"}
    )
@dataclass
class DataTrainingArguments:
    train_file: str = field(
        metadata={"help": "The input training data file (a jsonlines or csv file)."}
    )
    eval_file: str = field(
        metadata={"help": "An optional input evaluation data file to evaluate the perplexity on (a jsonlines or csv file)."}
    )
parser = HfArgumentParser((ModelArguments, DataTrainingArguments))
model_args, data_args = parser.parse_args_into_dataclasses()
print(model_args)
print(data_args)

在这个例子中,我们定义了两个数据类 ModelArgumentsDataTrainingArguments,每个类都包含了训练或模型加载过程中可能需要的参数。然后,我们创建了一个 HfArgumentParser 实例,并将这两个数据类传递给它。最后,我们调用 parse_args_into_dataclasses() 方法来解析命令行参数,并将它们转换为相应的数据类实例。

用户可以在命令行中通过如下方式传递参数:

python script.py --model_name_or_path bert-base-uncased --train_file path/to/train/file --eval_file path/to/eval/file

HfArgumentParser 会解析这些参数,并将它们适当地填充到 model_argsdata_args 实例中。

attention_mask

在处理自然语言处理任务时,tokenized_inputs['attention_mask'] 通常用于指示模型在处理序列时应该关注哪些token。在Transformer模型中,attention_mask 是一个重要的概念,它能够告诉模型哪些位置是padding token,以便在计算注意力权重时忽略这些位置。

在您提供的代码片段中:

tokenized_inputs['attention_mask'][indices[i]] = 0

这里发生了以下几件事情:

  1. tokenized_inputs 是一个字典,其中包含了模型输入的各种组件,比如input_idsattention_mask等。
  2. attention_mask 是一个与 input_ids 长度相同的二维数组,通常由1和0组成。其中,1表示该位置的token是有效的,需要模型关注;0表示该位置的token是padding,应该被模型忽略。
  3. indices 是一个包含索引的列表,表示 tokenized_inputs 中需要被修改的位置。
  4. i 是索引 indices 的迭代变量。
  5. tokenized_inputs['attention_mask'][indices[i]] = 0 这行代码将 attention_mask 中对应于 indices[i] 位置的值设置为0。这意味着在模型处理输入序列时,该位置的token将被忽略。

例如,假设我们有以下序列和对应的 attention_mask

tokens:     [CLS] The cat sat on the mat [SEP]
attention_mask:  [1, 1, 1, 1, 1, 1, 1, 1, 1]

如果我们想忽略“on the”这部分,我们可以设置对应的索引,然后更新 attention_mask

indices = [5, 6]  # 假设“on”和“the”在tokens中的索引分别是5和6
for i in range(len(indices)):
    tokenized_inputs['attention_mask'][indices[i]] = 0
# 更新后的attention_mask
attention_mask:  [1, 1, 1, 1, 1, 0, 0, 1, 1]

这样,在模型处理输入时,就会忽略掉“on”和“the”这两个token。

结语

第二百零二篇博文写完,开心!!!!

今天,也是充满希望的一天。


文章作者: LuYF-Lemon-love
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 LuYF-Lemon-love !
  目录