7.2. Fine-Tuning to follow instructions
Мета цього розділу - показати, як налаштувати вже попередньо навчану модель для виконання інструкцій, а не просто для генерації тексту, наприклад, для відповіді на завдання як чат-бот.
Набір даних
Щоб налаштувати LLM для виконання інструкцій, необхідно мати набір даних з інструкціями та відповідями для налаштування LLM. Існують різні формати для навчання LLM виконувати інструкції, наприклад:
Приклад стилю запиту Apply Alpaca:
Phi-3 Приклад стилю запиту:
Навчання LLM з такими наборами даних замість просто сирого тексту допомагає LLM зрозуміти, що він повинен давати конкретні відповіді на запитання, які він отримує.
Отже, однією з перших речей, які потрібно зробити з набором даних, що містить запити та відповіді, є моделювання цих даних у бажаному форматі запиту, наприклад:
Тоді, як завжди, потрібно розділити набір даних на набори для навчання, валідації та тестування.
Пакетування та завантажувачі даних
Тоді потрібно пакетувати всі вхідні дані та очікувані виходи для навчання. Для цього потрібно:
Токенізувати тексти
Доповнити всі зразки до однакової довжини (зазвичай довжина буде такою ж, як довжина контексту, використаного для попереднього навчання LLM)
Створити очікувані токени, зсувши вхід на 1 у кастомній функції об'єднання
Замінити деякі токени доповнення на -100, щоб виключити їх з втрат навчання: Після першого токена
endoftext
замінити всі інші токениendoftext
на -100 (оскільки використанняcross_entropy(...,ignore_index=-100)
означає, що він ігноруватиме цілі з -100)[Опціонально] Замаскувати за допомогою -100 також всі токени, що належать до запитання, щоб LLM навчався лише генерувати відповідь. У стилі Apply Alpaca це означатиме замаскувати все до
### Response:
З цим створеним, час створити завантажувачі даних для кожного набору даних (навчання, валідація та тест).
Завантаження попередньо навченої LLM та тонка настройка та перевірка втрат
Потрібно завантажити попередньо навчений LLM, щоб його тонко налаштувати. Це вже обговорювалося на інших сторінках. Тоді можна використовувати раніше використану функцію навчання для тонкої настройки LLM.
Під час навчання також можна спостерігати, як змінюються втрати навчання та втрати валідації протягом епох, щоб побачити, чи зменшуються втрати і чи відбувається перенавчання. Пам'ятайте, що перенавчання відбувається, коли втрати навчання зменшуються, але втрати валідації не зменшуються або навіть збільшуються. Щоб уникнути цього, найпростіше - зупинити навчання на епосі, коли починається ця поведінка.
Якість відповіді
Оскільки це не тонка настройка класифікації, де можна більше довіряти змінам втрат, також важливо перевірити якість відповідей у тестовому наборі. Тому рекомендується зібрати згенеровані відповіді з усіх тестових наборів і перевірити їхню якість вручну, щоб побачити, чи є неправильні відповіді (зауважте, що LLM може правильно створити формат і синтаксис речення відповіді, але дати абсолютно неправильну відповідь. Зміна втрат не відобразить цю поведінку). Зверніть увагу, що також можна провести цей огляд, передавши згенеровані відповіді та очікувані відповіді іншим LLM і попросивши їх оцінити відповіді.
Інші тести, які можна провести для перевірки якості відповідей:
Вимірювання масового багатозадачного мовного розуміння (MMLU): MMLU оцінює знання моделі та здатності до розв'язання проблем у 57 предметах, включаючи гуманітарні науки, науки та інше. Він використовує питання з вибором для оцінки розуміння на різних рівнях складності, від початкового до професійного.
LMSYS Chatbot Arena: Ця платформа дозволяє користувачам порівнювати відповіді різних чат-ботів поруч. Користувачі вводять запит, і кілька чат-ботів генерують відповіді, які можна безпосередньо порівняти.
AlpacaEval: AlpacaEval - це автоматизована система оцінювання, де просунута LLM, така як GPT-4, оцінює відповіді інших моделей на різні запити.
Оцінка загального мовного розуміння (GLUE): GLUE - це колекція з дев'яти завдань з розуміння природної мови, включаючи аналіз настроїв, текстуальне наслідок і відповіді на запитання.
SuperGLUE: Спираючись на GLUE, SuperGLUE включає більш складні завдання, які важко виконати для сучасних моделей.
Бенчмарк за межами гри імітації (BIG-bench): BIG-bench - це масштабний бенчмарк з понад 200 завданнями, які тестують здібності моделі в таких областях, як міркування, переклад і відповіді на запитання.
Голістична оцінка мовних моделей (HELM): HELM забезпечує всебічну оцінку за різними метриками, такими як точність, стійкість і справедливість.
OpenAI Evals: Відкритий фреймворк оцінювання від OpenAI, який дозволяє тестувати AI моделі на кастомних і стандартизованих завданнях.
HumanEval: Колекція програмних задач, що використовуються для оцінки здібностей генерації коду мовними моделями.
Набір даних для відповіді на запитання Стенфордського університету (SQuAD): SQuAD складається з питань про статті з Вікіпедії, де моделі повинні зрозуміти текст, щоб відповісти точно.
TriviaQA: Масштабний набір даних з питань та відповідей, а також документів-доказів.
і багато інших
Код для тонкої настройки відповідно до інструкцій
Ви можете знайти приклад коду для виконання цієї тонкої настройки за адресою https://github.com/rasbt/LLMs-from-scratch/blob/main/ch07/01_main-chapter-code/gpt_instruction_finetuning.py
Посилання
Last updated