`

СПЕЦІАЛЬНІ
ПАРТНЕРИ
ПРОЕКТУ

Чи використовує ваша компанія ChatGPT в роботі?

BEST CIO

Определение наиболее профессиональных ИТ-управленцев, лидеров и экспертов в своих отраслях

Человек года

Кто внес наибольший вклад в развитие украинского ИТ-рынка.

Продукт года

Награды «Продукт года» еженедельника «Компьютерное обозрение» за наиболее выдающиеся ИТ-товары

 

Sergey Petrenko

Як AI пише мені тексти

+22
голоса

Одна з думок щодо AI полягає в тому, що штучний інтелект так добре вміє писати тексти, що його можна натренувати в потрібному стилі – і він буде писати за вас ну точно, як ви. Я б назвав це популярною хибною думкою – хоча AI у вигляді GPT-моделей справді добре генерує тексти, все ж таки натренувати його під чийсь специфічний стиль не так вже й просто.

Однак я спробував. І хочу розповісти, що саме вийшло.

Багато років я регулярно пишу чимало текстів. Це були пости в блог, тексти для сайтів, останніми роками – пости в телеграм-каналі. Ідея перекласти генерацію текстів на комп’ютер мене, звісно, зацікавила давно, але довго залишалася радше теоретичною – цікаво було б зробити, але практично це рішення без проблеми. Мені не так вже й складно писати тексти, та й мої коментарі в телеграм-каналі складно реалізувати тренуванням моделі.

Однак з часом проблема (для вирішення) почала вимальовуватися. Річ у тім, що переважна більшість вихідних новин для телеграм-каналу існує англійською. Я вільно (і навіть швидко) читаю нею, але кілька разів стикався з тим, що упускаю важливі деталі, а то й не вловлюю суть новини під час такого побіжного сканування. Це призводить до зайвих витрат часу – перечитати, для вірності якісь фрагменти перекласти перекладачем, перевірити ще раз за іншими джерелами – загалом, це стає роботою. Я спробував скористатися AI якраз для перевірки – беру текст новини, текст написаного коментаря, віддаю в AI (ChatGPT або Claude) з проханням оцінити відповідність коментаря новині. І, хоча результат мені сподобався, кількість механічних рухів остаточно підвела до думки, що ось якраз це треба починати автоматизувати.

Перевірка гіпотези

Перш ніж займатися розробкою якогось автоматизованого рішення, я вирішив зайнятися перевіркою гіпотези, що система взагалі здатна навчитися писати в моєму стилі.

Перш ніж продовжувати, я хочу зробити невеликий disclaimer. Усе, що я описую, не є промисловим рішенням, і ви навряд чи зможете підійти для вирішення реальних завдань. Крім того, чимала частина мого інтересу до розв'язання проблем має дослідницький характер. Так само, коли AI пише мені той чи інший код, я часто обмежуюся простим копіюванням коду в проєкт і копіюванням помилки в чат – мені корисніше розібратися, як він розбирається з помилкою і що в підсумку виходить, ніж швидко розв'язати проблему.

Але я не буду тут описувати те, як програмує AI – будемо розв'язувати проблему вищого рівня.

Отже, я хочу якимось чином натренувати модель, щоб вона писала тексти в моєму стилі. Існує кілька різних підходів для цього:

  • fine-tune вихідної моделі. У цьому разі моделі дають датасет, на підставі якого модель донавчається, змінюючи вихідні ваги, а кінцева модель має знання для вирішення специфічно ваших завдань;
  • використання адаптерів – невеликих модулів, які навчаються під ваше завдання, а надалі, отримавши запит, перезадають його в оригінальну модель, отриману відповідь модифікують відповідно до своєї логіки, і повертають моделі;
  • few-shots learning, коли моделі разом із запитом передається кілька прикладів розв'язання аналогічних завдань.

Адаптери я відхилив відразу – мені хотілося використовувати моделі OpenAI або Anthropic, а адаптери вимагають доступу до самої моделі. Fine-Tune доступна для OpenAI – можна натренувати, наприклад, gpt-4o. Anthropic не дозволяє використовувати fine-tune, але наполегливо рекомендує використовувати few-shots learning. Тому природно було спробувати два найпростіші для реалізації варіанти та порівняти результат.

З few shots learning все було просто – десяток пар «Текст новини – коментар до неї» можна набрати вручну, запит скласти нескладно, тим більше, що в Anthropic є навіть оптимізатор для них.

З fine tune виникла проблема. Річ у тім, що моделі потрібен датасет у розмірі кількох сотень прикладів. Якщо з коментарями у мене все було гаразд – архів телеграм-каналу становить близько 5 тисяч коментарів, – то з текстами новин складніше, вони знаходяться в інтернеті та це ще пів біди. Головна полягає в тому, що вони часто перебувають за пейволом, і їх неможливо дістати через публічні сервіси або якимось локальним роботом. Тож у проєкті з'явився підпроєкт – збір навчальної вибірки.

Ось тут настав час підключити AI – ми почали писати робота, який з архіву каналу візьме кілька сотень URL-адрес джерел, сходить моїм настільним браузером за цими адресами, виділить контент новини та збереже його в базу. Не можу сказати, що це було просто – наприклад, спочатку AI написав робота, який запустив Chrome у headless-режимі, скинув усі куки – зрозуміло, що скрізь він отримав або повідомлення про підписку, або капчу, оскільки в такому режимі Chrome повідомляє, що ним керує робот. Після виправлення всіх таких проблем рішення вийшло не дуже стабільним, але за вихідні робот все ж набрав близько 700 проіндексованих сторінок. Ще один, написаний AI, скрипт підготував навчальну вибірку і я відправив результат в OpenAI.

Скажу відразу – результат був сумнівним. Навіть технічні параметри – training loss і validation loss – показували, що модель або не збалансована, або перенавчається. Коли ж я спробував дати їй новину для коментаря, результат виглядав зовсім не моїм, більше нагадуючи якогось хвацького ютубера.

Результат роботи Claude 3.5 з десятком прикладів був набагато якіснішим. Можливо, fine-tune з кількома тисячами прикладів дав би результат трохи кращий, але проблема збору вибірки мене сильно бентежила. Крім того, виникала б і проблема донавчання при додаванні нових прикладів.

Таким чином, було зрозуміло – вибираємо Claude, даємо йому приклади, отримуємо відповідь. Залишається це автоматизувати.

Автоматизуємо процес

Отже, процес вручну спочатку виглядав так – я читаю новину, хочу написати про неї, переходжу в телеграм-клієнт, пишу коментар, додаю посилання, натискаю «відправити». Додаємо використання AI й отримуємо досить складну послідовність:

  1. Я читаю текст новини в браузері. Мені треба написати до неї коментар;
  2. Я копіюю текст новини як промпт у Claude 3.5 Sonnet, де також задано кілька прикладів парами «news/comment», і прошу написати коментар до новини;
  3. Отриманий коментар я модифікую на свій розсуд;
  4. Готовий текст коментаря і вихідний текст новини я надсилаю в ChatGPT для оцінки відповідності коментаря і новини. (Це потрібно для перевірки, що я не викинув нічого важливого і що цього ж не зробив Claude);
  5. Залежно від результату я або редагую коментар, або відправляю його в телеграм-канал у форматі «текст коментаря посилання».

Claude досить швидко створив React-застосунок, який давав змогу ввести текст новини та ввести коментар. І ми почали нарощувати функціональність. Надіслати текст новини разом із прикладами в API Claude виявилося найпростішим. Але ж я хотів автоматизувати – тобто треба було автоматично витягти текст новини.

Так з'явилося розширення для браузера, яке витягувало текст новини та відправляло його в React-застосунок. Це стало окремим проєктом, де в підсумку ми прийшли до використання бібліотеки Readablity і прописування окремої обробки для деяких сайтів.

Потім ми повернулися до React-застосунку. Він уже вмів отримати текст новини та URL, відправити приклади та запит до Claude, отримати коментар. На наступному кроці ми додали запит до GPT-4o для оцінки результату.

Зовсім непомітно, мало не за своєю ініціативою Claude, який писав код, додав функціональність управління прикладами. Щоправда, тут ми трохи застрягли – додаток регулярно відмовлявся видаляти приклади під час додавання нових. Це виглядало нераціональним – насправді, приблизно після 12-15 прикладів ефективність збільшення кількості прикладів різко падає, а передавати 20 прикладів коштує додаткових грошей. Але через якийсь час ми це побороли.

Покращувати можна нескінченно – я паралельно запропонував v0.dev намалювати інтерфейс для застосунку, і вийшло модно та сучасно. Виклавши застосунок в інтернет – щоб не залежати від локально запущеного застосунку, – логічним було додати авторизацію. Додати надсилання коментаря прямо в телеграм-канал було просто частиною початкового задуму, а ось копіювання його в буфер обміну я додав, щоб негайно постити нотатку в вебдзеркало каналу.

Підсумок

Загалом, після приблизно місяця використання з періодичним виправленням багів і незручностей процес виглядає так:

  • я читаю новину на сайті й вирішую написати коментар;
  • натискаю кнопку на панелі браузера, вона відкриває нову вкладку з додатком, де у вихідному табі відкрито вихідний текст новини;
  • після натискання кнопки «Generate comment» минає певний час і в іншому табі з'являється заготовка коментаря;
  • я правлю коментар – зазвичай видаляю частину дрібних деталей і додаю пару фраз реально свого коментаря;
  • після натискання кнопки «Evaluate comment» у третьому табі з'являється оцінка відповідності коментаря новині. Спочатку GPT помічав, що автор не витримує суворого тону, коли я вказав, що автору властивий іронічний підхід, він став скаржитися, що в коментарях недостатньо іронії;
  • якщо мені все подобається, я натискаю кнопку «Send to Telegram» і копіюю текст у буфер обміну для надсилання у вебдзеркало;
  • якщо мені здається, що коментар характерний для мого стилю, я натискаю кнопку «Save example» і застосунок зберігає поточну пару до файлу прикладів. Їх можна переглянути в четвертому, останньому, табі, видалити якийсь із них, якщо хочеться.

Є ще один спосіб доопрацювання моделі – дати їй можливість пошукати за історією постів, щоб писати коментар не тільки з огляду на текст новини та приклади стилю, а й з огляду на попередні коментарі на схожу тему або зі згадкою компаній чи особистостей. Моделі це вміють – викликати функції, зокрема пошук, і використовувати результат. Пошук ми вже написали, залишається тільки під'єднати його до застосунку. Що цікаво – AI під час теоретичного обговорення проявляє чималий ентузіазм і запевняє, що якість коментарів помітно підвищиться.

Але мені поки й так добре.

Як AI пише мені тексти

Комп’ютерний розум: генеративний штучний інтелект у рішеннях AWS

+22
голоса

Напечатать Отправить другу

Читайте также

Дякуємо що поділилися власним досвідом!

З.І. Замість react я порекомендував би використовувати svelte. Я розумію що у всіх смаки різні але, можливо, вам сподобається ;-)

 

Ukraine

 

  •  Home  •  Ринок  •  IТ-директор  •  CloudComputing  •  Hard  •  Soft  •  Мережі  •  Безпека  •  Наука  •  IoT