文章目录

  • huggingface下载用法
  • 参数介绍GenerationConfig
  • 控制输出长度的:
  • 控制生成策略的:
  • 控制生成变量的
  • 生成时可能用到的特殊token


huggingface下载用法

以chatglm3-6b为例
如何快速下载huggingface大模型:https://padeoe.com/huggingface-large-models-downloader/
国内镜像网站设置:export HF_ENDPOINT="https://hf-mirror.com" 安装huggingface-cli

pip install -U huggingface_hub

安装huggingface上的模型:

huggingface-cli download --resume-download THUDM/chatglm3-6b --local-dir download/chatglm3-6b --local-dir-use-symlinks False

以llama3为例,申请信息不要填国内的,会被reject。
huggingface文档 加载模型:llama3_path是本地的模型存储路径。

from transformers import AutoTokenizer, AutoModelForCausalLM
 model = AutoModelForCausalLM.from_pretrained(llama3_path)
 tokenizer = AutoTokenizer.from_pretrained(llama3_path)

text_generation用法chat模型用法

参数介绍GenerationConfig

以text_generation为例。
huggingface GenerationConfig参数介绍

控制输出长度的:

  • max_length,默认是20。表示最大的 输入+输出 的长度。效果会被max_new_tokens覆盖。
  • max_new_tokens,最大的输出的长度。
  • min_length,默认是0。表示最小的 输入+输出 的长度。效果会被min_new_tokens覆盖。
  • early_stopping,默认是False。控制beam-based方法的停止条件。有三种可能,True,当有num_beams个完整的candidates就停止;False,当几乎不能有更好的candidate就停止;never,当肯定没有更好的candidate就停止。
  • max_time,运行的最大时长(秒),超过就停止。

控制生成策略的:

部分参数参考部分参数参考2

  • do_sample是否使用采样策略。否则使用贪心解码。默认False
  • num_beams,默认为1,1表示不适用beam search。
  • num_beam_groups,huggingface文档说是为了确保不同组的beams之间的多样性。
  • penalty_alpha

参考控制生成的文本多样性的参数。它控制生成的文本的多样性和翻译的目标序列的近似程度之间的权衡。当penalty_alpha值越大时,模型生成的文本变得更加多样,生成的文本与目标序列的近似程度可能会变得更加差。反之,当penalty_alpha值越小时,模型生成的文本变得更加相似于目标序列,多样性可能会变得更加差。

控制模型输出多样性的

  • temperature,默认是1。较高的temperature导致文本更多样,但是也可能导致不可信。
  • topk_k,默认50,过滤最高概率的top_k个回答。
  • top_p,默认1.0。如果值小于1,仅保留概率总计为 top_p 或更高的最小集合进行生成。
  • typical_p,默认为1。

参考 top_p控制生成的文本中,每个词选择的概率必须在最高概率的前 p 的词中,而不是选择来自整个词汇表中的任何词。与 top_p 类似,但是typical_p限制的是生成的文本中每个词概率的分布,而不是概率的确切值。与 top_p 不同的是,typical_p 可以产生更长的文本序列,因为它允许更多的词汇选择。使用这些参数可以限制生成的文本,从而产生更有意义的,更符合目标的生成文本。

  • epsilon_cutoff ,默认0。设置了选择的token的生成概率的下限,建议在3e-4到9e-4之间。
  • eta_cutoff,默认0。eta sampling是typical和epsilon采样的结合体。对于两个值eta_cutoff和sqrt(eta_cutoff) * exp(-entropy(softmax(next_token_logits))),只要token的生成概率高于任意一个值就可以考虑。建议在3e-4到2e-3之间。
  • diversity_penalty,默认为0。只有当使用group beam search的时候有效。如果发现当前beam生成了其他group的某个beam生成的token,就从当前beam分数里扣去diversity_penalty。这是为了希望模型输出的token尽可能多样。
  • repetition_penalty,默认为1。重复的单词和句子的惩罚。1表示没有惩罚。repetition_penalty越大表示惩罚越大,生成概率越低。根据实际需求判断,是否需要更多重复。
  • encoder_repetition_penalty,默认为1。当输出和输入比较相似的时候给予惩罚。这是希望模型不要单纯复述输入。值越大惩罚越大。
  • length_penalty,默认为1。length_penalty作为句子长度的指数,然后除以分数(即结果作为分母,分数作为分子)。因为分数是序列概率的似然函数(负数),所以length_penalty等于0的时候,不同长度句子结果都为1,没有对句子长度的encourage;当大于0的时候,句子长的结果高,绝对值的(分数/分母)更小,因为是负数,所以最终(分数/分母)更大,鼓励生成长度高的句子。
  • no_repeat_ngram_size,默认为0。如果> 0,则该大小的所有 ngram 只能出现一次。
  • bad_words_ids,格式为List[List[int]]。表示禁止的token的id们。huggingface用法。注意bad_words_ids要有效,必须tokenizer在通过from_pretrained初始化的时候添加参数add_prefix_space=True
  • force_words_ids,同上,表示必须要有的token的id们。
  • renormalize_logits,默认False。huggingface建议为True。

参考 当设置为 True 时,它会将模型中的 logits 规范化为概率分布,以便于计算损失和生成样本。在某些情况下,如果 logits 不规范化,可能会出现训练困难或生成不稳定的问题,因此可以将 renormalize_logits 设置为 True 来解决这些问题。需要注意的是,将 renormalize_logits 设置为 True 会对生成的样本产生一定的影响。具体来说,它会使生成的样本更加平滑,这意味着它们可能会失去一些原始模型的细节。因此,在某些情况下,可以将 renormalize_logits 设置为 False,以便生成更加准确和详细的样本。但是,这也可能导致训练问题和不稳定的生成结果,需要在使用时谨慎权衡。

  • constraints,格式为List[Constraint]。可以添加到生成中的自定义约束,以确保输出以最合理的方式包含由 Constraint 对象定义的某些标记的使用。
  • forced_bos_token_id,格式为int,默认是model.config.forced_bos_token_id。强制在decoder_start_token_id后生成的第一个token的id。
  • forced_eos_token_id,格式为Union[int, List[int]],默认是model.config.forced_eos_token_id。当max_length已满的时候的最后一个生成的token的id,可以传递一个list来设置多种end-of-sequences的tokens。
  • remove_invalid_values,布尔值,默认defaults to model.config.remove_invalid_values,即是否去除可能的nan和inf(这俩会导致生成崩溃)。但是True了之后会导致生成变慢。
  • exponential_decay_length_penalty,格式为tuple(int, float)。在生成一定数量的token后,该元组会增加指数级增加的长度惩罚。 元组应包含: (start_index, decay_factor) ,其中 start_index 表示惩罚开始的位置,decay_factor 表示指数衰减的因子
  • suppress_tokens ,格式为List[int]。generation时不生成的token的ids们,对应概率全都设置为-inf。【但是不清楚和bad_words_ids的区别是什么】
  • begin_suppress_tokens ,格式为List[int]。在生成开始的时候抑制某些tokens。
  • forced_decoder_ids,格式为List[List[int]]。强制定义了解码时部分位置的token。比如[[1, 123]]表示第二个(下标1)生成的token将始终是id为123的token。
  • sequence_bias,格式为Dict[Tuple[int], float]。字典,字典的key中每个tuple记录某个位置上的某个token,字典的value表示该tuple的偏置,偏置正数提高该token在该位置上的被选择的几率。
  • guidance_scale,格式为float。无分类器引导classifier free guidance(CFG)的guidance scale。 CFG 通过设置guiding_scale > 1 来启用。高的值会鼓励模型生成与输入提示联系更紧密的样本,但通常会以较差的质量为代价。特别常用于生成对抗网络(GANs)和扩散模型等。
  • low_memory ,布尔值。切换到sequential beam search和sequential topk 进行对比搜索,以减少峰值内存。 与beam搜索和contrastive搜索一起使用。

控制生成变量的

  • num_return_sequences,默认为1。batch中每条样本独立计算的返回sequences的数量。
  • output_attentions,默认False。是否返回所有注意力层。
  • output_hidden_states,同上,隐藏层。
  • output_scores,同上,预测的分数。
  • output_logits,是否返回没有处理过的logits scores。
  • return_dict_in_generate,默认False。是否返回一个 ModelOutput,而不是元组。

生成时可能用到的特殊token

  • pad_token_id,int,填充padding的token id。有些时候tokenizer没有pad_token_id,需要自己设置,可以设置为eos_token_id。比如gpt2和llama系列。
  • bos_token_id,int,beginning-of-sequence
  • eos_token_id,Union[int, List[int]], end-of-sequence