Як створити власну систему покоління тексту

Як створити власну систему покоління тексту

Навряд чи день проходить, коли немає історії про фальшиві новини. Вона нагадує мені цитату з улюбленого радіостанції з моєї молоді: «Якщо вам не подобаються новини, вийдіть і створіть свої власні.» Модель мови OpenAI, версія параметра GPT-2 - 1,5 млрд. Доларів, достатньо близько, щоб група вирішила, що це занадто небезпечно публічно, принаймні зараз. Проте OpenAI випустила дві менші версії моделі, а також інструменти для їх тонкого налаштування на ваш власний текст. Таким чином, без надмірних зусиль і використання значно меншого часу графічного процесора, ніж потрібно для підготовки з нуля, можна створити налаштовану версію GPT-2, яка зможе генерувати текст у стилі, який ви його надаєте, або навіть починати відповідати на запитання, подібні до тих, з якими ви навчаєтеся.

Що робить GPT-2 Special

GPT-2 (генеративний попередньо навчений трансформатор версія 2) заснований на версії дуже потужної нейронної мережі на основі уваги Transformer. Те, що отримали від дослідників OpenAI настільки схвильовані, виявили, що він може вирішити ряд мовних завдань, не будучи безпосередньо навченим на них. Одразу навчившись масовим корпусом даних Reddit і отримавши належні підказки, це зробило прохідну роботу, відповідаючи на питання та перекладаючи мови. Це, звичайно, не щось подібне до Уотсона, наскільки це семантичне знання, але цей вид без нагляду є особливо захоплюючим, оскільки він усуває більшу частину часу та витрат, необхідних для маркування даних для навчання під наглядом.

Огляд роботи з GPT-2

Для такого потужного інструменту процес роботи з GPT-2, на щастя, досить простий, до тих пір, поки ви принаймні знайомі з Tensorflow. Більшість підручників, які я знайшла, також покладаються на Python, тому мати принаймні базові знання з програмування на Python або подібній мові дуже корисні. В даний час OpenAI випустила дві попередньо підготовлені версії GPT-2. Один (117M) має 117 мільйонів параметрів, а інший (345M) має 345 мільйонів. Як і слід було очікувати, більша версія вимагає більше пам'яті GPU і займає більше часу. Ви можете тренуватися або на вашому процесорі, але це буде дуже повільно.

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

Робота з GPT-2 на вашому локальному комп'ютері

Є цілий ряд посібників з цього питання, але моїм улюбленим є Макс Вульф. Насправді, до випуску OpenAI, я працював зі своїм текстовим RNN, з якого він запозичив для своєї роботи GPT-2. Він надав повний пакет на GitHub для завантаження, налаштування та запуску моделі на основі GPT-2. Ви можете навіть зачепити це безпосередньо як пакет з PyPl. Програма readme проходить через весь процес, з деякими пропозиціями про те, як налаштувати різні параметри. Якщо ви маєте масовий GPU під рукою, це чудовий підхід, але, оскільки модель 345M потребує більшої частини графічного процесора 16 Гб для навчання або налаштування, вам може знадобитися звернутися до графічного GPU.

Робота з GPT-2 безкоштовно за допомогою програми Colab Google

Як створити власну систему покоління тексту

Отримання даних для вашого проекту

Тепер, коли потужні мовні моделі були опубліковані в Інтернеті, і навчальні посібники збагачуються, як їх використовувати, найважча частина вашого проекту може створювати набір даних, який ви хочете використовувати для налаштування. Якщо ви хочете відтворити експерименти інших, створивши Шекспіра або написавши діалогове вікно «Зоряний шлях», ви можете просто зачепити той, що є в мережі. У моєму випадку, я хотів би побачити, як будуть робити ці моделі, коли їх запитують генерувати статті, подібні до тих, які знайдені на wfoojjaec. Я мав доступ до списку понад 12 000 статей за останні 10 років. Тому мені вдалося об'єднати їх у текстовий файл і використовувати його як основу для точного налаштування.

Якщо у вас є інші амбіції, які включають імітацію веб-сайту, скраппінг, безумовно, є альтернативою. Є деякі складні послуги, такі як ParseHub, але вони обмежені, якщо ви не платите за комерційний план. Я вважаю, що веб-розширення Chrome Webscraper.io є достатньо гнучким для багатьох програм, і це швидко і безкоштовно. Одна велика попереджувальна записка - звернути увагу на Загальні положення та умови для будь-якого веб-сайту, на який ви думаєте, а також на будь-які проблеми з авторським правом. Якщо поглянути на результати різних мовних моделей, вони, звичайно, не навчені не плагіатувати.

Отже, чи може це зробити журналістика?

Після того, як я отримав свій корпус з 12 000 статей, я почав, намагаючись навчити спрощений GPT-2 на моєму робочому столі Nvidia 1080 GPU. На жаль, 8 Гб оперативної пам'яті GPU не було достатньо. Тому я перейшов на навчання моделі 117M на моєму 4-ядерному i7. Це не було жахливо страшним, але потрібно було більше тижня, щоб зробити справжній провал навіть з меншою з двох моделей. Тому я перейшов до моделі Colab і моделі 345M. Навчання було набагато, набагато швидше, але потрібно було розібратися зі скиданням сеансів і непередбачуваністю того, який GPU я б отримав для кожного сеансу, дратує.

Оновлення до Google Compute Engine

Після цього, я розкусила кулю, зареєструвалась на обліковому записі Google Compute Engine і вирішила скористатися кредитом у розмірі 300 доларів, який Google надає новим клієнтам. Якщо ви не знайомі з налаштуванням віртуальної машини в хмарі, це може бути трохи складно, але є багато онлайнових довідників. Найпростіше, якщо почати з однієї з попередньо налаштованих віртуальних машин, у яких вже встановлено Tensorflow. Я вибрав Linux версію з 4 vCPU. Незважаючи на те, що моя настільна система Windows, той же код Python ідеально працював на обох. Потім потрібно додати GPU, який у моєму випадку прийняв запит на підтримку Google для отримання дозволу. Я припускаю, що це тому, що GPU-обладнані машини є більш дорогими і менш гнучкими, ніж CPU-машини, тому вони мають певний тип перевірки. Це тільки взяло пару годин, та я вмів запустити VM з Tesla T4. Коли я вперше увійшов (використовуючи вбудований SSH), він нагадав мені, що мені потрібно встановити драйвери Nvidia для T4 і дав мені потрібну команду.

Далі вам потрібно налаштувати клієнт передачі файлів, як WinSCP, і почати роботу з вашою моделлю. Як тільки ви завантажите код і дані, створіть віртуальне середовище Python (необов'язково) і завантажте необхідні пакети, ви можете перейти так само, як і на робочому столі. Я тренував свою модель з кроком у 15000 кроків і щоразу завантажував контрольні точки моделі, тому я мав би їх для довідки. Це може бути особливо важливим, якщо у вас є невеликий навчальний набір, оскільки занадто велика кількість тренувань може призвести до переналагодження вашої моделі та погіршення ситуації. Отже, мати контрольні точки, до яких можна повернутися, є цінним.

Говорячи про контрольно-пропускні пункти, як і моделі, вони великі. Отже, ви, можливо, захочете додати диск до вашої віртуальної машини. Якщо диск розділений, ви завжди можете використовувати його для інших проектів. Процес автоматичного монтування трохи дратує (здається, що це може бути прапорець, але це не так). На щастя, ви повинні зробити це один раз. Після того, як у мене з'явилася моя віртуальна машина і працювала з необхідним кодом, моделлю та навчальними даними, я відпустила його. T4 змінювався на один крок через кожні 1,5 секунди. Віртуальна машина, яку я налаштувала, коштував близько 25 доларів на день (пам'ятайте, що віртуальні машини не вимикаються, вам потрібно вимкнути їх, якщо ви не хочете, щоб виставили рахунок, а постійний диск продовжує виставляти рахунок навіть тоді).

Щоб заощадити гроші, я переніс моделі контрольних точок (у вигляді файлу .zip) назад на свій робочий стіл. Я міг би тоді вимкнути ВМ (заощаджуючи долар або дві години), і взаємодіяти з моделлю локально. Ви отримуєте один і той же вихід, тому що модель і контрольна точка ідентичні. Традиційним способом оцінити успішність вашого тренінгу є збереження частини ваших навчальних даних як набору для перевірки. Якщо збиток продовжує зменшуватися, але зменшується точність (яку ви отримуєте шляхом обчислення втрат, коли ви запускаєте модель на даних, які ви тримаєте на валідації), ймовірно, ви почали надмірно підібрати свої дані та модель це просто “запам'ятовування” вашого входу і подача його назад. Це зменшує його здатність працювати з новою інформацією.

Ось яловичина: деякі зразки результатів після днів навчання

Після експериментів з різними типами підказок, я зупинився на тому, щоб годувати модель (яку я отримала прізвисько The Oracle) перших речень фактичних статей wfoojjaec і побачити те, що вона придумала. Через 48 годин (106 000 кроків у цьому випадку) навчання на Т4, наведемо приклад:

Вихідні дані нашої моделі після двох днів тренувань на Т4, коли годували першим реченням статті Титана Райана Вітвама. Очевидно, що це нікого не обдурить, але модель починає робити гідну роботу по злиттю подібних концепцій разом.
Вихідні дані нашої моделі після двох днів тренувань на Т4, коли годували першим реченням статті Титана Райана Вітвама. Очевидно, що це нікого не обдурить, але модель починає робити гідну роботу по злиттю подібних концепцій разом.

Чим більше інформації модель має про тему, тим більше вона починає генерувати правдоподібний текст. Ми багато пишемо про Windows Update, тому я вирішив, що модель спробує:

Відповідь моделі на запит про оновлення Windows після декількох днів навчання.
Відповідь моделі на запит про оновлення Windows після декількох днів навчання.

З чимось настільки суб'єктивним, як формування тексту, важко знати, наскільки далеко треба йти з навчанням моделі. Це особливо вірно, оскільки кожен раз, коли надсилається запит, ви отримаєте іншу відповідь. Якщо ви хочете отримати певні ймовірні або забавні відповіді, краще всього створити кілька зразків для кожного підказки і самостійно переглянути їх. У випадку запиту Windows Update, ми надіслали модель таким же самим запитом після декількох годин навчання, і, схоже, додаткові роботи могли бути корисними:

Через ще кілька годин навчання, ось найкращі зразки, коли дається одна і та ж підказка про Microsoft Windows.
Через ще кілька годин навчання, ось найкращі зразки, коли дається одна і та ж підказка про Microsoft Windows.

Ось чому непідконтрольні моделі так здорові

Я був вражений, але не здутий, сирими прогностичними характеристиками GPT-2 (принаймні, публічної версії) у порівнянні з простішими рішеннями, такими як textgenrnn. Те, що я не зрозумів, до тих пір було багатогранність. GPT-2 достатньо загального призначення, що дозволяє вирішувати найрізноманітніші випадки використання. Наприклад, якщо ви надаєте йому пари французьких і англійських речень як підказку, за якими слідує лише французьке речення, це робить правдоподібну роботу з генерації перекладів. Або, якщо ви даєте йому пари запитань і відповідей, після чого виникає питання, це робить гідну роботу, щоб придумати правдоподібну відповідь. Якщо ви генеруєте цікавий текст або статті, будь ласка, подумайте про спільний доступ, оскільки це, безумовно, досвід для всіх нас.

Читати далі

Найкращі системи розумного домашнього захисту
Найкращі системи розумного домашнього захисту

Колись нішевий бізнес з кількома традиційними гравцями та деякими стартапами, системи домашньої безпеки зараз є головним полем битви не лише охоронних компаній, але й кількох інтернет-гігантів. Ми підбираємо основні моменти найбільш популярних варіантів на 2020 рік.

Шукайте: Ви можете побачити всі планети в нашій Сонячній системі сьогодні ввечері
Шукайте: Ви можете побачити всі планети в нашій Сонячній системі сьогодні ввечері

Ви, напевно, бачили схеми Сонячної системи, які розміщують планети в гарні впорядковані лінії, але правда полягає в тому, що вони часто знаходяться з іншого боку Сонця від Землі. Ми випадково переживаємо період, протягом якого всі планети видно. Ви просто повинні знати, де і коли шукати.

Фрагмент метеорита вказує на зниклу планету карликів у ранній Сонячній системі
Фрагмент метеорита вказує на зниклу планету карликів у ранній Сонячній системі

Кожен астероїд, який падає на Землю, є потенційним вікном у витоки Сонячної системи, але вчені натрапили на щось досить дивне, вивчаючи фрагмент астероїда Альмахата Сітта.

Лінус Торвальдс звинувачує Intel у вбивстві пам'яті ECC в споживчих системах
Лінус Торвальдс звинувачує Intel у вбивстві пам'яті ECC в споживчих системах

Більше десяти років тому Intel позбавила підтримки оперативної пам'яті ECC своїх споживчих продуктів, і Лінус Торвальдс досі цим не задоволений.