Форматирование для настройки инструкций
Модели, настроенные на инструкции (IT), обучаются с помощью специального средства форматирования , которое аннотирует все примеры настройки инструкций дополнительной информацией как во время обучения, так и во время вывода. Форматер имеет две цели:
- Указание ролей в разговоре, например роли системы , пользователя или помощника .
- Обозначение поворотов в разговоре, особенно в многооборотном разговоре.
Ниже мы указываем управляющие токены, используемые Gemma, и варианты их использования. Обратите внимание, что токены управления зарезервированы и специфичны для нашего токенизатора.
- Токен для обозначения очереди пользователя:
user
- Жетон для обозначения поворота модели:
model
- Токен, обозначающий начало хода диалога:
<start_of_turn>
- Токен, обозначающий окончание хода диалога:
<end_of_turn>
Вот пример диалога:
<start_of_turn>user
knock knock<end_of_turn>
<start_of_turn>model
who is there<end_of_turn>
<start_of_turn>user
Gemma<end_of_turn>
<start_of_turn>model
Gemma who?<end_of_turn>
Токен "<end_of_turn>\n"
является разделителем поворотов, а префикс приглашения — "<start_of_turn>model\n"
. Это означает, что если вы хотите задать модели вопрос типа «Что такое правило Крамера?», вам следует вместо этого передать модели следующее:
"<start_of_turn>user
What is Cramer's Rule?<end_of_turn>
<start_of_turn>model"
Обратите внимание: если вы хотите точно настроить базовые предварительно обученные модели Gemma с использованием собственных данных, вы можете использовать любую такую схему для управляющих токенов, если она согласуется между вашими вариантами использования обучения и вывода.
Системные инструкции
Как для контролируемой точной настройки (SFT), так и для обучения с подкреплением на основе обратной связи с человеком (RLHF) модели не обучались с помощью системных инструкций. В результате единственными соответствующими токенами форматирования для Gemma являются <start_of_turn>
, <end_of_turn>
, user
и model
. Например:
<start_of_turn>user
What is Cramer's Rule?<end_of_turn>
<start_of_turn>model
Cramer's Rule is ...<end_of_turn>
Форматирование задач FIM
Варианты CodeGemma 2B и 7B специально настроены для задач заполнения кода.
В частности, они обучены четырем токенам управления форматированием, которые можно использовать для создания подсказок модели для задач кодирования с заполнением посередине (FIM).
Контекст | Токен |
---|---|
Префикс FIM | <|fim_prefix|> |
Суффикс FIM | <|fim_suffix|> |
ФИМ средний | <|fim_middle|> |
Разделитель файлов | <|file_separator|> |
Используйте токены FIM, чтобы определить местоположение курсора и окружающий его контекст, чтобы CodeGemma могла выполнить заполнение кода. Используйте токен разделителя файлов для контекстов с несколькими файлами.
Пример. Создание приглашения FIM
В этом разделе повторно используется пример из краткого руководства по Keras CodeGemma, чтобы показать, как создать приглашение для задач FIM.
Рассмотрим следующий код:
import |⏎ # Line 1
if __name__ == '__main__':⏎ # Line 2
sys.exit(0) # Line 3
|
указывает местоположение курсора, где необходимо завершить код. Обратите внимание, что перед курсором стоит пробел, а в конце строк 1 и 2 имеется возврат каретки.
Префикс тогда,
import
с одним пробелом в конце.
Суффикс:
⏎
if __name__ == '__main__':⏎
sys.exit(0)
с новой строкой в начале.
Подсказка должна быть построена как:
<|fim_prefix|>import <|fim_suffix|>⏎
if __name == '__main__':⏎
sys.exit(0)<|fim_middle|>
Обратите внимание, что:
- Между токенами FIM, префиксом и суффиксом не должно быть лишних пробелов.
- Средний токен FIM должен находиться в конце, чтобы модель могла продолжить заполнение.
- Префикс или суффикс могут быть пустыми в зависимости от того, где в данный момент находится курсор в файле или сколько контекста вы хотите предоставить модели.
Понимание выходных данных модели
Ответ модели для приведенного выше примера будет следующим:
<|fim_prefix|>import <|fim_suffix|>⏎
if __name__ == "__main__":\n sys.exit(0)<|fim_middle|>sys\n<|file_separator|>
Модель повторяет приглашение ввода и предоставляет sys
в качестве завершения кода.
При использовании моделей CodeGemma для задач FIM транслируйте токены ответа и используйте токены FIM или разделители файлов в качестве разделителей, чтобы остановить потоковую передачу и получить итоговое завершение кода.