Хабрахабр

GPT-2 нейросеть от OpenAI. Быстрый старт

image

Это нейронная сеть с рекордным на данный момент числом параметров (1. Не успели отшуметь новости о нейросети BERT от Google, показавшей state-of-the-art результаты на целом ряде разговорных (NLP) задач в машинном обучении, как OpenAI выкатили новую разработку: GPT-2. 5 млрд, против обычно используемых в таких случаях 100-300 млн) оказалась способна генерировать целые страницы связного текста.

Генерировать настолько хорошо, что в OpenAI отказались выкладывать полную версию, опасаясь что эту нейросеть будут использовать для создания фейковых новостей, комментариев и отзывов, неотличимых от настоящих.

Именно ее мы запустим через сервис Google Colab и поэкспериментруем с ней. Тем не менее, в OpenAI выложили в общий доступ уменьшенную версию нейросети GPT-2, со 117 млн параметров.

Для тех кто не следил за развитием прогресса в обработке естественной речи (NLP).

Оказалось, что если заменить пару последних слоев и дообучить ее под конкретную задачу (такой подход называется Fine Tuning и широко используется в машинном обучении), то это бьет предыдущие рекорды сразу по широкому спектру разговорных задач. Летом 2018 года OpenAI предобучили на большом объеме текста нейронную сеть GPT, построенную на архитектуре Transformer.

Они серьезно улучшили результат, сделав нейросеть двунаправленной, в отличие от GPT. На основе этой разработки, в конце 2018 года в Google создали свою нейросеть BERT.

Получившаяся таким образом сеть GPT-2 является на данный момент самой большой нейросетью, с беспрецендентным числом параметров 1. Не желая сдаваться, в феврале 2019 года в OpenAI увеличили свою GPT сразу в 10 раз и обучили ее на еще большем объеме текста — на 8 млн интернет страницах (суммарно на 40 Гб текста). 5 млрд (у BERT в самой крупной модели было 340 млн, а у стандартной BERT 110 млн).

С повторными упоминаниями имен действующих лиц по ходу повествования, цитатами, отсылками к связанным событиям и так далее. Как результат, GPT-2 оказалась способной генерировать целые страницы связного текста. Примеры приводить здесь не буду, а отсылаю желающих к оригинальной статье в блоге OpenAI: Better Language Models and Their Implications.

GPT-2 без всякого дообучения сразу показала близкие к state-of-the-art результаты на целом ряде разговорных задач. Генерация связного текста такого качества это само по себе впечатляюще, но самое интересное здесь другое. Повторяю, кто пропустил важность момента — без всякого дообучения под конретную задачу!

Просто задавая нейросети правильные вопросы. Как они этого добились?

Это классический подход для генерации текста. GPT-2 обучена предсказывать следующее слово в предложении. Но после изобретения летом 2017 года архитектуры Transformer, в разговорных задачах постепенно она стала преобладать. Сначала пальму первенства в этой области держали рекуррентные (RNN) сети, в частности, LSTM. Кстати, сейчас уже появился целый ряд модификаций трансформера — с введением в него рекуррентности (Universal Transformers), модификация для более длинных последовательностей (Transformer-XL) и другие, но в Google и OpenAI пока используют лишь слегка тюнингованный оригинальный Transformer. Хотя у оригинального Transformer есть проблема с запоминанием длинных последовательностей (LSTM помнят более длинные), но быстрота обучения и глубина сети с лихвой компенсировала это.

А также определять, являются ли два последовательных предложения логичным продолжением друг друга, или они никак не связаны между собой по смыслу. BERT от Google, напомню, обучался немного иначе: предсказывать не следующее слово в предложении, а пропущенные (закрытые маской) слова в предложении. Что и определило успех BERT в NPL задачах. Это позволило BERT быть языковой моделью, понимающей смысл слов в зависимости от их окружения (от контекста). Просто предсказание слов в базовой модели в нем работает не очень. Но только после дообучения (Fine Tuning) под конкретную задачу. Можете сами поиграться с BERT в браузере (через Google Colab): https://habr.com/ru/post/436878.

Это не просто языковая модель, как BERT, это генератор текста. GPT-2 дообучать не нужно. Просто подайте ей на вход начало фразы, а дальше она дополнит ее слово за словом.

Поэтому обученные только на них нейросети не очень хорошо генерируют текст. Интересная деталь: исследования OpenAI показали, что массивы текстов Wikipedia и литературных книг (на которых обучался BERT, в частности) имеют предвзятый стиль. А чтобы отбросить рекламные и спамерские сайты, они включали в выборку сайты, ссылки на которые в реддите имеют хороший рейтинг. Чтобы разнообразить входные данные и стили, в OpenAI для обучения GPT-2 использовали обычные интернет страницы, собранные с 8 млн сайтов (суммарно 40 Гб текста). То есть сайты, которые живые пользователи сочли содержащими какую-то полезную информацию.

Но самое удивительное, что задавая ей правильный вопрос (т.е. Итак, GPT-2 благодаря беспрецедентному размеру, оказалась способна генерировать страницы связного текста. Просто потому что продолжение такого начала является самым естественным. правильное начало фразы), она смогла отвечать на различные вопросы!

И она дополнит эту фразу до конца. Для примера, чтобы получить ответ на вопрос "Что такое Земля?", можно подать на вход этой нейросети начало фразы: "Земля это...". Потому что ответ будет естественным продолжением такого начала.

Представьте себе продолжения фраз: "Я, как ученый, считаю что Земля это...". Более того, формируя правильным образом начало фразы, можно получить объяснения для разной целевой аудитории с учетом ее интеллекта, возраста и образования. Или: "Я, будучи воспитателем в детском саду, сейчас объясню вам, дети, что Земля это...". Или "Я, как плоскоземельщик, утверждаю что Земля это...".

В некотором роде, похожее происходит и у людей. Как видите, формируя правильные вопросы (правильное начало фразы), можно получить ответы совершенно разного уровня и разной детализации. На уровне пациента. Врач должен объяснить пациенту протекание болезни так, чтобы тот понял. Но чтобы дать ответ, который от него ждут, ребенок начинает его придумывать — генерировать текст. Если у пятилетнего ребенка спросить, почему он поступил так, то он не может сразу ответить (что и естественно, дети живут чувствами и эмоциями). Сначала, как знают многие родители, это будут нелепые ответы. Исходя из того, чтобы ответ устроил родителя и чтобы хоть как-то соответствовал произошедшему. Но путем поощрения и наказания ("рассказывай подробнее", "не придумывай оправданий") ребенок научится давать развернутые и полные ответы.

Эта разработка OpenAI и способность сети GPT-2 давать ответы на разговорных задачах без специального дообучения под конкретную задачу, открывают два интересных вопроса:

Где ответ будет естественным продолжением. 1) Может ли интерпретируемость нейронных сетей быть достигнута таким элементарным генератором текста и правильным началом фразы. Тогда в ходе уточнения задав ей правильный вопрос, например: "Я пришла к этому выводу, потому что...", можно в теории получить объяснение как она нашла котика на фото. Пусть, например, нейронная сеть указывает котиков на фотографии не числами-координатами x и y, а объясняет его положение обычным текстом. Что решает глобальную проблему интерпретируемости нейронных сетей. И это объяснение в предельном случае может быть не хуже человеческого.

Здесь имеется ввиду, что пытаясь имитировать человеческую речь (человеческие ответы на вопросы), нейросеть неизбежно должна выучиться здравому смыслу, чтобы давать эти самые похожие на человеческие ответы. 2) Может ли предобученная нейронная сеть на больших объемах текста быть универсальной, обладать общим здравым смыслом и не требовать дообучения под конкретные задачи. В большинстве своем люди дают развернутые адекватные ответы, а значит сеть должна научиться делать так же. Давать односложные фиктивные ответы, в целом, не характерно для людей.

Оба эти вопроса остаются открытыми, но первый шаг в их утверждении определенно сделан.

Потому что вот как OpenAI с помощью нейросети GPT-2 получили свои результаты в разговорных задачах для разных доменов: Если вы сейчас стоите, то лучше сядьте.

Ответы на вопросы по тексту

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

И нейросеть дописывала ответ! Либо скармливали сети в качестве начальной фразы несколько примеров вида "Вопрос: какой-то вопрос, Ответ: какой-то ответ", а в конце после реального вопроса добавляли: "Ответ:". Это удивительно. Так как выявила структуру документа по предыдущим Вопрос-Ответ.

Краткая версия (Summarization) текста

Как такое поведение получили от GPT-2? На входе подается длинный текст из нескольких абзацев или даже страниц, а нейросеть должна написать короткое содержание. И все! Просто после текста добавили "TL;DR". Потому что такими символами в интернете часто обозначают кратное содержание поста. Этого оказалось достаточно, чтобы после этих символов GPT-2 дописала краткое содержание статьи!

Перевод текста

И нейросеть дописала перевод последнего слова: "кошка" (в оригинале на французском). На вход GPT-2 подали текст в виде: "hello = привет, dog = собака, wind = ветер, cat = ...". Если у вас до сих пор не отвисла челюсть от всего этого, то у меня для вас две новости, и обе плохие =). Потому что выявила структуру документа и просто дополнила его наиболее логичным продолжением.

Мотивируя это тем, что с помощью этой нейросети будет слишком просто генерировать фейковые новости и отзывы в магазинах. К сожалению, полную версию GPT-2 в OpenAI отказались выкладывать в общий доступ. Впрочем, для крупной организации повторить модель не составляет труда (похоже, что они обучали ее на 256 TPU несколько дней, и по предварительным подсчетам это обошлось им около 45 тыс. Судя по их заявлению, обсуждение целесообразности выкладывания этой модели будут продолжаться ближайшие 6 месяцев, в после OpenAI решат окончательно, выкладывать или нет. $)

5 млрд, как в полной модели): https://github.com/openai/gpt-2. Однако они выложили уменьшенную версию GPT-2 со 117 млн параметрами (а не 1. Попробуем запустить ее и поиграться с этой моделью.

Проще всего это сделать через Google Colab:

  1. Откройте ссылку

http://colab.research.google.com/github/blade1780/bert/blob/master/Gpt-2.ipynb

  1. В меню Runtime выберите Run All, чтобы в первый раз запустились все ячейки, скачалась модель и подключились нужные библиотеки. Согласитесь сбросить все Runtime, если потребуется. Вводите текст после появления "Model prompt >>>" и нажимайте Enter.

Если что-то пошло не так...

Убедитесь, что в меню Runtime -> Change runtime type выбрано GPU и Python 3

Если кнопка подключения не активна, нажмите ее, чтобы стало Connected.

Или создайте весь код вручную:

  1. Перейдите на https://colab.research.google.com
  2. Нажмите на синюю кнопку NEW PYTHON 3 NOTEBOOK
  3. В меню Runtime -> Change runtime type выберите Python 3 и GPU (последнее чтобы запускать нейросеть на GPU)
  4. В первой ячейке введите:

!git clone https://github.com/openai/gpt-2
%cd gpt-2
!sh download_model.sh 117M
!pip3 install -r requirements.txt

Это загрузит нейросеть GPT-2 и установит необходимые зависимости. И нажмите черный значок Play слева от ячейки.

Во второй ячейке (добавить ее можно через меню Insert -> Code cell или наведя мышь под центром текущей ячейки, всплывут кнопки добавления):

!python3 src/interactive_conditional_samples.py

Дождитесь пока загрузится нейросеть и внизу появится окошко для ввода текста, с надписью ""Model prompt >>>". Это запустит интерактивный режим. Через некоторое время появится сгенерированный текст под заголовком SAMPLE. Вводите начало фразы и нажимайте Enter.

Текст будет генерироваться бесконечное время небольшими кусками SAMPLE 1, SAMPLE 2 и так далее, пока не нажмете кнопку Stop у ячейки. Можно также запустить режим генерации полностью случайного текста. Для этого создайте новую ячейку с кодом:

!python3 src/generate_unconditional_samples.py | tee samples.txt

Его можно скачать следующими командами (снова создайте новую ячейку и запустите ее после генерации текста): Результат будет сохранен в файл samples.txt.

from google.colab import files
files.download('samples.txt')

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

!python3 src/generate_unconditional_samples.py --top_k 40 --temperature 0.7 | tee samples.txt

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

Оригинальная статья в блоге OpenAI: Better Language Models and Their Implications
Github с выложенной 117М моделью: https://github.com/openai/gpt-2
Обсуждение на reddit основной новости
Обсуждение на reddit отказа выложить полную модель: Пора OpenAI переименоваться в CloseAI
Google Colab notebook для запуска GPT-2 (117M) в браузере: http://colab.research.google.com/github/blade1780/bert/blob/master/Gpt-2.ipynb

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть