Пустобрёх GPT-2: russian edition
Погрузившись в тему DL NLP, набрел на просторах интернета на любопытный репозиторий. Это не много не мало — Русская GPT-2! Ну, т.е. русскоязычная. Причем не какая-нибудь мелкая 117М, а вполне себе 1250М, что уже довольно серьезно. Автор проделал немалую работу по адаптации исходной модели и подготовке корпуса для обучения. Да и само обучение, надо полагать заняло немало времени и мощностей. В общем, респект товарищу l4rz! Планирую пойти по его стопам и обучить систему на своем корпусе (в процессе подготовки которого сейчас нахожусь) — благо автор оставил довольно подробные инструкции, как именно подступиться к столь масштабной задаче… По итогам отчитаюсь! ;)
В пока, чисто развлечения ради, предлагаю на суд общественности некоторые эксперименты с системой, по мотивам поста о более крутой GPT-3 (хотя там автор, очевидно, и GPT-3 не считает чем-то выдающимся). С одной стороны представленная здесь система заметно проще GPT-3, с другой — все-таки обученная русскоязычная модель! Мне кажется это забавно.
Disclaimer. Результаты во многом определяются корпусом, на котором училась сеть. Вот что автор говорит об этом: I scraped a couple of Russian press sites, parsed HTML with beautifulsoup4 and saved parsed texts as well as metadata (headers, TL;DRs, timestamps) for further sorting and postprocessing in PKLs… In order to push things further the 4Gb dataset (415M tokens) was augmented with 3Gb of filtered fanfics, becoming a 7Gb one (862M tokens).
Методика эксперимента проста: я запускаю сеть трижды с одним и тем же входом. Выход сети отмечен жирным. Никаких правок я не делал, за исключением чисто косметических — вроде пропущенных пробелов (которые и пропущены то были из-за моего вмешательства в код*). Эксперименты в целом повторяют те, что описаны в статье про GPT-3, и я решил их никак не комментировать… ;)
Эксперимент №1
.>>>Вы наливаете себе стакан клюквенного сока, однако затем по рассеянности добавляете в него чайную ложечку виноградного сока. Выглядит он нормально. Вы пытаетесь его понюхать, но у вас сильная простуда, поэтому вы не чувствуете запахов. Вам очень хочется пить. Поэтому вы пьете кофе с медом и сахаром.>>> new
Вы наливаете себе стакан клюквенного сока, однако затем по рассеянности добавляете в него чайную ложечку виноградного сока. Выглядит он нормально. Вы пытаетесь его понюхать, но у вас сильная простуда, поэтому вы не чувствуете запахов. Вам очень хочется пить. Поэтому вы снова сливаете себе кофе. Вы чувствуете тошноту. В этом нет ничего плохого, вы не знаете, как это пить в любом случае. Вы чувствуете что-то очень плохое, но на вас никто не обращает внимания.>>> new
Вы наливаете себе стакан клюквенного сока, однако затем по рассеянности добавляете в него чайную ложечку виноградного сока. Выглядит он нормально. Вы пытаетесь его понюхать, но у вас сильная простуда, поэтому вы не чувствуете запахов. Вам очень хочется пить. Поэтому вы продолжаете есть, если хотите, но не знаете, как он выглядит.
Эксперимент №2
.>>>Вы организовали небольшую вечеринку. Вы хотите подать ужин в гостиной. Стол из столовой шире дверного проёма, и чтобы перенести его в гостиную, вам придётся выпить стакан горячего молока.>>> new
Вы организовали небольшую вечеринку. Вы хотите подать ужин в гостиной. Стол из столовой шире дверного проёма, и чтобы перенести его в гостиную, вам придётся сделать несколько шагов.>>> new
Вы организовали небольшую вечеринку. Вы хотите подать ужин в гостиной. Стол из столовой шире дверного проёма, и чтобы перенести его в гостиную, вам придётся приложить немало усилий.
Эксперимент №3
.>>>Вы адвокат защиты, и вам сегодня необходимо попасть в суд. Одеваясь с утра, вы обнаружили, что брюки от вашего костюма сильно испачканы. Однако ваши плавки чистые и очень стильные. Это плавки высокого класса из Франции, которые вам на день рождения подарила Изабель. Вы решаете, что вам нужно надеть для суда?>>> new
О да*
Вы адвокат защиты, и вам сегодня необходимо попасть в суд. Одеваясь с утра, вы обнаружили, что брюки от вашего костюма сильно испачканы. Однако ваши плавки чистые и очень стильные. Это плавки высокого класса из Франции, которые вам на день рождения подарила Изабель. Вы решаете, что вам нужно надеть для суда. Если вам что-то не нравится — возьмите с собой одежду из вашего гардероба.>>> new
Вы адвокат защиты, и вам сегодня необходимо попасть в суд. Одеваясь с утра, вы обнаружили, что брюки от вашего костюма сильно испачканы. Однако ваши плавки чистые и очень стильные. Это плавки высокого класса из Франции, которые вам на день рождения подарила Изабель. Вы решаете, что вам нужно надеть для суда?
— У меня есть множество вопросов к адвокату.
Эксперимент №4
.>>>Вчера я оставил одежду в химчистке, и сегодня мне ещё нужно её забрать. Где моя одежда?>>> new
— Идиот, мне надо его вернуть, а не делать там всё по плану.
Вчера я оставил одежду в химчистке, и сегодня мне ещё нужно её забрать. Где моя одежда?>>> new
— Не, я не знаю, что это за вещи, но я всегда могу забрать одну, а это не всегда приятно.
Вчера я оставил одежду в химчистке, и сегодня мне ещё нужно её забрать. Где моя одежда?
— Хорошо. Не буду ему мешать,- ответил я.
Эксперимент №5
.>>>Джанет и Пенни пошли в магазин, чтобы купить Джеку подарок. Джанет сказала: «Я куплю Джеку топ». «Не покупай Джеку топ», — говорит Пенни. «У него есть топ. Он получит от меня, когда мы будем выбирать.И если ты не купишь Джеку, то продашь Джеку.>>> new
Джанет и Пенни пошли в магазин, чтобы купить Джеку подарок. Джанет сказала: «Я куплю Джеку топ». «Не покупай Джеку топ», — говорит Пенни. «У него есть топ. Он получит свой кусок от Джека.>>> new
Джанет и Пенни пошли в магазин, чтобы купить Джеку подарок. Джанет сказала: «Я куплю Джеку топ». «Не покупай Джеку топ», — говорит Пенни. «У него есть топ. Он получит. Возьму. Он всегда рядом. И я не продам. Только в отличие от Джека. Его не интересует, чем ему так не угодил. Он не будет ничего покупать, чем покупать себе сам.
Эксперимент №6
.>>>На вечеринке я налил себе стакан лимонаду, однако он оказался слишком кислым, поэтому я добавил немного сахару. Под рукой не было ложки, поэтому я размешал напиток сигаретой. Но это оказалось очень плохой идеей, потому что я уже давно выпил. Ух ты, какой замечательный вкус!>>> new
На вечеринке я налил себе стакан лимонаду, однако он оказался слишком кислым, поэтому я добавил немного сахару. Под рукой не было ложки, поэтому я размешал напиток сигаретой. Но это оказалось очень плохой идеей, потому что лимонад не давал мне пить.>>> new
На вечеринке я налил себе стакан лимонаду, однако он оказался слишком кислым, поэтому я добавил немного сахару. Под рукой не было ложки, поэтому я размешал напиток сигаретой. Но это оказалось очень плохой идеей, потому что он был слишком горячим, поэтому я стал пить из горла.
Эксперимент №7
.>>>В следующих вопросах у некоторых действий есть серьёзные последствия, а некоторые безопасны. Твоя задача – определить последствия употребления различных смесей и их опасность.*Небольшое лирическое отступление. GPT-2 с неограниченной генерацией текста (пол страницы за раз), как было в исходнике, мне не понравился. И я зарезал вывод до минимума, но сделал возможность рекурсивного продолжения (когда на вход подается предыдущий вывод). Таким образом я немного «мухлюю», т.к. Сам определяю когда можно/нужно остановиться. В данном случае сеть и правда вывела результат, который можно с некоторой натяжкой интерпретировать как ответ (правда, парадоксальный), но если продолжить вывод, то… Судите сами:
1. Вы наливаете себе стакан клюквенного сока, однако затем по рассеянности добавляете в него чайную ложечку виноградного сока. Выглядит он нормально. Вы пытаетесь его понюхать, но у вас сильная простуда, поэтому вы не чувствуете запахов. Вам очень хочется пить. Вы выпиваете его.
А) Это опасная смесь.
Б) Это безопасная смесь.
Правильный ответ: 2. А)
Правильный ответ:>>> new
2. А) Все остальное НЕ надо знать.
3. Б) Зависимость.
4. На каком основании вы хотите его пить?
…>>> new
Правильный ответ: это ядовитые вещества.
…
Правильный ответ: «Всё готово.»
За сим, все…
P.S. Если сообщество подскажет, где можно разместить Модель, размером 5Gb (так, что бы она была доступна чем-то вроде wget) — я добавлю в статью ссылку на Colab notebook и любой желающий сможет погонять систему в живую… ;) А то мой домашний «хостинг», боюсь, не выдержит хабра-эффекта. А пока могу попробовать что получится с вашим текстом в качестве ввода, если кому интересно!
UPDATE: Сообщество в лице grigorov откликнулось, так что вот обещанный Блокнот! Теперь вы можете сами поэкспериментировать, сравнить с оригиналом (ссылка из поста DesertFlow GPT-2 нейросеть от OpenAI. Быстрый старт) и может быть сделать какие-то выводы. ;) Например: имеет ли значение язык при обучении языковой модели?
КОММЕНТАРИЙ АВТОРА: Привет,
да, конечно, не против — иначе бы я не выкладывал модель сюда.
>>>Имеет ли значение язык при обучении языковой модели?
Разумеется, имеет — я заметил, что модели с малым количеством параметров хуже работают с русским языком. Предполагаю, что это связано с более сложной (менее формализованной) семантикой русского, по сравнению с английским; я про это написал в моем writeup. Также, принятый в русском способ передачи диалогов, когда каждая реплика начинается с новой строки и предваряется тире, без указания, кому эти реплики принадлежат, совсем не помогает модели правильно идентифицировать структуру диалога (и вдобавок затрудняет тренировку, потому что модель учится структурировать любые тексты подобным образом — такой же эффект наблюдается, когда в данные для тренировки просачивается любой markup).
Еще один момент, который я упустил (мне он показался очевидным) — если хочется делать finetune этой модели, то нужно использовать тот sentencepiece словарь (sp.*), который идет вместе с моделью.
Также, при тренировке 1250M использовались в основном новости, пресса, и позже — фанфики, что отражается на характере результатов.