Как создать собственную современную систему генерации текста

Как создать собственную современную систему генерации текста

Едва ли проходит день, когда нет истории о фальшивых новостях. Это напоминает мне цитату из любимого радио-радиостанции из моей юности: «Если вам не нравятся новости, выходите и делайте свои собственные». Прорывная языковая модель OpenAI, версия GPT-2 с 1,5 миллиардами параметров, подобрался достаточно близко, чтобы группа решила, что слишком опасно выпускать публично, по крайней мере, на данный момент. Однако теперь OpenAI выпустил две меньшие версии модели, а также инструменты для их точной настройки на свой собственный текст. Таким образом, без особых усилий и с использованием значительно меньшего количества времени на GPU, чем на обучение с нуля, вы можете создать настроенную версию GPT-2, которая сможет генерировать текст в том стиле, который вы ему предоставите, или даже начать отвечать на вопросы, подобные тем, с которыми вы тренируетесь.

Что делает GPT-2 особенным

GPT-2 (Generative Pre-Trained Transformer version 2) основан на версии очень мощной нейронной сети Transformer Attention. Исследователи OpenAI так взволновались, обнаружив, что они могут решать ряд языковых задач, не обучаясь непосредственно им. После того, как он был предварительно обучен огромному объему данных Reddit и получил соответствующие подсказки, он выполнил сносную работу, отвечая на вопросы и переводя языки. Конечно, это не что-то похожее на Уотсона в том, что касается семантических знаний, но этот тип обучения без учителя особенно интересен, поскольку он устраняет большую часть времени и затрат, необходимых для маркировки данных для контролируемого обучения.

Обзор работы с GPT-2

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

Первый шаг - загрузка одной или обеих моделей. К счастью, большинство учебных пособий, в том числе те, которые мы вам покажем ниже, содержат код Python, который сделает это за вас. После загрузки вы можете запустить предварительно обученную модель для автоматического создания текста или в ответ на запрос, который вы предоставили. Но есть также код, который позволяет вам использовать предварительно обученную модель, настраивая ее на выбранный вами источник данных. После того, как вы настроили свою модель на свое усмотрение, вам нужно просто запустить ее и предоставить подходящие подсказки.

Работа с GPT-2 на вашем локальном компьютере

Есть много уроков по этому вопросу, но мой любимый - Макс Вульф. Фактически, до выпуска OpenAI я работал с его RNN, генерирующим текст, который он позаимствовал для своей работы над GPT-2. Он предоставил полный пакет на GitHub для загрузки, настройки и запуска модели на основе GPT-2. Вы можете даже поймать его прямо как пакет из PyPl. Readme проведет вас через весь процесс, с некоторыми советами о том, как настроить различные параметры. Если вам пригодится массивный графический процессор, это отличный подход, но поскольку модели 345M для обучения или настройки требуется большая часть 16-ГБ графического процессора, вам, возможно, придется обратиться к облачному графическому процессору.

Бесплатная работа с GPT-2 с использованием Google Colab

Как создать собственную современную систему генерации текста

Получение данных для вашего проекта

Теперь, когда мощные языковые модели были опубликованы в Интернете, и множество уроков о том, как их использовать, самой сложной частью вашего проекта может быть создание набора данных, который вы хотите использовать для настройки. Если вы хотите повторить эксперименты других, создав при этом диалог Шекспира или написать «Звездный путь», вы можете просто зацепить тот, который находится в сети. В моем случае я хотел посмотреть, как будут работать модели, когда их попросят сгенерировать статьи, подобные тем, которые можно найти на wfoojjaec. У меня был доступ к бек-каталогу из более чем 12 000 статей за последние 10 лет. Поэтому я смог собрать их в текстовый файл и использовать его в качестве основы для тонкой настройки.

Если у вас есть другие амбиции, которые включают в себя подражание веб-сайту, то, безусловно, альтернатива - это соскоб. Есть некоторые сложные услуги, такие как ParseHub, но они ограничены, если вы не платите за коммерческий план. Я обнаружил, что Chrome Extension Webscraper.io достаточно гибкий для многих приложений, и он быстрый и бесплатный. Одно важное предостережение - обращать внимание на Условия предоставления услуг для любого веб-сайта, о котором вы думаете, а также на любые проблемы с авторским правом. Если посмотреть на результаты различных языковых моделей, их, конечно, не научили не заниматься плагиатом.

Так может ли она сделать техническую журналистику?

После того, как у меня было 12 000 статей wfoojjaec, я начал с обучения упрощенного GPT-2 на своем настольном компьютере Nvidia 1080 GPU. К сожалению, 8 ГБ ОЗУ графического процессора было недостаточно. Поэтому я перешел на обучение модели 117M на своем 4-ядерном i7. Это было не безумно ужасно, но потребовалось бы больше недели, чтобы создать настоящую вмятину даже с самой маленькой из двух моделей. Поэтому я переключился на Colab и модель 345M. Обучение было намного, намного, быстрее, но мне приходилось сталкиваться с перезапуском сессий и непредсказуемостью того, какой GPU я получу за каждый сеанс.

Обновление до Google Compute Engine

После этого я укусил пулю, зарегистрировался в Google Compute Engine и решил воспользоваться кредитом в 300 долларов, который Google дает новым клиентам. Если вы не знакомы с настройкой виртуальной машины в облаке, это может быть немного сложно, но есть много онлайн-руководств. Проще всего, если вы начнете с одной из предварительно сконфигурированных виртуальных машин, на которых уже установлен Tensorflow. Я выбрал версию для Linux с 4 vCPU. Несмотря на то, что моя настольная система - Windows, один и тот же код Python отлично работал на обоих. Затем вам нужно добавить графический процессор, который в моем случае принял запрос в службу поддержки Google для разрешения. Я предполагаю, что это связано с тем, что машины с графическим процессором стоят дороже и менее гибки, чем машины с одним процессором, поэтому у них есть некоторый тип процесса проверки. Это заняло всего пару часов, и я смог запустить ВМ с Tesla T4. Когда я впервые вошел в систему (используя встроенный SSH), он напомнил мне, что мне нужно установить драйверы Nvidia для T4, и дал мне нужную команду.

Затем вам нужно настроить клиент передачи файлов, такой как WinSCP, и начать работать с вашей моделью. После того, как вы загрузите свой код и данные, создадите виртуальную среду Python (необязательно) и загрузите необходимые пакеты, вы сможете действовать так же, как на рабочем столе. Я тренировал свою модель с шагом 15 000 шагов и каждый раз загружал контрольные точки модели, поэтому у меня они будут для справки. Это может быть особенно важно, если у вас небольшой набор данных для обучения, так как слишком большое количество тренировок может привести к тому, что ваша модель будет слишком подходящей и даже ухудшится. Поэтому наличие контрольных точек, к которым вы можете вернуться, является ценным.

Говоря о контрольно-пропускных пунктах, как и модели, они большие. Так что вы, вероятно, захотите добавить диск к своей виртуальной машине. Имея отдельный диск, вы всегда можете использовать его для других проектов. Процесс автоматического монтирования немного раздражает (кажется, что это может быть флажок, но это не так). К счастью, вам нужно сделать это только один раз. После того, как моя виртуальная машина была запущена и работала с необходимым кодом, моделью и данными обучения, я ее отпустил. Т4 мог бегать примерно на один шаг каждые 1,5 секунды. Виртуальная машина, которую я настроил, стоит около 25 долларов США в день (помните, что виртуальные машины не отключают себя; вам нужно отключить их, если вы не хотите получать счета, а постоянный диск продолжает получать счета даже тогда).

Чтобы сэкономить деньги, я перенес контрольные точки модели (в виде файла .zip) обратно на рабочий стол. Затем я мог бы выключить виртуальную машину (сэкономив доллар или два в час) и локально взаимодействовать с моделью. Вы получаете один и тот же вывод в любом случае, потому что модель и контрольная точка идентичны. Традиционный способ оценить успех вашего обучения - выделить часть ваших данных обучения в качестве набора для проверки. Если потеря продолжает уменьшаться, но точность (которую вы получаете, вычисляя потерю при запуске вашей модели на данных, которые вы держали для проверки), снижается, вероятно, вы начали перевыполнять свои данные и свою модель это просто «запоминание» вашего ввода и возвращение его вам. Это снижает его способность справляться с новой информацией.

Вот говядина: некоторые примеры результатов после нескольких дней обучения

Поэкспериментировав с различными типами подсказок, я остановился на подаче модели (которую я прозвал Oracle) первыми предложениями реальных статей wfoojjaec и наблюдением того, что она придумала. После 48 часов (в данном случае 106 000 шагов) тренировок на Т4, вот пример:

Выход нашей модели после двух дней тренировок на Т4 при условии подачи первого предложения из статьи Титана Райана Уитвама. Очевидно, что это никого не обманет, но модель начинает делать достойную работу по объединению похожих концепций на этом этапе.
Выход нашей модели после двух дней тренировок на Т4 при условии подачи первого предложения из статьи Титана Райана Уитвама. Очевидно, что это никого не обманет, но модель начинает делать достойную работу по объединению похожих концепций на этом этапе.

Чем больше информации о теме имеет модель, тем больше она начинает генерировать правдоподобный текст. Мы много пишем о Центре обновления Windows, поэтому я решил, что модель попробует:

Ответ модели на запрос о Центре обновления Windows после нескольких дней обучения.
Ответ модели на запрос о Центре обновления Windows после нескольких дней обучения.

С чем-то таким субъективным, как генерация текста, трудно понять, как далеко продвинуться в обучении модели. Это особенно верно, потому что каждый раз, когда отправляется приглашение, вы получаете другой ответ. Если вы хотите получить правдоподобные или забавные ответы, лучше всего создать несколько образцов для каждого запроса и просмотреть их самостоятельно. В случае с приглашением Центра обновления Windows мы предоставили модели ту же самую подсказку после нескольких часов обучения, и казалось, что дополнительная работа могла бы быть полезной:

После еще нескольких часов обучения, вот лучшие примеры, когда вы получаете ту же подсказку о Microsoft Windows.
После еще нескольких часов обучения, вот лучшие примеры, когда вы получаете ту же подсказку о Microsoft Windows.

Вот почему модели без присмотра такие крутые

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

Читать далее

Ученые напечатали на 3D-принтере микроскопический корабль "Вояджер" с собственным двигателем
Ученые напечатали на 3D-принтере микроскопический корабль "Вояджер" с собственным двигателем

У него нет варп-двигателей, но он прекрасно уживается с помощью перекиси водорода и платины.

Seagate анонсирует собственные ядра RISC-V для будущих контроллеров хранения
Seagate анонсирует собственные ядра RISC-V для будущих контроллеров хранения

Чтобы достичь целевого показателя в 50 ТБ на диск в течение следующих нескольких лет, Seagate решила, что ей нужен специальный контроллер хранения. RISC-V предложил решение.

Apple создает собственный модем 5G
Apple создает собственный модем 5G

Ходили слухи, что теперь официально - Apple строит собственный модем 5G.

Microsoft создает собственные процессоры ARM для серверов и ПК Surface
Microsoft создает собственные процессоры ARM для серверов и ПК Surface

Сообщается, что Microsoft работает над собственным дизайном процессора на базе ARM, чтобы придать ему большую гибкость и потенциально лучшую производительность, чем ядра x86.