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