一、引言
这里的Transformers指的是huggingface开发的大模型库,为huggingface上数以万计的预训练大模型提供预测、训练等服务。
🤗 Transformers 提供了数以千计的预训练模型,支持 100 多种语言的文本分类、信息抽取、问答、摘要、翻译、文本生成。它的宗旨是让最先进的 NLP 技术人人易用。
🤗 Transformers 提供了便于快速下载和使用的API,让你可以把预训练模型用在给定文本、在你的数据集上微调然后通过 model hub 与社区共享。同时,每个定义的 Python 模块均完全独立,方便修改和快速研究实验。
🤗 Transformers 支持三个最热门的深度学习库: Jax, PyTorch 以及 TensorFlow — 并与之无缝整合。你可以直接使用一个框架训练你的模型然后用另一个加载和推理。
本文重点介绍惩罚系数repetition_penalty
。
二、惩罚系数repetition_penalty
2.1 概述
repetition_penalty是在使用预训练语言模型进行文本生成时,用于控制生成文本中重复词或短语的惩罚系数。这个参数在 Hugging Face Transformers 库中被引入,以帮助减少生成文本中的重复和循环模式,提高生成文本的多样性和连贯性
2.2 使用说明
- repetition_penalty 参数影响模型在生成文本时对已生成词的偏好。在默认情况下,模型在生成下一个词时,会根据训练数据中词的频率和上下文来预测下一个词的概率。然而,这种机制有时会导致模型生成重复的词或短语,特别是在长文本生成中。
- 当设置 repetition_penalty 参数时,模型在计算下一个词的概率时,会降低已生成词的概率,从而减少重复。具体来说,如果一个词已经被生成过,它的概率会被乘以 repetition_penalty 的倒数。例如,如果 repetition_penalty 设置为 1.2,那么一个已经生成过的词的概率将被乘以 1/1.2,即 0.833,从而降低其被再次选择的概率。
2.3 使用示例
from transformers import AutoModelForCausalLM, AutoTokenizer model = AutoModelForCausalLM.from_pretrained("model_name") tokenizer = AutoTokenizer.from_pretrained("model_name") input_text = "Hello, how are you?" input_ids = tokenizer(input_text, return_tensors="pt").input_ids # 使用 repetition_penalty 参数 output = model.generate(input_ids, max_length=100, repetition_penalty=1.2)
在这个例子中,repetition_penalty
设置为1.2,意味着模型在生成文本时会轻微惩罚重复的词组,以增加生成文本的多样性。
- 如果repetition_penalty大于1,减少重复词的生成概率。
- 如果repetition_penalty等于1,保持原有生成策略。
- 如果repetition_penalty小于1,增加重复词的生成概率。
三、总结
本文先对大语言模型生成参数repetition_penalty进行讲解,希望可以帮助到您。