Press "Enter" to skip to content

填充大型语言模型 —— 以Llama 2为例

填充训练示例以优化因果LLMs的最佳实践

作者提供的图片 — 基于Pixabay的图像

填充是大型语言模型(LLMs)中最少有文档记录的方面之一。为什么呢?因为LLMs通常在没有填充的情况下进行预训练。

然而,对于在自定义数据集上进行微调LLMs,填充是必要的。如果未正确填充训练示例,可能会导致各种意外行为:训练期间的空损失或无穷大损失,生成过度,或推理期间的空输出,这些都是填充不正确的症状。

在本文中,我首先解释了什么是填充以及为什么需要填充。然后,我展示了如何找到正确的填充策略,以适用于没有填充的预训练LLMs。我提出了两种不同的解决方案,使用Hugging Face的Transformers来添加填充支持到LLMs中。

在本文的最后,我还提供了示例,展示了如何为Llama 2填充您的训练示例。

阅读完本文后,您应该能够自行弄清楚如何为LLMs填充训练示例,而无需阅读它们的文档或教程。

填充和批处理

什么是填充以及为什么需要填充?

让我们以一个示例开始,我们希望将其用于微调LLMs。

example = "你不是一个聊天机器人。"

我们必须将这个示例转换为一个标记序列。通常,诸如Transformers之类的库会按以下步骤进行标记化:

  • 根据给定的词汇表将示例分割为子词:
example = ["▁你", "▁不是", "▁一个", "▁聊", "天", "机", "器", "人", "。"]
  • 用词汇表中的索引替换单词,得到一个整数序列:
example = [887, 526, 451, 263, 13563, 7451, 29889, 269, 4]
  • 向序列中添加特殊标记:BOS标记,EOS标记,UNK标记,PAD标记等。
example = [1, 887, 526, 451, 263, 13563, 7451, 29889, 269, 4]

注意:对于此示例,我使用了Llama 2的分词器。我们将在下面详细介绍如何进行。

Leave a Reply

Your email address will not be published. Required fields are marked *