Донавчання GPT-асистентів за допомогою OpenAI: найдетальніша інструкція від досвідченого Solution Architect, що спеціалізується на трансформаційному потенціалі моделей AI
Останнім часом тема GPT викликає ажіотаж. Рішення на основі GPT можуть виглядати простими в реалізації — зрештою, щоб отримати якісні результати, треба просто надати моделі інструкції. Цього достатньо, щоб справити враження на тих, хто ухвалює рішення. Але насправді ці якісні результати — це ретельно відібрані приклади, а для запуску системи часто необхідне щось більш надійне.
Олександр Книга, Solution Architect у компанії Weblab Technology, який спеціалізується на AI та трансформаційному потенціалі моделей AI на кшталт GPT створив для dev.ua детальну інструкцію з прикладами про те, як правильно навчати ШІ-асистентів за допомогою OpenAI.
ChatSpot і Khan Academy: case study впровадження GPT
Сучасні компанії використовують GPT різними способами, деякі з яких покладаються на відкрите спілкування між GPT і користувачем. Ось кілька прикладів:
ChatSpot. Запит природною мовою (natural language prompt) надходить до API ChatSpot, перетворюється на операції для API HubSpot CRM, API Google Docs тощо, а потім за допомогою генеративної текстової моделі повідомляє, коли дію було виконано (чи не виконано). На основі GPT-4.
Khanmigo. Навчальний бот на основі ШІ, розроблений Khan Academy. Запити користувачів перетворюються на запити з впровадженим контекстом. Система покладається на здатність GPT обробляти у вісім разів більше впровадженого контексту, ніж у попередній версії. На основі GPT-4.
Ми знаємо, що компанії та користувачі готові переходити зі звичного інтерфейсу на запити природною мовою. Однак, щоб гарантувати надійність та ефективність ШІ-моделей на основі GPT на практиці, ми маємо донавчати їх. Це дасть змогу підлаштувати їх до конкретних предметних областей і випадків використання.
Важливо, що GPT-4 пропонує більше можливостей надання контексту для запитів, а також демонструє значно менше галюцинаційних помилок.
Галюцинації ШІ
Галюцинації ШІ — це важлива проблема, яку доводиться вирішувати спеціалістам під час роботи з великими мовними моделями, такими як GPT-4. Галюцинації генерують неправдиву або оманливу інформацію. Це може спричиняти надзвичайно серйозні наслідки в програмах, де точність фактів є критично важливою. У цьому розділі ми детальніше вивчимо технічні аспекти галюцинацій ШІ, а також обговоримо, як мінімізувати їхній вплив.
Для прикладу розглянемо цей егоцентричний тест на фактичну точність, проведений Ноблом Акерсоном (Noble Ackerson). Серед фактів, наданих ШІ, є багато неправдивої інформації:
Галюцинації ШІ виникають насамперед через обмеження, притаманні архітектурі трансформера, а також навчальні дані, які використовуються для великих мовних моделей. Брак когнітивної архітектури, яка уможливлює дедуктивне міркування, робить ці моделі схильними до генерування інформації, яка може здаватися правдоподібною, але насправді не є правильною.
Трансформерна архітектура великих мовних моделей покладається на механізми уваги та уважності до власної інформації, щоб охоплювати різноманітні залежності у вхідних даних. Це дає змогу моделі генерувати зв’язний і релевантний контексту текст, однак не гарантує фактичної точності. Крім того, навчальні дані можуть містити упередження або дезінформацію, які модель може отримати ненавмисно. Це також сприяє галюцинаціям ШІ.
Імовірнісна природа
Одну з причин такої недостатньої надійності можна вбачити в імовірнісній природі GPT. Для контексту давайте розглянемо ймовірнісні структури даних, такі як фільтри Блума. Фільтр Блума — це імовірнісна структура даних, яка використовується для перевірки того, чи входить елемент до певного набору. Вона складається з масиву бітів і кількох хеш-функцій, кожна з яких відображає елемент на один або кілька індексів масиву. Коли елемент вставляється у фільтр, він хешується за допомогою хеш-функцій, а для відповідних бітів масиву встановлюється значення true. Якщо треба дізнатися, чи є елемент у фільтрі, цей елемент аналогічно хешується за допомогою хеш-функцій — і якщо всі відповідні біти в масиві мають значення true, елемент, ймовірно, присутній у фільтрі. Однак якщо будь-який із бітів не має значення true, елемент точно не входить до фільтра. Хибні спрацьовування вбудовані в імовірнісні структури даних за замовчуванням.
Як і фільтр Блума, модель GPT є ймовірнісною. Але замість того, щоб перевіряти приналежність до набору, вона передбачає текст на основі введених запитів. GPT складається з кількох рівнів трансформерів, які виконують складні обчислення для прогнозування початкової послідовності токенів на основі вхідного запиту. Результат, створений GPT, не є детермінованим і може сильно відрізнятися залежно від використовуваного методу вибірки, а також додаткових гіперпараметрів, вибраних під час навчання. Подібно до фільтрів Блума, GPT також може «галюцинувати» і давати результати, які виглядають правдоподібними, але фактично неправильні. Однак цю ймовірність генерування ненадійних результатів можна зменшити, доналаштовуючи модель та надаючи їй високоякісні навчальні дані.
GPT-4 і ризики
Приховані фактичні неточності можуть нашкодити користувачам. Тому дуже важливо, щоб розробники вживали заходів для зменшення ймовірності їх виникнення.
GPT-4 повільніша за попередні моделі. Проте GPT-4 набагато безпечніша завдяки різноманітним заходам, застосованим під час навчання, включаючи залучення експертів, покращення безпеки моделі, а також додатковий моніторинг і контроль. Ці чинники значно підвищили безпечність GPT-4 порівняно з GPT-3.5: тенденція моделі відповідати на запити щодо забороненого вмісту зменшилася на 82%, а тенденція моделі відповідати на запитання щодо чутливого контенту згідно з внутрішніми політиками зросла на 29%.
Усунення галюцинацій
Навіть із наявними ризиками повністю ігнорувати GPT складно. Для людей і API модель GPT стала новим комунікаційним інструментом, який зменшує потребу в користувацькому інтерфейсі. Наша робота як інженерів полягає в тому, щоб вирішувати проблеми, які виникають у результаті його використання, за допомогою наявних у нас ресурсів. І є кілька способів це зробити.
Удосконалення запитів
Кращі запити можуть підвищити ефективність моделі. Вони призводять до задовільних результатів приблизно в 50–65% випадків, але навряд чи більше.
Згідно з дослідженням Large Language Models are Zero-Shot Reasoners (в якому описуються лише можливості моделей завершення тексту (text completion models), а не моделей чату чи інструкцій), покращення запитів значно покращує ефективність GPT у завданнях на міркування. Дослідження продемонструвало, що додавання простої фрази на кшталт Let’s think step by step («Давай подумаємо покроково») перед кожною відповіддю підвищує здатність GPT вирішувати навіть ті задачі, з якими вона стикається вперше (zero-shot learning). Отже, інженерам не потрібно створювати такі завдання вручну на етапі навчання.
Навчання на кількох прикладах (few-shot learning) — ще одна потужна техніка оперативного проектування, яка може значно покращити продуктивність мовних моделей (як-от GPT-4) у нових завданнях, навіть із обмеженими навчальними даними. У простих випадках це хороша альтернатива fine-tuning. У цьому підході користувач використовує структуровані приклади, щоб показати, якого результату очікує, а потім залишає моделі вільний простір для заповнення.
У цій статті розповідається про те, які задачі ChatGPT ще не вміє вирішувати.
Інʼєкція контексту
Інʼєкція контексту — це техніка, що усуває галюцинації штучного інтелекту та підвищує точність згенерованого тексту в певних предметних областях. У цьому підході користувач впроваджує контекст у свій запит, завдяки чому модель отримує точнішу інформацію. Це дає їй змогу генерувати точніші та релевантніші відповіді.
Цей метод є швидшим і дешевшим за інші, але також вимагає знань і досвіду з боку користувача. З огляду на це, він може бути особливо корисним у сферах, де точність і релевантність створеного тексту мають вирішальне значення. Цей підхід уже застосовується в таких корпоративних сферах, як обслуговування клієнтів і медична діагностика.
Візьмемо чат-бот для обслуговування клієнтів. У цьому випадку інʼєкція контексту може передбачати надання моделі відповідних деталей щодо облікового запису клієнта, попередніх взаємодій та будь-яких відомих проблем. Доданий контекст дозволяє моделі генерувати більш персоналізовані та точні відповіді, так покращуючи загальну якість взаємодії.
Цей метод використовується, наприклад, у GitHub Copilot і GitHub Copilot X. Аналізуючи контекст написаного коду разом із будь-якими коментарями чи документацією, ці асистенти можуть зрозуміти заплановану функціональність і обмеження коду.
Інʼєкція контексту є найнадійнішим способом зменшення галюцинацій, доступним на сьогоднішній день, однак у цьому підході існує ключове обмеження щодо розмірів запитів.
Fine-tuning
Fine-tuning — ще один метод, який може значно підвищити точність і надійність GPT. Це процес надання додаткових навчальних даних, щоб модель адаптувалася до конкретного завдання чи предметної області та покращувала точність і релевантність згенерованого тексту. Приблизно те саме вимагається від будь-якої іншої нейронної мережі глибокого навчання.
Процес вимагає, щоб дані, пов’язані з предметною областю, безперервно надходили в попередньо навчену модель, доки вона не навчиться генерувати більш актуальний і точний текст для цільового завдання.
Навчання з підкріпленням на основі зворотного зв’язку від людини (RLHF)
Як згадувалося вище, хитрість полягає в тому, щоб додати в запит «like I am five» або подібну фразу. Це чудовий спосіб спростити пояснення.
RLHF — це потужний підхід, який можна застосувати для підвищення ефективності й безпечності моделей на основі GPT. Модель налаштована за допомогою зворотного зв’язку, створеного людьми, що допомагає їй навчатися на реальних прикладах і взаємодіях з користувачами. Цей процес включає збір даних відповідей, згенерованих моделлю, разом із рейтинговими оцінками якості або порівняннями, які використовуються для оптимізації параметрів моделі.
RLHF успішно використовується в низці реальних програм, включаючи чат-ботів і ШІ-асистентів, щоб покращити якість відповідей, а також зменшити кількість галюцинацій. Включаючи людський зворотний зв’язок у процес навчання, RLHF навчає модель генерувати більш точні, контекстуально релевантні та безпечні відповіді, що в кінцевому підсумку призводить до набагато кращого досвіду користувача та підвищення надійності. Важливо те, що цей підхід дозволяє розробникам використовувати потужність моделей на основі GPT, а також усуває проблеми, пов’язані з генеруванням неправдивої або оманливої інформації.
Знаючи предметну область застосування, ми можемо навчити модель реагувати так, як нам потрібно. Ми можемо навчити її відповідати «Я не знаю» або ігнорувати певні теми. OpenAI використовує RLGH у ранніх версіях своїх моделей, щоб підготувати їх до випуску. Ось кілька прикладів:
Розробка моделі
Давайте розглянемо практичний приклад, побудувавши процес fine-tuning. Ми використовуватимемо визначений набір даних, таким чином навчаючи модель відповідати на запити, що стосуються конкретної предметної області. Розгляньте цю схему:
Процес включає такі компоненти:
Початковий набір даних: колекція навчальних файлів, що стосуються відповідної предметної області.
Генератор запитань і відповідей: рішення на основі GPT-4, яке використовує інʼєкцію контексту для генерації запитань і відповідей із початкового набору даних.
Зразки запитань і відповідей: навчальні дані, що використовуються для процесу fine-tuning.
Fine-tuning: модель завершення тексту GPT-3 налаштовується на основі набору даних.
Запитання та відповіді для порівняння: набір запитань і відповідей, що використовується для оцінки ефективності моделі.
Порівняльний аналіз: етап fine-tuning, який вводить запитання з набору контрольних запитань і відповідей і оцінює достовірність згенерованих відповідей.
Ми продовжуємо використовувати модель завершення тексту GPT-3, оскільки GPT-4 наразі не підтримує процес fine-tuning.
Початковий набір даних
Для гарантїї того, що модель GPT не знайома із використовуваним набором даних, бажано спиратися на дані, що стосуються подій після вересня 2021 року (кінцевої дати отримання даних моделлю). Наприклад, я часто використовую Next.js для створення веб-застосунків, а Vercel випустили Next.js версії 13 у 2022 році. Давайте запитаємо ChatGPT про дату випуску Next.js 13 і подивимося, що буде:
Чудово. Моя мета полягає в тому, щоб нова модель знала більше про Next.js 13 і про те, як з ним працювати, ніж поточна. Про те, як я підготував набір даних на основі Next.js 13, ви можете прочитати тут.
Генератор зразків
У своїх відповідях ми хочемо моделювати відповіді на запитання (запити) у відкритому форматі. Наразі лише моделі завершення тексту підтримують процес fine-tuning. Отже, нам доведеться навчити моделі завершення тексту відповідати на наші запитання. Щоб забезпечити належні результати, ми повинні спочатку перетворити набір даних на набір запитань і відповідей. Ми можемо зробити це за допомогою моделі ChatGPT. Ось приклад коду:
Наша мета — створити принаймні 100 пар запитання-відповідь для кожного навчального файлу.
Вихідні дані слід зберегти в документі JSONL. Важливо завершувати кожен запит однаково. Ми будемо використовувати послідовність \n\n###\n\n у якості роздільника. У результаті ми отримали набір даних, який міститься у цьому файлі: fine_tuning_dataset.jsonl.
Упровадження хибних запитань
Ми хочемо, щоб модель чесно відповідала «Я не знаю» на будь-які запитання, не пов’язані з розробкою програмного забезпечення та Next.js. Щоб досягти цього, ми можемо інтегрувати класифікатор питань Next.js. Він перевіритиме, пов’язане запитання з Next.js чи ні. Щоб отримати простішу архітектуру, можна додати додаткові навчальні дані до процесу fine-tuning.
Ми також не хочемо, щоб наша система відповідала на безглузді запитання, навіть якщо вони стосуються Next.js. Отже, на запитання типу «Коли фреймворк Next.js досягне 1 мільярда користувачів?» модель теж має відповідати «Я не знаю».
Зразок коду:
Я створив 100 запитань і відповідей, аби показати моделі, що вона має відповідати лише на пов’язані з Next.js запитання і що цілком нормально відповідати «Я не знаю». Це повинно зменшити кількість галюцинацій. Отриманий набір навчальних даних наведено у файлі fine tuning dataset.jsonl.
Fine-tuning
Нарешті, після створення навчального набору даних (щоб дізнатися більше про цей процес, перегляньте офіційний посібник від OpenAI), ми готові виконувати fine-tuning. На жаль, наразі існує не так багато моделей, з якими це можна робити. Ви можете переглянути їх усі, витягнувши список усіх моделей «openai api models.list» і відшукавши моделі зі значенням «allow_fine_tuning»: true,».
У процесі fine-tuning можна погратися зі швидкістю навчання чи іншими параметрами, але мій досвід показує, що це не дуже впливає на результат. Навчання набору даних і так недешеве, а використання додаткових параметрів робить його ще дорожчим.
Тривалість процесу fine-tuning залежить від моделі (davinci, ada тощо). На нашому наборі даних із 1511 випадків і 907 КБ це зайняло близько години.
Порівняльний аналіз
Пам’ятайте, що ми працюємо з моделлю завершення тексту, а не з моделлю чату чи інструкцій. І наша модель завершення тексту налаштована реагувати у форматі відповіді. Крім того, наша модель очікує, що запит завершуватиметься послідовністю «?\n\n###\n\n». Якщо цього не дотримуватися, результат може бути неочікуваним (але, швидше за все, модель спробує згенерувати певний вміст, щоб завершити запит потрібним чином).
Давайте спробуємо оцінити, як поводитиметься модель з наведеними нижче наборами запитань.
Ми очікуємо, що модель дасть належні відповіді на основі наданого вмісту:
Моделювання з температурою 0.3
Правильні відповіді:
Частково правильні відповіді:
Цей код повідомляє Next.js, що під час відтворення цього файлового компонента потрібно використовувати лише клієнтські компоненти, а не компоненти сервера.
Я ставитиму 1 за правильну відповідь, 0 за частково правильну відповідь і -2 за неправильну відповідь.
Моделювання із температурою 0.7
Правильні відповіді:
Частково правильна відповідь:
Неправильна відповідь:
Ви могли помітити, що модель все ще може галюцинувати при високих температурах. Подивіться на відповідь «Next.js 13 було випущено в листопаді 2020 року».
Після аналізу двох різних температурних циклів стає зрозуміло: якщо ми хочемо, щоб асистент був точнішим, нам потрібно знизити температуру. Тому ми використовуватимемо температуру 0.3 для всіх наступних тестів і збережемо оцінку відстеження 10/12. Також рекомендується встановити температуру на 0.3, щоб зробити результати більш стабільними та отримати можливість відтворювати вхідні дані.
Набір 2. Нерелевантні запитання
Ми навчили нашу модель відповідати лише на технічні запитання щодо JavaScript, Next.js і React.
Правильні відповіді:
Частково правильні відповіді:
Неправильна відповідь:
npm run generate — це генератор випадкового числа в діапазоні від 1 до 10.
Здебільшого модель працює добре, але іноді галюцинує. Оцінка 4/10. Тут результат набагато гірший, ніж із правильними запитаннями.
Набір 3. Неправильні запити
Ми навчили модель відповідати на запитання. Але що станеться, якщо ввести щось безглузде? Зараз поглянемо.
Кінцевий рахунок -11/14, загалом 0/14. Коли ми неправильно формулюємо запитання, ця модель абсолютно жахлива.
OpenAI Evals
Компанія OpenAI створила OpenAI Evals — програмну структуру з відкритим вихідним кодом, яка полегшує створення та виконання тестів для оцінки моделей і аналізу їх ефективності за зразком. OpenAI використовує Evals для керування розробкою своїх моделей шляхом виявлення слабких місць і запобігання регресіям. У свою чергу, ми можемо використовувати Evals для моніторингу ефективності версій моделі та розвитку інтеграцій продуктів.
OpenAI Evals працює не тільки з моделями чату, але оскільки саме на таких моделях зосереджуються OpenAI, набір даних для оцінки потрібно готувати у форматі чату. Для керування параметрами моделі можна скористатися --modelspec_extra_options в інструменті CLI oaieval. Спробуйте встановити температуру на 0, щоб отримати передбачувані результати.
Подальші етапи fine-tuning
В основі добре функціонуючої та надійної моделі завжди лежать дані. Само собою зрозуміло, що наша модель QA-бота для фреймворка Next.js 13 ще не готова до випуску. Нам потрібно збільшити набір даних і краще навчити модель відповідати на нерелавантні запитання, знову ж таки, використовуючи більше зразків. Ми повинні створити реєстр Eval і стежити за тим, наскільки добре працює наша модель. Крім того, ми також можемо навчити нашу модель обробляти вхідні дані у форматі, відмінному від запитань. Якщо ми будемо готувати її до випуску, наш набір даних в ідеалі також повинен мати кілька репозиторіїв зразків коду. Ця діяльність займає близько 60% усього процесу fine-tuning.
Крім того, нам може знадобитися більше RLHF, щоб навчити модель належно відповідати на певні запитання.
Перевага моделей із fine-tuning полягає в тому, що їх можна постійно вдосконалювати. Хоча слід зазначити, що fine-tuning може вплинути на результати, налаштовані раніше, тому для нього завжди має бути вагома причина (що, однак, зменшує вартість і тривалість навчання).
Нарешті, ми повинні пам’ятати, що працюємо з уже навченою моделлю, а можливості донавчання такої моделі відносно обмежені. Якщо наша предметна область не дуже знайома базовій моделі GPT, бажано впроваджувати контекст у певній формі, оскільки метод fine-tuning може бути недостатнім або навіть неефективним.
Висновок
Fine-tuning чудово підходить для відносно простих завдань класифікації.
Спочатку спробуйте використовувати менші моделі, як-от ada. Вони виконують запити швидше, більш стабільні, швидше навчаються та дешевші.
Не будуйте величезні моделі. Якщо ваш набір даних «завеликий» і його можна розділити на частини, зробіть це і навчайте модель на менших наборах.
УЧАСТЬ В АЗАРТНИХ ІГРАХ МОЖЕ ВИКЛИКАТИ ІГРОВУ ЗАЛЕЖНІСТЬ. ДОТРИМУЙТЕСЯ ПРАВИЛ (ПРИНЦИПІВ) ВІДПОВІДАЛЬНОЇ ГРИ.
Ліцензія видана ТОВ "СЛОТС Ю.ЕЙ." на провадження діяльності з організації та проведення азартних ігор казино у мережі Інтернет від 15.09.23 (рішення КРАІЛ №245 від 31.08.2023); ТОВ "СЛОТС Ю.ЕЙ." – на провадження діяльності з організації та проведення азартних ігор казино у мережі Інтернет від 26.04.2021 (рішення КРАІЛ №150 від 12.04.2021); ТОВ «СПЕЙСИКС» – на провадження діяльності з організації та проведення азартних ігор казино у мережі Інтернет від 08.02.2021 (рішення КРАІЛ №34 від 02.02.2021); ТОВ «ГЕЙМДЕВ» – на провадження діяльності з організації та проведення азартних ігор казино у мережі Інтернет від 16.02.2021 (рішення № 47 від 10.02.2021).
«Чи є у мене талант, якщо комп’ютер може імітувати мене?». Штучний інтелект пише книги авторам Amazon Kindle. The Verge поспілкувався з авторами та виявив багато цікавого
Письменники-романісти використовують штучний інтелект для створення своїх творів. Видання про технології The Verge поспілкувалося з письменницею Дженніфер Лепп, яка випускає нову книгу кожні дев’ять тижнів, й дізналося про те, як працює штучний інтелект для написання романів. Наводимо адаптований переклад статті.
Хочете повідомити важливу новину? Пишіть у Telegram-бот
Головні події та корисні посилання в нашому Telegram-каналі