强者自定义,弱者用默认,傻逼不看说明书
1.
2.在 model.generate()里填参数,默认为20个新token
generated_ids = model.generate(**model_inputs, max_new_tokens=50)
3. 默认情况下,除非在GenerationConfig文件中指定,否则generate会在每个迭代中选择最可能的token(贪婪解码)。对于您的任务,这可能是不理想的;像聊天机器人或写作文章这样的创造性任务受益于采样。另一方面,像音频转录或翻译这样的基于输入的任务受益于贪婪解码。通过将do_sample=True启用采样
4.LMs是仅解码器架构,意味着它们会持续迭代您的输入提示。如果您的输入长度不相同,则需要对它们进行填充。由于LLMs没有接受过从pad tokens
继续训练,因此您的输入需要左填充。确保在生成时不要忘记传递注意力掩码!
tokenizer = AutoTokenizer.from_pretrained("mistralai/Mistral-7B-v0.1", padding_side="left")
5.apply_chat_template在tokenizer中
一些模型和任务期望某种输入提示格式才能正常工作。当未应用此格式时,您将获得悄然的性能下降:
messages = [ ... { ... "role": "system", ... "content": "You are a friendly chatbot who always responds in the style of a thug", ... }, ... {"role": "user", "content": "How many helicopters can a human eat in one sitting?"}, ... ] >>> model_inputs = tokenizer.apply_chat_template(messages, add_generation_prompt=True, return_tensors="pt").to("cuda")
TextGenerationPipeline将负责处理所有的tokenized
并调用apply_chat_template
,一旦模型有了聊天模板,您只需要初始化pipeline并传递消息列表!
from transformers import pipeline pipe = pipeline("text-generation", "HuggingFaceH4/zephyr-7b-beta") messages = [ { "role": "system", "content": "You are a friendly chatbot who always responds in the style of a pirate", }, {"role": "user", "content": "How many helicopters can a human eat in one sitting?"}, ] print(pipe(messages, max_new_tokens=256)['generated_text'][-1]
6.当你对模型配置满意时,可以使用 save_pretrained() 来保存配置。你的配置文件将以 JSON 文件的形式存储在指定的保存目录中:
>>> my_config.save_pretrained(save_directory="./your_model_save_path")
要重用配置文件,请使用 from_pretrained() 进行加载:
>>> my_config = DistilBertConfig.from_pretrained("./your_model_save_path/config.json")
7.通过切换到不同的模型头,可以轻松地将此检查点重复用于其他任务。对于问答任务,你可以使用 DistilBertForQuestionAnswering
模型头。问答头(question answering head)与序列分类头类似,不同点在于它是隐藏状态输出之上的线性层。
8.PreTrainedTokenizer:分词器的Python实现
PreTrainedTokenizerFast:来自我们基于 Rust 的 🤗 Tokenizer 库的分词器。因为其使用了 Rust 实现,这种分词器类型的速度要快得多,尤其是在批量分词(batch tokenization)的时候。快速分词器还提供其他的方法,例如偏移映射(offset mapping),它将标记(token)映射到其原始单词或字符。
9.torch.cuda.empty_cache()
10.编写自定义配置时需要记住的三个重要事项如下:
- 必须继承自
PretrainedConfig
, PretrainedConfig
的__init__
方法必须接受任何 kwargs,- 这些
kwargs
需要传递给超类的__init__
方法。