Лучшие практики для создания обучающих примеров для каузальных LLM

Заполнение — один из наиболее малодокументированных аспектов больших языковых моделей (LLM). Почему? Просто потому, что LLM обычно предварительно обучаются без заполнения.

Тем не менее, для точной настройки LLM на пользовательских наборах данных необходимо заполнение. Неправильное заполнение обучающих примеров может привести к различного рода неожиданному поведению: потеря нулей или потеря бесконечности во время обучения, перегенерация или пустой вывод во время логического вывода — все это симптомы неправильного заполнения.

В этой статье я сначала объясню, что такое отступы и зачем они нужны. Затем я покажу, как найти правильную стратегию заполнения для LLM, предварительно обученного без заполнения. Я предлагаю два разных решения для добавления поддержки заполнения в LLM с помощью Hugging Face’s Transformers.

Ближе к концу статьи я также привожу примеры, показывающие, как дополнить ваши обучающие примеры для Llama 2.

Прочитав эту статью, вы сможете самостоятельно понять, как добавлять обучающие примеры для LLM, не читая их документацию или учебные пособия.

Подушка и партия

Что такое прокладка и почему мы прокладываем?

Давайте возьмем один пример, который мы хотим использовать для тонкой настройки LLM.

example = "You are not a chatbot."

Мы должны превратить этот пример в последовательность токенов. Библиотеки, такие как Transformers, обычно токенизируют, выполнив следующие шаги:

  • Разделите пример на подслова в соответствии с заданным словарем:
example = ["▁You", "▁are", "▁not", "▁a". "▁chat", "bot", "."]
  • Замените слова по их индексу из словаря, чтобы получить последовательность целых чисел:
example = [887, 526, 451, 263, 13563, 7451, 29889]
  • Добавьте в последовательность специальные токены: токен BOS, токен EOS, токен UNK, токен PAD и т. д.
example = [1, 887, 526, 451, 263, 13563, 7451, 29889]

Примечание. В этом примере я использую токенизатор Llama 2. Ниже мы подробно рассмотрим, как это сделать.