返回介绍

数学基础

统计学习

深度学习

工具

Scala

一、Configuration

发布于 2023-07-17 23:38:23 字数 15324 浏览 0 评论 0 收藏 0

  1. PretrainedConfig 基类实现了一些通用方法,如从本地或者远程加载/保存一个 configuration 。每个派生的 config class 实现了模型的特定属性。所有 config class 的常见属性是:hidden_sizenum_attention_headsnum_hidden_layers 。文本模型进一步实现了 vocab_size 属性。

  2. 配置文件可以加载到内存、以及保存到文件。注意,使用配置文件来初始化一个模型并不会加载模型的权重,它仅仅影响模型的配置。

  3. 安装 Transformer

    
    pip install transformers
    pip install transformers[torch]  # cpu-only
    pip install transformers[tf-cpu] # cpu-only
    pip install transformers[flax]   # cpu-only
    pip install git+https://github.com/huggingface/transformers
    conda install -c huggingface transformers

    检验是否安装成功:

    
    
    xxxxxxxxxx
    python -c "from transformers import pipeline; print(pipeline('sentiment-analysis')('we love you'))

1.1 API

  1. class transformers.PretrainedConfigPretrainedConfig 基类。

    
    
    xxxxxxxxxx
    class transformers.PretrainedConfig(**kwargs)

    参数:

    • name_or_path:一个字符串,默认为空字符串,作为 pretrained_model_name_or_path 传递给 PreTrainedModel.from_pretrained()/TFPreTrainedModel.from_pretrained()

    • output_hidden_states:一个布尔值,默认为 False,指定模型是否应该返回所有的 hidden state

    • output_attentions:一个布尔值,默认为 False,指定模型是否应该返回所有的注意力。

    • return_dict:一个布尔值,默认为 True,指定模型是否应该返回一个 ModelOutput 而不是一个普通的元组。

    • is_encoder_decoder:一个布尔值,默认为 False,指定模型是否作为一个 encoder/decoder 使用。

    • is_decoder:一个布尔值,默认为 False,模型是否被用作解码器。如果为 False,则模型被用作编码器。

    • cross_attention_hidden_size:一个整数,指定 cross-attention layer 的隐层维度。当该模型被用作 encoder-decoder setting 中的解码器时,并且当 cross-attention 隐层维度与 self.config.hidden_size 维度不同时使用。

    • add_cross_attention:一个布尔值,默认为 False,指定是否应该将 cross-attention layer 添加到模型中。

      注意,这个选项只与可以作为 EncoderDecoderModel 类的解码器的模型有关,其中 EncoderDecoderModel 类包括AUTO_MODELS_FOR_CAUSAL_LM 中的所有模型。

    • tie_encoder_decoder:一个布尔值,默认为 False,指定是否所有编码器权重应与它们的等价的解码器权重绑定(即,权重共享)。

      注意,这要求编码器和解码器的参数名称完全相同。

    • prune_heads:一个字典,键为层的编号,值为 head 的编号组成的列表,默认为空字典。该参数指定模型每一层的被裁剪的 head

      例如:{1: [0, 2], 2: [2, 3]} 表示 layer 1 裁剪 heads 0, 2layer 2 裁剪 heads 2, 3

    • chunk_size_feed_forward:一个整数,默认为零,指定 residual attention block 中所有 feed forward layerchunk size

      chunk size = 0 意味着 feed forward layer 不被分块;chunk size = n 意味着 feed forward layer 每次处理n$ n $ 个 embedding ,其中 n < sequence_length ,这是在 Reformer 论文中提出的方法。

    针对序列生成任务的参数:

    • max_length:一个整数,默认为 20,指定模型的生成方法中,默认使用的最大长度。

    • min_length:一个整数,默认为 10,指定模型的生成方法中,默认使用的最小长度。

    • do_sample:一个布尔值,默认为 False,指定模型的生成方法中,是否使用采样。如果为 False 则使用贪心解码 greedy decoding

    • early_stopping:一个布尔值,默认为 False,指定模型的生成方法中,是否当至少 num_beams 句子已经生成的时候提前结束 beam search

    • num_beams:一个整数,默认为 1,指定模型的生成方法中,beam search 默认使用的 beam 数量(即,beam size )。 1 意味着没有 beam search

    • num_beam_groups:一个整数,默认为 1,指定模型的生成方法中,将 num_beams 分成的组数,以确保在模型的生成方法中不同 beam group 的多样性。 1 意味着没有 group beam search

    • diversity_penalty:一个浮点数,默认为 0.0 ,指定模型的生成方法中,控制 group beam search 的多样性。0 意味着没有多样性惩罚。惩罚越大,输出的多样性越强。

    • temperature:一个浮点数,默认为 1.0,指定模型的生成方法中,用于建模 next token 概率(即 softmax 函数的温度)。必须是严格为正的数。

    • top_k:一个整数,默认为 50,指定模型的生成方法中,用于 top-k-filtering 的、保留最高概率的多少个 vocabulary token

    • top_p:一个浮点数,默认为 1.0,指定模型的生成方法中,top_p 的值。如果 top_p < 1.0,那么保留概率加起来大于等于 top_p 的、top 概率的 token

    • repetition_penalty:一个浮点数,默认为 1.0,指定模型的生成方法中,repetition penalty 的超参数。1.0 意味着没有惩罚。

    • length_penalty:一个浮点数,默认为 1.0,指定模型的生成方法中,beam-based 方法中针对长度的指数惩罚。它以指数的形式作用在序列长度上,然后把序列的得分除以这个指数结果。

      由于序列的得分是对数似然(是个负数),因此 length_penalty > 0.0 会鼓励更长的序列,而 length_penalty < 0.0 会鼓励更短的序列。

    • no_repeat_ngram_size:一个整数,默认为 0,指定模型的生成方法中,no_repeat_ngram_size 的值。如果是大于零的整数,则所有该 sizengram 只能出现一次。

    • encoder_no_repeat_ngram_size:一个整数,默认为 0,指定模型的生成方法中,encoder_no_repeat_ngram_size 的值。如果是大于零的整数,则出现在 encoder_input_ids 中的所有该 sizengram ,都不能出现在 decoder_input_ids 中。

    • bad_words_ids:一个整数列表,指定模型的生成方法中,哪些 token id 禁止被生成。

      为了获得不应该出现在生成文本中的单词的 token id,使用 tokenizer.encode(bad_word, add_prefix_space=True)

    • num_return_sequences:一个整数,默认为 1,指定模型的生成方法中,batch 中每个样本需要独立返回的序列数量。

    • output_scores:一个布尔值,默认为 False,指定模型的生成方法中,是否需要返回 logits

    • return_dict_in_generate:一个布尔值,默认为 False,指定模型的生成方法中,是否应该返回 ModelOutput 而不是 torch.LongTensor

    • forced_bos_token_id:一个整数,指定模型的生成方法中,在解码器的 decoder_start_token_id 之后强制作为第一个被生成的 tokentoken id

      这对于像 mBART 这样的多语言模型非常有用,在这种情况下,第一个被生成的token 需要是 target language token

    • forced_eos_token_id:一个整数,指定模型的生成方法中,当生成的序列达到 max_length 时,强制作为最后一个被生成的 tokentoken id

    • remove_invalid_values:一个布尔值,指定模型的生成方法中,是否删除模型中可能的 naninf 输出以防止生成方法崩溃。

      注意,使用 remove_invalid_values 会减慢生成速度。

    针对微调任务的参数:

    • architectures:一个字符串列表,指定微调任务中,可以与模型预训练权重一起使用的模型架构。
    • finetuning_task:一个字符串,指定微调任务中,微调任务的名称。当从原始的 checkpoint 转换时,可以用这个参数。
    • id2label:一个整数到字符串的字典,指定微调任务中,indexlabel 名字的映射。
    • label2id :一个字符串到整数的字典,指定微调任务中,label 名字到 index 的映射。
    • num_labels:一个整数,指定微调任务中,使用的 label 的数量,通常用于分类任务。
    • task_specific_params:一个 Dict[str, Any] 字典 ,指定微调任务中,存储的额外关键字参数。
    • problem_type:一个字符串,指定微调任务中,针对 XxxForSequenceClassification 模型的问题类型,可以为 "regression""single_label_classification""multi_label_classification"

    tokenizer 关联的参数:

    • tokenizer_class:一个字符串,指定要使用的 tokenizer class 的名字。如果未设置,则默认使用模型相关的 tokenizer
    • prefix:一个字符串,指定在调用模型之前,应该在每个文本的开头添加的一个特定的 prompt
    • bos_token_id:一个整数,指定 beginning-of-stream tokenID
    • pad_token_id:一个整数,指定 padding tokenID
    • eos_token_id:一个整数,指定 end-of-stream tokenID
    • decoder_start_token_id:一个整数,指定如果一个 encoder-decoder 模型以不同于 bostoken 开始解码,则指定该 tokenid
    • sep_token_id:一个整数,指定 separation tokenID

    PyTorch 特定的参数:

    • torchscript:一个布尔值,默认为 False,指定该模型是否应与Torchscript 一起使用。

    • tie_word_embeddings:一个布尔值,默认为 True,指定模型的 input word embeddingoutput word embedding 是否应该绑定(即,权重共享)。请注意,仅当模型有一个 output word embedding layer 时,该参数才生效。

    • torch_dtype:一个字符串,指定权重的 dtype 。这个属性可以用来将模型初始化为一个非默认的 dtype (模型权重通常是float32),从而允许优化存储。 例如,如果保存的模型是 float16 ,理想情况下,我们希望将模型权重初始化为 float16 而不是 float32

      由于config 对象是以纯文本形式存储的,这个属性只包含浮点类型的字符串,没有 torch. 前缀。例如,对于 torch.float16torch_dtype"float16" 字符串。

      注意,这个属性目前在模型加载时没有被使用(而是在将模型初始化时使用)。

    TensorFlow 特定的参数:

    • use_bfloat16:一个布尔值,默认为 False,指定模型是否应该使用 BFloat16 (仅用于部分 TF 模型)。
    • tf_legacy_loss:一个布尔值,默认为 False,指定模型是否应该使用 legacy TensorFlow losslegacy loss 具有可变的 output shape,并且可能与 XLA 不兼容。该参数将在 Transformer 后续版本中移除。
  2. PretrainedConfigclass 属性(由派生类所覆盖):

    • model_type:一个字符串,用于模型类型的一个 identifier。它被序列化到 JSON 文件中,并用于在 AutoConfig 中重新创建正确的对象。
    • is_composition:一个布尔值,指定该 config class 是否由多个 sub-config 组成。在这种情况下,该 config 必须从两个或更多的 PretrainedConfig 类型的配置中初始化。
    • keys_to_ignore_at_inference:一个字符串列表,在推断过程中查看模型的 dictionary output 时,默认要忽略的键的列表。
    • attribute_map:一个字符串到字符串的字典,将模型的 specific attribute name 映射到标准化的属性名。
  3. PretrainedConfig 的通用属性(在所有子类中都存在):

    • vocab_size:一个整数,指定词表的大小,它也是 embedding 矩阵的第一个维度。对于像 ViT 这样没有文本模态的模型,这个属性可能会丢失。
    • hidden_size:一个整数,指定模型的隐层维度。
    • num_attention_heads:一个整数,指定模型的注意力头的数量。
    • num_hidden_layers:一个整数,指定模型中 block 的数量。
  4. 方法:

    • push_to_hub():将配置文件上传到 Model Hub ,同时同步位于 repo_path_or_name 中的 repolocal clone

      
      
      xxxxxxxxxx
      push_to_hub(repo_id: str, use_temp_dir: typing.Optional[bool] = None, commit_message: typing.Optional[str] = None, private: typing.Optional[bool] = None, use_auth_token: typing.Union[bool, str, NoneType] = None, max_shard_size: typing.Union[int, str, NoneType] = '10GB', create_pr: bool = False, **deprecated_kwargs )

      参数:参考 PreTrainedTokenizerBase.push_to_hub() 方法。

    • dict_torch_dtype_to_str(d: Dict[str, Any]) -> None:检查字典 d 及其嵌套的字典是否有 torch_dtype 键,如果有,就把 torch.dtype 转换为一个对应的字符串。如 torch.float32 转换为 "float32"

    • from_dict(config_dict: Dict[str, Any], **kwargs) -> PretrainedConfig:从字典中创建一个 PretrainedConfig

    • from_json_file(json_file: Union[str, os.PathLike]) -> PretrainedConfig:从 json 文件中创建一个 PretrainedConfig

    • from_pretrained(pretrained_model_name_or_path: Union[str, os.PathLike], **kwargs) -> PretrainedConfig:从 pretrained model configuration 中建一个 PretrainedConfig

      参数:参考 PreTrainedTokenizerBase.from_pretrained() 方法。

    • get_config_dict(pretrained_model_name_or_path: Union[str, os.PathLike], **kwargs) -> Tuple[Dict[str, Any], Dict[str, Any]]:从一个配置对象中返回字典,这个字典可用于 from_dict()

      参数:参考 from_pretrained()

      返回值:一个元组,每个元素都是一个字典,其中第二个字典通常是空字典。

    • register_for_auto_class(auto_class="AutoConfig"):将当前的 class 注册到给定的 auto class 。该方法仅用于自定义的 config class,因为内置的 config class 已经注册到 AutoConfig

    • save_pretrained(save_directory: Union[str, os.PathLike], push_to_hub: bool = False, **kwargs):保存配置对象到 save_directory 目录,从而便于 from_pretrained() 方法加载。

      参数:参考 PreTrainedTokenizerBase.save_pretrained() 方法。

    • to_dict() -> Dict[str, Any]:将配置对象序列化为字典。

    • to_diff_dict() -> Dict[str, Any]:将配置对象序列化为字典,但是字典中移除了所有的默认配置从而便于阅读。

    • to_json_file(json_file_path: Union[str, os.PathLike], use_diff: bool = True) :将配置对象保存到 json 文件。

    • to_json_string(use_diff: bool = True) -> str :将配置对象序列化为 json 字符串。

    • update(config_dict: Dict[str, Any]):根据 config_dict 指定的属性来更新当前配置对象的属性。

    • update_from_string(update_str: str):根据 update_str 指定的属性来更新当前配置对象的属性。

      update_str 的格式为:"n_embd=10,resid_pdrop=0.2,scale_attn_weights=false,summary_type=cls_index"

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文