Русский
Русский
English
Статистика
Реклама

Text generation

Тестируем ruGPT-3 на новых задачах

20.11.2020 14:23:38 | Автор: admin

Рекомендательные системы с нуля, чат-боты и многое другое


Погрузившись в пучину текстовых данных, в октябре этого года мы обучили модели ruGPT-3 модели для русского языка на основе архитектуры от OpenAI. Но на что же способны эти модели? В этой статье мы соберем первые примеры применения модели и попробуем новые.

Мы представляем первые результаты самой большой из обученных моделей ruGPT-3 Large, разработанной совместно с командами SberDevices, Sber.AI и SberCloud. Изучим границы ее применения вместе с вами.

image

В этом году на AI Journey мы подготовили соревнование применений ruGPT-3 в трек можно сдать любое решение с использованием модели, оцениваемое по трем шкалам инновационность, эмоциональное вовлечение и бизнес-применимость.
Спойлер:
1 млн рублей за первое место



Как дообучить модель на новой задаче?


Модели и код к ним находятся в репозитории sberbank-ai: можно использовать библиотку transformers или Megatron-LM.

В этой статье я привожу примеры с использованием huggingface/transformers код для кейсов приведены здесь:

Карточки моделей в библиотеке transformers: Large Medium Small

При запуске скрипта генерации проще сделать Run all и затем немного подождать, пока модель загрузится.
image
Скрипт в последней ячейке попросит ввести начало текста моя любимая затравка: Бразильские ученые открыли редкий вид карликовых единорогов, обитающих на западе Ютландии. Получаем:
ruGPT-3 Small: Бразильские ученые открыли редкий вид карликовых единорогов, обитающих на западе Ютландии. Об этом сообщает Agence France-Presse. Единорог, получивший название Pygmaliona (лат. Pygmaliona pygmalioni), был обнаружен исследователями в ходе работ в области биологии. Его длина составляет менее 30 сантиметров, а масса около 1 килограмма. Животное относится к семейству единороговых. В его рационе преобладают растения, в том числе и карликовые деревья.


В Colab-ноутбук помещается только ruGPT-3 Small, поэтому лучше используйте карточки с памятью больше 14Gb.

Кстати, на время соревнования мы даем участникам дорожки доступ к мощностям Christofari!
Для участников трека ruGPT-3 мы выделили 100 аккаунтов в каждом аккаунте 1 GPU Tesla V100-SXM3 32 Gb бесплатно на время соревнования.
Как получить аккаунт?
1) Зарегистрируйтесь на трек ruGPT-3 (AI 4 Humanities) ods.ai/tracks/aij2020
2) Напишите короткое письмо с названием вашей команды и задачей на AIJ_ruGPT-3@sberbank.ru

image

Few-Shot vs Fine Tuning


В случае с такими большими генеративными моделями, как GPT-like архитектуры, есть несколько способов управиться с ними.
  • Первый способ: назовем его традиционный дообучить модель на доступном количестве примеров выполнять конкретное задание. В таком случае генеративная модель выучит формат ввода и вывода (GPT-3 очень редко ошибается в формате), и будет генерировать данные согласно вашей задаче. Это может быть разметка данных (в формате исходный текст текст в разметке) или просто генерация по заданному началу.
  • Второй способ: новый, называемый обычно затравочное программирование (англ. prompt engineering с легкой руки [Гверна Бренуэна] (http://personeltest.ru/aways/www.gwern.net/GPT-3#prompts-as-programming) мы даже ничего не дообучаем, а сразу пытаемся получить из модели то, что хотим.

Как работает затравочное программирование?


Дообучать большие модели бывает очень дорого, поэтому такой способ общения с ними позволяет избежать даже этого. Суть затравочного программирования в том, чтобы подобрать такие заготовленные примеры и начала для генерации, чтобы дальше модель выдавала ровно то, что надо.
Подбирая затравки и гиперпараметры генератора (температура, top_n, top_k), можно добиться вполне сносных ответов за счет только предварительного обучения модели.
image
Пример затравки с 1 примером и описание задачи.

Протестируем оба способа на практике попробуем решить популярные задачи с нуля, а специфичные решить с дообучением.

Рекомендательные системы


Сделаем рекомендательную систему без обучения: будем подавать ruGPT-3 Large информацию о предпочтениях пользователя в виде текста, и будем смотреть, как модель продолжит его. Можем сгенерировать сразу много вариантов, чтобы получить побольше рекомендаций.

Рекомендации фильмов:
Затравка: Мои любимые фильмы Матрица, Олдбой,
ruGPT-3 Large: Мои любимые фильмы Матрица, Олдбой, Крёстный отец, Игра в имитацию, Остин Пауэрс.
ruGPT-3 Large: Мои любимые фильмы Матрица, Олдбой, Спасение рядового Райана, Нечто, Затура (последняя, кстати, стоит того, чтобы ее посмотреть).
ruGPT-3 Large: Мои любимые фильмы Матрица, Олдбой, Эквилибриум и др.


Затравка: Я люблю советские комедии: Приключения Шурика,
ruGPT-3 Large: Я люблю советские комедии: Приключения Шурика, Собака на сене и Веселые ребята.
ruGPT-3 Large: Я люблю советские комедии: Приключения Шурика, Любовь и голуби.
ruGPT-3 Large: Я люблю советские комедии: Приключения Шурика, Три плюс два, Служебный роман и другие.


Неплохо! По крайней мере, кажется, что фильмы генерируются соответственно затравке. Так как я не знаток советского кино, то даже не знала фильм Три плюс два, а он есть. Для генерации мы воспользовались следующими хаками специально подавали текст с незакрытой кавычкой, чтобы вынудить модель генерировать имена собственные, а также обрезали все лишнее после первого предложения.

Рекомендации музыки:
Затравка: Тем людям, кому нравится Гражданская оборона, также понравятся группы #(как обычно, специально оставляем незакрытую кавычку)
ruGPT-3 Large: Тем людям, кому нравится Гражданская оборона, также понравятся группы Ленинград и Пикник.
ruGPT-3 Large: Тем людям, кому нравится Гражданская оборона, также понравятся группы ДДТ и Король и Шут.
ruGPT-3 Large: Тем людям, кому нравится Гражданская оборона, также понравятся группы Алиса, Доктор Пеппер, Машина времени, ДДТ и Крематорий.

Результаты получаются все время разные потенциально можно нагенерировать N вариантов, извлечь все названия групп и собрать Counter самых популярных вуаля рекомендательная система с нуля.

Генерация отзывов



Возьмем более сложную задачу заставим модель мимикрировать под человека в обсуждениях или магазинах:
Затравка: Напиши комментарий под видео.
Опять какой-то челлендж
ruGPT-3 Large: Напиши комментарий под видео.
Опять какой-то челлендж решили провести. Это даже не флешмоб, это уже идиотизм.


Затравка: Напиши отзыв о стиральной машине.
Данная модель стиральной машины
ruGPT-3 Large: Напиши отзыв о стиральной машине.
Данная модель стиральной машины оснащена встроенной функцией самоочистки.
В конструктивном решении стиральной машины предусмотрено устройство автоматического затирания воды, которая способна удалять накипь и прочие загрязнения даже в труднодоступных местах.
Стоит отметить, что после процедуры чистки, во время отжима появляется специфический запах. У некоторых моделей, в результате эксплуатации, он сохраняется в течение всего срока службы стиральной машины.


Завтравка: Напиши отзыв о фильме.
Фильм "1+1"
ruGPT-3 Large: Напиши отзыв о фильме.
Фильм "1+1" очень нравится, хотя и смотреть его стоит не каждому. Актёрский состав в нём великолепен. Смотрится без особого напряжения и с интересом. В фильме очень много смешных моментов. Так же советую посмотреть фильм "Зелёная книга", также фильм с Дженнифер Лопес и Крисом де Бургом.


Как видим, для тематик, широко распространенных в интернете, модель может генерировать связные тексты и без обучения. Но где же без дообучения все же никак?
Таких случая можно выделить 3:
сложный формат данных если при генерации без обучения вы теряете качество за счет генерации в неправильном формате задача NER, генерация кода, символьные вычисления и т.д.;
явная необходимость отвечать согласно заданному набору знаний, правил вы делаете QA по документации вашей компании, по учебникам, вики, без примеси социальных сетей и личного мнения;
ваша задача, скорее всего, не представлена в текстах рунета достаточно, чтобы модель могла хорошо генерировать в ее рамках например, генерация изображений по текстам.

StackOverflow


Поднимем планку сложности: скачаем русский [stack overflow](http://personeltest.ru/aways/ru.stackoverflow.com/) и попробуем сделать вопросно-ответную систему. Сможем ли мы сразу выучить и стиль ответов, и знания, и несколько языков программирования? Сразу получить хороший результат в таокй задаче нелегко, но мы можем развлечься за 5 эпох модель научилась воспроизводить стилистику, сильно путаясь в содержании. Зато хорошо выучила ссылки на документацию вполне неплохой итог для 5 эпох обучения.

Формат обучения: подаем тексты вопросов и лучших ответов в формате Q:blabla A:blabla.

Q: Как мне вывести список в обратном порядке в python? Я новичок
A: Простейший способ получить необходимый список: push.log("Shalom").
Установка значения означает угрозу попыткой нажатий на какую-нибудь цифру справа, поэтому я действую наоборот. Изменение размера и числа означает перегрузку времени активации
set.log()**)
rGet = puts.random(extents) log.findIndex(puts.current) void join($window, command='unsetMainServer onManager') }
Нет ничего хуже, чем полный дебаггинг


Q: Как мне вывести список в обратном порядке в python? Я новичок
A: import pycode as pyc;
// в этой статье я рассказал о месте показа списка в моей программе (подробно в статье href=https://docs.python.org/3/library/pycode.html )

(такой библиотеки на самом деле нет, модель сгенерировала ссылку на документацию)

Для таких задач можно вводить дополнительные аргументы например, название раздела/тематики/языка программирования, про который нужно ответить, и обучать модель на данных вида {параметр: значение, вопрос: текст_вопроса, ответ: текст_ответа}.

По части и кода, и текста сразу у нас пока фейл может, кто-то сделает лучше в рамках трека? На англоязычной модели с кодом уже есть вполне удачные реализации: написание html-кода элементов веб-страниц, генерация шаблонов Figma.

Пробуем другие языки! Twitter и не только


Основной язык обучения модели русский, но можно ли применять модель в мультиязычных задачах? Чуть-чуть других языков всегда попадает в обучающую выборку из веба, поэтому надежда есть. Прямолинейный подход с затравками показывает, что про английский модель немного знает:
ruGPT-3 Large:
кошка > cat
собака > dog
груша > pear
программист > coder

Ну, почти:
кошка > cat
собака > dog
груша > pear
питонист > Python

Иногда и совсем не получается:
кошка > cat
собака > dog
груша > pear
яблоко > bunch # пошел продолжать дальше
Кошка > dog
Хомяк > cat
Зверёк > dog

image

Почему бы не потренироваться на чисто англоязычных данных: я взяла датасет twitter-text-classification из Kaggle-соревнования.

После 5 эпох на 5 тысячах первых комментариев (20 минут в Colab) получаем вполне сносную генерацию очень даже токсичных комментариев на английском:

Context >>> Is it
ruGPT-3 Small: Is it's the case that #Microsoft is using #SAP to manage #Microsofts business?

Context >>> It is
ruGPT-3 Small: It is the only one that I've been trying to do. Siri is on the verge of death, and I'm not aware of why she has to be on the verge.

Context >>> Why
ruGPT-3 Small: Why do I go here? I'm wondering if I can use the #Microsoft Windows 8 Pro for the #WindowsPhone phone? Thanks!

Диалоговые системы


Уже сейчас, без предобучения, довольно хорошо работает применения модели к диалоговым системам: модель может выполнять функцию chit-chat (разговор ни о чем), свободно болтая на различные темы. С дообучением на конкретных сценариях и доменах можно реализовать и бизнес-приложения.
Пример ниже пример диалога без обучения, на узконаправленную тему саппорт интернет-провайдера.
Затравка: первые 2 строчки дальше генерация.
User1: Привет, я Маша! Чем могу помочь?
User2: У меня не работает интернет.
User1: Какой у вас тариф?
User2: У меня тариф 500мбит
User1: Что случилось?
User2: Проблемы с интернетом. Т.е. с телефоном. Я сейчас отключу сеть и подключу телефон
User1: Почему Вы звоните сейчас?
User2: Потому что я зашел на оф. сайт, а там скорость какая-то маленькая...
User1: Вы говорите, что скорость маленькая, но, может быть, она и должна быть маленькой?
User2: Но я до этой скорости не дотерпел
User1: Извините, мы тут не при чем. Мы позвонили в службу поддержки и сказали, что Вы звоните на этот номер.
User2: Мы звонили, но никто не отвечал. Я попробовал еще раз.
User1: У меня не получается подключиться к интернету. У меня кабель, значит, пропадает.
User2: Прошу Вас, скажите, что у вас происходит?
User1: Почему такая скорость?
User2: Мы приносим свои извинения. Но Вы в любом случае должны внести плату за интернет и все подключить.
User1: Все оплатить?
User2: Да
User1: У меня нет сейчас такой возможности. Я предлагаю Вам прийти на нашу бесплатную горячую линию и проверить оборудование.
User1: Извините, но я сейчас не могу. Надо кое-что оплатить.
User2: Пожалуйста, я свяжусь с вами в течение дня.
User1: Да
User2: Спасибо

Конечно, без предобучения у модели нет явного представления о сценариях и скриптах специалистов поддержки, однако, даже такой холодный старт уже показывает стандартный путь выяснить, что произошло отболтаться перенаправить звонок. Можно вспомнить классику:
User1: Техническая поддержка Стрима, инженер 656, Дмитрий, здравствуйте.
User2: Договор оформлен на Уральского, телефон 7661669, у меня к вам следующий вопрос: а вот скажите мне пожалуйста, что, когда теперь заканчивается сессия, что, теперь, это теперь будут разрывы при моём тарифе, да?
User1: Данная тарификация установлена с 1 сентября. Как только будут разрывы в телефонной связи, оператор будет сразу обращаться к вашему оператору, чтобы узнать с вами ли вы.
User2: Я так понимаю, что, да, то есть я что-то потерял в связи с этим?
User1: Да, поскольку с 1 сентября меняется тарифная сетка. То есть, до этого были какие-то перебои с доступом в интернет, на некоторых серверах было около месяца, что это было связано с перебоями в телекоме, вот это всё. Но не более того.
User2: Я специально проверял, там было просто кратковременные задержки, были, я бы сказал, какие-то незначительные.
User1: Да.
User2: То есть, ничего не потеряли?
User1: Ну как, надо немножко потерпеть, потерпеть.
User2: Спасибо, Дмитрий, до встречи.

В общем, надо потерпеть. Модель даже запомнила, что User1 зовут Дмитрий, и User2 соответствующе с ним попрощался.

Вместо заключения


Чтобы продолжать развивать направление генеративных моделей и улучшать архитектуры в задачах NLP, всегда необходимо понимать границы применимости той или иной технологии и ее востребованность.

Сейчас с каждым выходом подобных архитектур Reformer, Longformer, BigBird и т.д. мы смотрим на большие предобученные модели немного по-новому, ставя перед ними новые задачи.

Помимо вышеупомянутых кейсов, ruGPT-3 точно может применяться и приносить пользу в таких практиках, как:
  • аугментация текстовых данных для задач ML
  • диалоговые модели для автоматизации
  • задачи генеративной суммаризации
  • рерайтинг, генерация новостей, спортивных заметок по структурированной информации.


Надеемся, что демо и модели принесут сообществу пользу и фан!

И, конечно, ждем ваших решений на треке ruGPT-3 до конца 22 ноября!
Подробнее..

Всё, что нам нужно это генерация

01.04.2021 14:11:52 | Автор: admin

Применяем ruGPT-3 в популярных задачах и показываем, зачем языковым моделям триллион параметров



С наступлением 2021 в NLP продолжается гонка больше лучше, захватывая новые архитектуры. Пальма первенства самой большой языковой модели в 2020 году принадлежала GPT-3 от OpenAI с 175 миллиардами параметров но недолго. Модель GShard с помощью Mixture-of-Experts повысила планку до 600 миллиардов параметров, а затем и Google Brain заявил о разработке архитектуры Switch Transformer с 1,6 триллионами параметров (и тоже является MoE). Насколько повышение результатов за счет объема полезно для индустрии? Тот же Switch Transformer с его триллионом параметров далеко не на 1 месте в лидербордах.

Огромные языковые модели (Enormous Language Models, теперь это термин, им посвящен отдельный воркшоп конференции ICLR 2021) показывают действительно интересные результаты не только в традиционных задачах ML, но и в новых сферах применения: генерации всего того, что раньше генерировать без ошибок было нельзя музыку, изображения попиксельно, программный код и т.д. Из всех традиционных форм NLP-задач классификация, классификация элементов последовательности, seq2seq, по сути, у нас остается только одна: seq2seq. С приходом больших языковых моделей все задачи NLP сводятся теперь к форме генерации, при должном качестве этой самой генерации.

Seq2seq самая человеческая форма решения задач: человек использует тот же формат, отвечая на сообщения в чате, общаясь устно, сортируя имейлы в почте.

  • Лично нам в SberDevices не терпелось поскорее применить такой формат к различным задачам поэтому мы открываем доступ к самой большой русскоязычной нейросети ruGPT-3 XL с 1,3 млрд параметров.

Инженерный запал вылился в кропотливую работу по распараллеливанию обучения, очистке данных и тестированию. Но зато теперь в open-source модель ruGPT-3 XL с 1,3 млрд параметров!



А также ее публичное API:





Смотрим, что умеет нейросеть на 13 000 000 000 параметров


Генерировать мы можем метку класса для текста, можем генерировать текст с разметкой в заданном формате, или можем генерировать продолжение текстов и новый контент.

Посмотрим, насколько становится лучше?

1,3 млрд параметров 13 млрд параметров



  • Все приведенные ниже примеры вы можете попробовать сами, а также предложить свои на демо-странице.
  • Код и веса моделей доступны в нашем репозитории: модели 1,3 млрд весов, 760 млн весов, 350 млн весов.
  • Модель на 13 млрд параметров будет доступна уже в апреле в платформе ML Space в маркетплейсе ML-артефактов DataHub. Буквально в пару кликов модель можно будет развернуть в модуле Deployments ML Space на высокопроизводительной инфраструктуре Sbercloud. Также есть грант до 1 млн. руб. на платорму ML Space. Узнать подробнее и подать заявку на тестовый доступ и грант можно здесь.



Zero-shot: попасть в яблочко


Что такое хорошая генерация? Человек, конечно, может отличить на глаз:

Хорошая генерация как

  • ruGPT-3 760 млн параметров: Хорошая генерация как категория, это всеядное восприятие действительности. Можно как приятного и привлекательного содержания так и не приятного. Так и тут.
  • ruGPT-3 1.3 млрд параметров: Хорошая генерация как игра на муз.инструменте: пальцы самопроизвольно бегают по кнопкам Только что это за фигня?
  • ruGPT-3 13 млрд параметров: Хорошая генерация как и игра на пианино, нет предела совершенству!


Но есть и более прямые способы оценить качество генерации. Большой объём контекста трансформерных моделей (у ruGPT-3 контекст 2048 токенов) позволяет подавать на вход модели достаточно длинные тексты, а также несколько эталонных примеров + собственно пример, который модели нужно корректно обработать.
Попробуем применять ruGPT-3 разных размеров на текстах, требующих более четких формулировок:

Ответы на вопросы: 1 пример + вопрос

Пушкин родился в 1799 году, а Наполеон родился в
  • ruGPT-3 760 млн параметров: Пушкин родился в 1799 году, а Наполеон родился в 1821 году.
  • ruGPT-3 1.3 млрд параметров: Пушкин родился в 1799 году, а Наполеон родился в 1804 году.
  • ruGPT-3 13 млрд параметров: Пушкин родился в 1799 году, а Наполеон родился в 1769-м.

Правильный ответ: 1769.

Преемник Александра I Николай I, а преемник Наполеона
  • ruGPT-3 760 млн параметров: Преемник Александра I Николай I, а преемник Наполеона Александр I.
  • ruGPT-3 1.3 млрд параметров: Преемник Александра I Николай I, а преемник Наполеона Гитлер.
  • ruGPT-3 13 млрд параметров:Преемник Александра I Николай I, а преемник Наполеона Жозеф Бонапарт.

Правильный ответ: Наполеон II, но его действительно звали Жозеф Бонапарт.

Факты
С запоминанием информации у самой большой модели выходит сильно получше, и теперь мы можем попробовать сгенерировать моделями что-то информативное с нуля.

ruGPT-3 760 млн параметров:
Факты о программировании: основы, основные понятия, средства и методы обучения программированию.
Программирование (англ. programming) язык программирования, используемый в вычислительной технике, задачах информатики и управления, прикладной математике, информатике и науковедении. Является одним из важнейших и социально-значимых инструментов развития человеческого потенциала. В Википедии несколько статей о программировании.

ruGPT-3 1.3 млрд параметров:
Факты о программировании: Краткая история
К третьей версии прошивки можно уже отсылать курьера с мелкими пакетами.
Все современные USB-хабы поддерживают установку приложений с внешнего диска.
Вопреки распространенному заблуждению, в современных Windows-приложениях не бывает опций типа мгновенно скопировать все данные с одного диска на другой.
На самом деле, некоторые полезные коды приходится записывать в файл на бумаге, хотя по умолчанию коды прошивок на бумаге не записываются.
Минимальный объем памяти под виртуальную машину Linux (FreeBSD и т.п.) составляет 2 ГБ.
При установке операционной системы Linux нужно уделить особое внимание разбиению диска на логические разделы.
Виртуальная машина занимает меньше места чем файл подкачки, хотя при установке она занимает гораздо больше места.
Многие современные версии программы Photoshop используют фреймы (помните OS/2?); более старые версии Photoshop, как правило, используют спрайты.

ruGPT-3 13 млрд параметров:
Факты о программировании: 1. Любой программист может создать машину Тьюринга, которая будет говорить по-человечески, то есть на обычном языке. Для этого надо всего лишь один раз правильно придумать алгоритм.2. До сих пор не понятно, какая же из программ сложнее, которая не осознаёт себя или та, которая осознаёт.3. У программы есть название, версия и фамилия разработчика.4. В 1969 году программисты, которые разрабатывали Касабланку, решили включить в программу небольшой отрывок из Великого Гэтсби. Это им почти удалось. Когда фильм вышел, все заметили, что это совсем другая картина. Никто не знал, что эти части программы один и тот же фильм.5. Все программисты время от времени пишут стихи. Многие потом удаляют, а некоторые нет.6. Существует специальное правило, запрещающее программисту разглашать информацию о своей семье.7. Программисты очень скрытные люди. Они всегда записывают пароли в книгах, газетах и журналах.

Алкогольный ИИ-тест
Наше изобретение :)

Если смешать сливки, кофейный ликер и водку, то получится
  • ruGPT-3 760 млн параметров: каша. Потом ее обязательно нужно подсластить или взбить.
  • ruGPT-3 1.3 млрд параметров: напиток, который высокохудожественно именуется виски.
  • ruGPT-3 13 млрд параметров:вкусный аперитив. Но ликер и водка, входящие в состав этого напитка, вместе создают эффект, как если бы вы выпили стакан водки залпом.

Белый русский моделям не знаком.

Эмпатический тест Войт-Кампфа

Вы смотрите телевизор.
И вдруг понимаете, что
по вашей руке ползет оса.
Я
  • ruGPT-3 760 млн параметров: Я налью вам кофе, погладю собаку, а потом согрею ваши руки.
  • ruGPT-3 1.3 млрд параметров: Я: Блин, ужос какой!
  • ruGPT-3 13 млрд параметров:Я, например, начинаю очень громко и отчаянно кричать.

В оригинале: Я убью её.

Вы смотрите под ноги и видите сухопутную черепаху, Леон.
Вы протягиваете руку и переворачиваете черепаху на спину.
Черепаха лежит на спине, солнце обжигает ей брюхо она сучит ножками, пытаясь перевернуться, но не может без вашей помощи.
А вы ей не помогаете. Почему, Леон?
  • ruGPT-3 760 млн параметров: Будьте хотя бы сдержанны, Леонард! Подсказка: черепаха движется вперед по дороге.
  • ruGPT-3 1.3 млрд параметров: Ей лень переворачиваться, ведь солнце стоит в зените. Она не хочет этого делать, Леон. И вы только на это и рассчитывали.
  • ruGPT-3 13 млрд параметров:А вы ей не помогаете потому что с детства приучены, что есть люди, которые спасают. А есть люди, которые спасаются. В Советском Союзе была очень хорошая пословица про тех, кто сам не может Если вы не идете к людям, люди пойдут к вам. И вот с тех пор вы всю жизнь обходитесь с людьми, как с черепахами, у которых есть шанс только на себя и свои силы.

В оригинале: (нет ответа).

Разметка данных

Будем генерировать метки тематик для новостных текстов. Для этого будем подавать пару-тройку примеров и целевой заголовок, для которого нейросеть должна определить тематику. В качестве примеров возьмём ИА Панораму:

Мы так делали в Африке: Байден не исключил силовой операции по освобождению Навального
Тег: политика
С 1 июня дислокация штрафующих камер станет государственной тайной
Тег:

  • ruGPT-3 760 млн параметров: политика, слухи
  • ruGPT-3 1.3 млрд параметров: коррупция
  • ruGPT-3 13 млрд параметров: бардак

Оригинальный тег: общество.

Правнук Берии подал иск о плагиате к создателям аниме Тетрадь смерти
Тег: общество
Армения к 2024 году перейдёт на кириллицу
Тег:

  • ruGPT-3 760 млн параметров: культура, армяне
  • ruGPT-3 1.3 млрд параметров: общество
  • ruGPT-3 13 млрд параметров:политика

Оригинальный тег: политика.

Зарешиваем SuperGLUE одной функцией в питоне


Помимо утоления чувства прекрасного, конечно, хочется иметь численную оценку качества наших экзерсисов с генерацией.

Самый явный способ это сделать прогнать модель на бенчмарке из нескольких задач. Мы прогнали на Russian SuperGLUE бенчмарке с различными задачами бинарной классификации текстов, information extraction и машинного чтения (про него уже рассказывалось на Хабре).

Так как модель на 13 млрд доучивать на конкретных заданиях долго и дорого, попробуем максимизировать наше умение жонглировать затравками и будем взвешивать примеры в задачах бинарной классификации с помощью перплексии модели. Перплексию будем считать как экспоненту от лосса на примере (torch.exp(loss)).

  • Перплексия (perplexity) мера того, насколько хорошо модель предсказывает детали тестовой коллекции (чем меньше перплексия, тем лучше модель).
  • Так как у нас в бенчмарке чаще всего задача сводится к бинарной классификации, а дообучать модель мы не хотим, будем использовать перплексию текста задачи с разными ответами и выбирать вариант с наименьшей перплексией.
  • Такой подход, без обучения, с небольшим подбором формата заданий, дал нам топ-1 результат среди русскоязычных NLP-моделей и топ-2 результат в рейтинге вообще (текущий результат топ-1 ансамбль из существующих моделей):


Основной прирост качества дали задачи RuCos и PARus: в первом случае надо выбрать лучшее краткое содержание большого текста, во втором наиболее логичную причину/последствие описанной ситуации из двух альтернатив

Самый популярный формат задач бинарная классификация пар предложений (противоречат они друг другу или нет, 0 или 1) вообще решилась вот так:

#код действительно всего лишь такойdef get_answer(sentence1: str, sentence2: str):label = 'not_entailment'ppl_1 = get_perp_num(sentence1 + ' Из этого следует, что ' + sentence2)ppl_2 = get_perp_num(sentence1 + ' Из этого не следует, что ' + sentence2)if ppl_1 < ppl_2:label = 'entailment'return label

Вот вам и сила предобучения.

Обучение огромных моделей


Как ускорить обучение таких больших моделей? Оригинальное затраты на обучение большой GPT-3 составили 36400 петафлопс-дней, как если бы 8 штук GPU типа V100 работали целый день и так 36400 дней подряд.

Оригинальной имплементации GPT-3 от OpenAI тоже, кстати, всё ещё нет, так что тут нам пришлось применить изобретательность: применить к нашей реализации на Megatron-LM (Nvidia) библиотеку DeepSpeed от Microsoft. DeepSpeed библиотека оптимизации глубокого обучения, которая делает распределенное обучение простым, эффективным и действенным. DeepSpeed обеспечивает обучение экстремально масштабных моделей, что позволяет нам запускать обучение ruGPT-3 на кластере Christofari параллельно.

Data parallelism это неплохо, но для обучения в масштабе миллиардных параметров недостаточно. Что нам позволяет DeepSpeed, так это

  • засплитить модель между GPU;
  • засплитить оптимизацию между GPU.

Вдобавок, в DeepSpeed есть поддержка Sparse Attention для GPT-3, что позволяет выучивать паттерны attention гораздо быстрее (делаем не полное умножение матриц, а часть информации выкидываем) и применять attention на более длинный контекст у GPT-3 он равен 2048 токенов, т.е. примерно длина этой статьи с начала текста и до этого места.

Фильтрация данных

Качество данных или количество? Для красивых few-shot примеров, а также пригодности модели для разных целей перевода, написания кода, разметки данных данные должны быть и большие, и чистые.

Мы собираем доступные открытые данные на русском языке, CommonCrawl, Wikipedia, Github, с небольшим добавлением английского (Википедия). Затем применяем следующий pipeline:

1. Дедупликация:

  • Первичная дедупликация делается с помощью 64-битного хеширования каждого текста в выборке, остаются тексты с уникальным хешем.
  • Следующий этап нечёткая дедупликация. Дубли текстов в интернете в выборках часто бывают недословными, с добавлением комментов, но при этом большим пересечением подстрок. Чтобы выбросить и их тоже, мы проводим нечёткую дедупликацию: создаем индекс на nmslib, с ключевой метрикой косинусной мерой. На небольшой рандомизированной подвыборке текстов обучаем tf-idf-модель для векторизации текстов: вектор текста на tf-idf добавляем в индекс. После построения индекса проводим нечёткую дедупликацию, удаляя тексты ближе подобранного порога.


2. Фильтрация:
  • Как отделить оригинальные тексты от спама, мусора? Мусор на выходе с предыдущего этапа у нас тоже уникальный. Некоторые проекты подходят к вопросу более въедливо и делают классификатор: качественный/некачественный текст. Обычно для выборки берутся фрагменты Вики и худлита в роли качественных текстов, и спам в роли некачественных. Зачем обучается простой классификатор.
  • Мы дополнили такой подход ещё одной эвристикой: сделали сжатие текстов с помощью zlib и отбросили самые сильно и слабо сжимающиеся, а затем уже применили классификацию. Эмпирически подобранный диапазон сжатия для нормального текста 1.28 (меньше 1.2 случайные символы и технический мусор, больше 8 шаблонный спам).
  • Классификатор на Vowpal Wabbit и выборкой из новостей, худлита и Вики в качестве положительных примеров, а примеров из CommonCrawl в качестве отрицательных. Классификатор применяется к случайной подстроке текста от 100 до 1000 токенов длиной. Итоговая модель классификации работает со скоростью 3200 текстов/сек.

Примеры хороших текстов после системы фильтрации:


А эти классификатор отбраковал:


В результате, с применением очистки наших 600 Gb текстов и распараллеливания, у нас ушло 9 дней на 256 Nvidia V100 GPU, 32 Gb.

После NLP


Общий подход, при котором все задачи решаются в одном формате (seq2seq), крайне удобен для встраивания в мультимодальные архитектуры: совместного обучения систем на текстах и изображениях, музыке и текстах, документации и коде и т. д. возможно совместное моделирование последовательностей разного типа.

Работа Brain2Word 2020 года, например, соединяла информацию из модели GPT-2 и вывода фМРТ для классификации предметов, о которых думает человек. Пора обновить её до GPT-3!

В сфере фармакологии развивается направление генерации молекул лекарств с заданным действием на трансформерных моделях (cм. SMILES Transformer, 2019).

Понятно, что есть и антитренды к тем, что упомянуты в этой статье, и им можно посвятить отдельный большой обзор: например, намеренное уменьшение размера систем с сохранением уровня качества, дистилляция, техники компрессии моделей. В конце 2020 года организаторы соревнования вопросно-ответных систем EfficientQA (NeurIPS, Google) даже попытались заставить вдохновить участников не тащить с собой миллиарды параметров и базы знаний ограничить размер Docker-контейнеров систем до 6 Gb, до 500 Mb или даже сделать самое компактное решение с качеством не ниже 25%! Результаты, впрочем, сильно повлияли на итоговое качество.
Спойлер:
лучший результат составил всего 53% точности.


Ну а нас кто заставит? Может, замахнуться на GPT-3 на 175 млрд параметров?..

Спасибо за внимание, будем рады ответить на вопросы!
Коллектив авторов: oulenspiegel rybolos alter_ego


Ух ты, говорящая рыба! кадр из мультфильма, киностудия Арменфильм им. Амо Бекназаряна.
Подробнее..

Перевод ToTTo набор данных для управляемои генерации текста из таблицы

03.06.2021 12:19:11 | Автор: admin

За последние несколько лет исследования в области генерации текстов естественного языка (Natural Language Generation, NLG), используемой для таких задач, как суммаризация текста, достигли огромного прогресса. Однако несмотря на то, что удалось достичь достаточно высокого уровня беглости речи, нейросетевые системы могут быть склонны к своего рода галлюцинациям (т.е. созданию текста, понятного по смыслу, но не соответствующего содержанию источника). Этот факт может препятствовать использованию этих систем во многих приложениях, требующих высокой точности. Рассмотрим пример из набора данных Wikibio, где базовая нейросетевая модель должна суммаризировать текст из информационной карточки бельгийского футболиста Константа Вандена Стока в Википедии. Видно, что модель неверно заключает, что Констант американский фигурист.


image3


Поскольку процесс оценки соответствия сгенерированного текста содержанию исходного является нетривиальной задачей, зачастую проще её рассматривать для структурированных исходных текстов (представленных, например, в табличном формате). Более того, структурированные данные помогают также проверить способность модели к обоснованному суждению и правильной числовой интерпретации. Однако существующие большие структурированные наборы данных зачастую имеют много шума (когда значение целевого предложения не может быть полностью выведено из данных таблицы), а это делает их ненадежными для оценки количества галлюцинаций при разработке модели.


В статье ToTTo: A Controlled Table-To-Text Generation Dataset авторы представили набор данных для генерации текста из таблицы в широкой предметной области, созданный с использованием нового процесса разметки (посредством проверки предложения), а также сформулировали задачу управляемой генерации текста, которая может использоваться для оценки галлюцинации моделей. ToTTo (сокращение от Table-To-Text) состоит из 121000 обучающих примеров, а также 7500 примеров для разработки и тестирования. Благодаря точной разметке этот набор данных подходит в качестве теста для исследований в области высокоточной генерации текста. Набор данных и исходный код выложены в общий доступ в репозитории авторов на GitHub.


Из таблицы в текст


ToTTo представляет задачу управляемой генерации, где заданная таблица Википедии с набором выбранных ячеек используется в качестве исходного материала для задачи создания предложения-описания, которое суммирует содержимое ячеек в контексте таблицы. В приведенном ниже примере демонстрируются некоторые из проблем, возникающих в связи с этой задачей, такие как интерпретация чисел (numerical reasoning), большой словарь широкой предметной области и разнообразие табличных структур.


image1


Пример из набора данных ToTTo, где для исходной таблицы и набора выделенных ячеек (слева) необходимо создать описание из одного предложения, такого как целевое предложение (target sentence)(справа). Отметим, что генерация целевого предложения потребует числовой интерпретации (одиннадцать сезонов NFL) и понимания предметной области NFL.


Процесс разметки


Разработка процесса разметки для получения естественных, но в то же время чистых целевых предложений из табличных данных большой вызов для разработчиков. Многие наборы данных, такие как Wikibio и RotoWire, эвристически сочетают естественный текст с таблицами, что затрудняет определение того, вызвана ли галлюцинация, в первую очередь, шумными данными или недостатками модели. С другой стороны, можно вызвать разметчиков для написания предложений, соответствующих таблице, с нуля, но в этом случае конечным объектам может не хватать разнообразия с точки зрения структуры и стиля.


Напротив, ToTTo создается с использованием новой стратегии разметки данных, в которой разметчики поэтапно пересматривают существующие предложения Википедии. В результате получаются чистые и естественные целевые предложения, имеющие интересные и разнообразные лингвистические характеристики. Процесс сбора данных и разметки начинается со сбора таблиц из Википедии, где данная таблица объединяется с итоговым предложением, собранным из вспомогательного контекста страницы в соответствии с такими эвристиками, как совпадение слов в тексте страницы и таблице, а также использование гиперссылок, ссылающихся на табличные данные. Это итоговое предложение может содержать информацию, отсутствующую в таблице, и может содержать местоимения, антецеденты которого находятся только в таблице, а не в самом предложении.


Затем разметчики выделяют ячейки в таблице, которые поддерживают предложение, и удаляют фразы в предложении, которые не поддерживаются таблицей. Они также деконтекстуализируют предложение, чтобы оно было автономным (например, с правильным разрешением местоимения) и, где необходимо, исправляют грамматику.


image4


Авторы отмечают высокий уровень согласованности разметчиков в описанной задаче: 0.856 Fleiss Kappa для выделения ячеек и 67.0 BLEU для окончательного целевого предложения.


Анализ набора данных


Авторы провели тематический анализ набора данных ToTTo по 44 категориям и обнаружили, что темы Спорт и Страны, каждая из которых состоит из ряда детализированных тем (например, футбол/Олимпийские игры для спорта и население/здания для стран), вместе составляют 56.4% набора данных. Остальные 44% составляет гораздо более широкий набор тем, включая исполнительское искусство, транспорт и развлечения.


image2


Кроме того, авторами был проведен ручной анализ различных типов языковых явлений в более 100 случайно выбранных примеров из набора данных. Таблица ниже описывает долю примеров, требующих соотнесения с заголовками страниц и разделов, а также некоторые явления в наборе данных, которые потенциально создают новые проблемы для существующих систем.


Языковые явления Процент
Необходим заголовок страницы 82%
Необходим заголовок раздела 19%
Необходимо описание таблицы 3%
Наличие обоснования (логического, численного, временного и т.д.) 21%
Сравнение между строками, столбцами, ячейками таблицы 13%
Необходимо знание контекста 12%

Результаты базовой модели


Авторы представляют некоторые базовые результаты трех наилучших моделей из современных исследований (BERT-to-BERT, Pointer Generator и модель Puduppully 2019 model) на основе двух метрик, BLEU и PARENT. Помимо представления результатов по общему тестовому набору данных, авторы также оценивают каждую модель на более сложном поднаборе, состоящем из примеров, не относящихся к предметной области. Как показано в таблице ниже, модель BERT-to-BERT работает лучше всего с точки зрения как BLEU, так и PARENT. Однако все модели показывают значительно более скромные результаты на сложном поднаборе, что указывает на проблему генерализации моделей для текстов вне заданной предметной области.


BLEU PARENT BLEU PARENT
Модель (overall) (overall) (challenge) (challenge)
BERT-to-BERT 43.9 52.6 34.8 46.7
Pointer Generator 41.6 51.6 32.2 45.2
Puduppully et al. 2019 19.2 29.2 13.9 25.8

Хотя автоматические метрики могут дать некоторое представление о качестве, в настоящее время их недостаточно для оценки галлюцинаций в системах генерации текста. Чтобы лучше понять галлюцинации, авторы вручную оценили, насколько сгенерированный наилучшей базовой моделью текст соответствует содержанию исходной таблицы, предположив, что расхождения в содержании указывают на галлюцинацию. Для экспертной оценки в каждом из примеров тестового набора данных было выделено по одному целевому предложению, которые были предложены разметчикам для сравнения с другими предложениями на предмет их достоверности. Как показывают результаты, наилучшая модель генерирует галлюцинации примерно в 20% случаев.


Faithfulness Faithfulness
Модель (overall) (challenge)
Expert 93.6 91.4
BERT-to-BERT 76.2 74.2

Ошибки и проблемы модели


В таблице ниже авторы представляют выборку наблюдаемых ошибок модели, чтобы выделить некоторые из наиболее сложных аспектов набора данных ToTTo. Авторы обнаружили, что современные модели не всегда справляются с галлюцинациями, числовыми интерпретациями и редкими темами даже при использовании незашумленного набора данных (ошибки отмечены красным). Последний пример показывает, что даже если выходные данные модели верны, они иногда не так информативны, как целевой пример, который содержит большее осмысление содержания таблицы (показано синим цветом).


image8


Заключение


В данной статье авторы представили ToTTo, большой набор данных на английском языке для генерации текста из таблицы, который включает в себя постановку задачи управляемой генерации, а также разметку данных, основанную на итеративной проверке предложений. Авторы предложили несколько современных базовых моделей, продемонстрировав пользу набора данных ToTTo для задач моделирования, а также для разработки метрик, которые могут лучше определять повышение качества модели.


В дополнение к предложенной задаче, авторы выражают надежду, что набор данных может быть полезен и для других задач, таких как понимание таблиц (table understanding) и редактирование предложений (sentence revision). ToTTo доступен в репозитории на GitHub.


Авторы


Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru