̶с̶а̶м̶̶о̶изолента мёбиуса
2.34K subscribers
13 photos
2 videos
1 file
180 links
Костыли и технологии для обработки естественных языков. Обзоры статей и личный опыт. by @cointegrated
Download Telegram
#sotanlu
Решил в ближайший месяц сделать обзор бенчмарков основных NLU задач: датасетов, на которых меряются, и моделек, которые на них лидируют.
Начал с русского бенчмарка sentence embeddings на четырёх задачках от DeepPavlov: https://github.com/deepmipt/deepPavlovEval
1) Paraphraser - определить, являются ли пара предложений одинаковыми по смыслу
2) MSRVid - определить, на сколько шакалов два предложения похожи друг на друга
3) XNLI - правильно классифицировать логическую связь между двумя предложениями
4) Rusentiment (уже закрытый датасет, но его можно найти) - классификация тональности комментов из VK
Код из этой репы вполне запускается.
Завтра попробую прогнать через него современные эмбеддеры. Должно получиться ощутимо лучше, чем модельки из самого репозитория.
#ботоводство
Ещё один челендж, который я себе тоже уготовил на ближайший месяц - ежедневно выкатывать какую-нибудь полезную фичу в пространстве моих ботиков.
Сегодня катнул первую: научился расклеивать пиплбук для КВ на множество сообществ.
Это значит, что теперь я могу штамповать примерно такие странички в больших количествах.
#ботоводство
Продолжение первой ботной фичи: расклеил уже и пипл-кофе-бота на множество ботиков.
Казалось бы, чего проще: был один объект, стало много.
Но чтобы сделать это нормально и масштабируемо, ушёл целый день рефакторинга, вылившийся в +706 −352 строк кода.
Ещё чуть-чуть наведения красоты - и пиплботов можно будет клонировать как захочется.
#sotanlu
Вернулся к теме NLU-бенчмарков, продолжаю расковыривать русскоязычные sentence embeddings.
На четырёх задачках от DeepPavlov Laser ожидаемо отработал лучше, чем все берты и элмы, которые DP пробовал (ну, кроме парочки подогнанных под домен).
Маленький, свёрточный USE обогнал Laser на MSRVid (какой-то странный этот датасет, конечно). Большой USE обогнал Laser на всех задачах, кроме XNLI.

И да, я нашёл ещё один набор задач для бенчмарка, на этот раз от Вышки, и у них даже есть пейпер. Жаришка!
Удивительно, правда, что и вышкинские ребята не включили в свои бенчмарки ни Laser, ни USE. Чё-то падазрительна.
̶с̶а̶м̶̶о̶изолента мёбиуса
#ботоводство По ботам продолжил распиливание: сделал выдаваемые пиплботом реплики кастомизируемыми под конкретное сообщество.
#ботоводство
Следующий шаг: сделал страничку с формой, позволяющей админу сообщества непосредственно настраивать эти реплики и кое-что ещё.
̶с̶а̶м̶̶о̶изолента мёбиуса
#ботоводство Следующий шаг: сделал страничку с формой, позволяющей админу сообщества непосредственно настраивать эти реплики и кое-что ещё.
#ботоводство
Следующий шаг: сделал ботика, который позволяет регистрировать новые сообщества и авторизовывает на той самой админской страничке с формой.
#sotanlu
По NLP начал разбирать статью про GPT-3. Она чё-то здоровая, и до конца пока не дошёл. Но смысл в том, что новый GPT ещё пизже, чем предыдущие, решает новые задачи чисто по тестовому описанию, без дообучения на них.

Upd. Дочитал. Архитектура нейронки та же самая, что и в GPT-2, но размер ещё больше. Обучались на common crawl и нескольких датасетах почище. И попробовали больше разных применений.

Основная идея - показать, что достаточно большая языковая модель может "адаптироваться" к новым задачам без файн-тюнинга (т.е. без изменения весов), принимая примеры вопросов и ответов на вход, просто как префикс текста. В итоге по некоторым задачкам (собственно языковое моделирование, пара задач на reading comprehension) удалось побить SOTA, зафайнтюненные под эти задачи, и ещё по нескольким - подойти к этому уровню достаточно близко. Отдельно авторы показывают, что таким макаром можно решить задачи, не очень похожие на обучающие данные - перевод, арифметику, расшифровку анаграмм (последнее особенно удивительно, учитывая большой BPE словарь).

Понятно, зачем это нужно: хочется не создавать зафайнтюненную модель под каждую новую задачу (это сложненько, и легко переобучиться), а иметь one model to rule them all. И демонстрация, что так можно, конечно, впечатляет. Но для индустрии этот результат примерно бесполезный: одна огроменная модель, которая перформит неидеально, всё-таки менее привлекательно, чем набор маленьких и наилучших на своей задаче моделек. Конечно, то, что сейчас SOTA, маленьким и так в основном не назовёшь, но это уже отдельная проблема.
#sotanlu
В своём путешествии по SOTA NLU решил заглянуть на бенчмарк GLUE от 2018 года, который уже успели сильно (и за дело) закритиковать, но который таки породил кучу всего полезного. В частности, BERT стал известен во многом благодаря прорыву именно на этом бенчмарке.

Итак, из чего сделан GLUE? Это 9 задачек, в каждой из которых надо классифицировать или одно предложение, или их пару. То есть в принципе, казалось бы, бенчмарк можно решить, имея очень крутой sentence encoder. Но на самом деле история пошла другим путём, путём кросс-атеншна, который по понятным причинам заводится на парах предложений сильно проще.

Итак, задачки:
- CoLA: является ли предложение грамматически корректным;
- SST-2: двухклассовый анализ тональности (позитивно/негативно окрашенные предложения);
- MRPC, QQP: классификация пар предложений - являются ли они семантически эквивалентными;
- STS-B: то же самое, только предложения разделены на 5 классов похожести.
- MNLI, RTE: классификация отношения между парой предложений: второе следует из первого, или противоречит ему, или ни то ни другое.
- QNLI: содержит ли первое предложение ответ на вопрос, заданный во втором
- WNLI: тоже классификация, следует ли второе предложение из первого, но особого вида: второе предложение - это первое, в котором местоимение заменили объектом, который оно обозначает, либо неподходящим объектом. То есть это попытка загнать winograd schema challenge в формат классификации предложений.

На момент публикации бенчмарка наилучший средний скор по всем моделькам был 0.7 - у BiLSTM поверх ELMO-эмбеддингов. BERT поднял его до 0.8, а сейчас он уже 0.9. Так что можно действительно считать, что GLUE практически решён. Тем более что кожаные мешки, и не просто мешки, а лингвисты, решили его всего лишь на 0.87.

Именно поэтому в прошлом году выкатили новый бенчмарк - SuperGLUE. Хотя и на нём модель T5 от Google уже почти догнала своих белковых создателей. Но пока только "почти".
̶с̶а̶м̶̶о̶изолента мёбиуса
#sotanlu В своём путешествии по SOTA NLU решил заглянуть на бенчмарк GLUE от 2018 года, который уже успели сильно (и за дело) закритиковать, но который таки породил кучу всего полезного. В частности, BERT стал известен во многом благодаря прорыву именно на…
#sotanlu
Пришла очередь статьи про SuperGLUE. Этот бенчмарк выкатили спустя год после GLUE, который уже дорешали до сверх-человеческого уровня. В нём 8 задач:
- BoolQ: Дан абзац текста и бинарный вопрос про этот абзац (ответ "да" или "нет"), на который надо ответить;
- CB: Дан абзац текста и отдельное утверждение из текста, и надо определить, считает ли автор текста это утверждение истинным или ложным;
- COPA: Дано предложение и ещё два, и надо определить, какое из этих двух является причиной либо следствием данного;
- MultiRC: Дан абзац, вопрос по нему, и список ответов, которые надо разметить как истинные или ложные;
- ReCoRD: Дан абзац и вопрос по нему с пропущенным словом, которое надо восстановить из предложенных вариантов;
- RTE - как и в GLUE, надо определить, следует ли второе предложение из первого;
- WiC - даны два предложения, в которых используется одно и то же слово, и надо предсказать, в одном и том же смысле ли оно использовано;
- WSC - надо выбрать, относится ли местоимение в тексте к предложенной сущности из этого же текста.

Прокачанны BERTовый бейзлайн набрал на этих задачах в среднем 71.5 балл из 100, а живые люди - 89.8. Из чего авторы статьи сделали заключение, что задачи в целом сложные, и нужно ещё много ботать, прежде чем человечество научит машины их решать.
А потом ребята из Фейсбука обучили свой BERT c парой улучшений, RoBERTa, и набрали 84.6 балла тупо за счёт аккуратности.
А ещё потом гугловский T5 (seq2seq трансформер, обобщение BERT и GPT) набрал уже 89.3 балла, а NLU всё ещё не "решён". Так что, похоже, человечеству нужен новый бенчмарковый датасет.
#ботоводство
Сегодня решил отдохнуть от пипблота, и вернулся к @the_watchman_bot на денёк - поправил кнопки в режиме коуча, добавил счётчик вопросов и дополнительный вопрос для обратной связи.
Сейчас думаю, что ещё сделать со Стражником, чтобы сделать его пизже.
Наверное, правильный ответ: пойти поспрашивать людей.
#sotanlu
Начал разбираться с вышкинским бенчмарком, и вижу, что всё плохо. 🤦

Но начнём с конструктивного. Речь идёт об этой статье: https://arxiv.org/abs/1910.13291
Ребята взяли три GLUE-подобных датасета, и бенчмаркают эмбеддинги предложений на них:
1) MCQA: ребята наскрапали вопросы из части А ЕГЭ по разным предметам, и задача для модельки - выбрать правильный ответ из четырёх предложенных. Правильный ответ - обычно короткая именная фраза; иногда она является продолжением предложения-вопроса, иногда - отдельным предложением. В целом задача дофига сложная: для её решения нужно шарить не только в русском языке, но и в школьных предметах.
2) NSP: из датасета Ленты взяли коротких абзацев, разрезали каждый пополам в случайном месте, и к каждой левой половинке нашли три отрицательных примера, заканчивающихся на те же три слова. Задача - из четырёх продолжений левой половинки выбрать то, которое следовало именно за ней. Задачка кажется полегче предыдущей (по крайней мере, для человека), но именно sentence embedder может с ней не очень хорошо справляться, т.к. сами предложения - рваные. Если в обучающей выборке такого не было, моделька может начать выдавать хрень.
3) PI: всё тот же мой любимый датасет paraphraser.ru, который использовали и в deepPavlovEval, собранный из заголовков новостей.

Вышкинцы, как и диппавловские физтехи, сравнивают fasttext, ELMO и BERT, забывая почему-то и про ванильные w2v, и про клёвые мультиязычные USE и Laser. Я честно не понимаю, почему.

Теперь о плохом:
Во-первых, код писали студенты, и он не запускается. До того, что в разных файлах сигнатуры одной и той же функции разные. Попробую их помучить, конечно. Но, возможно, попытка воспроизведения этого добра - дурацкая затея.
Во-вторых, (1) и (2) задачи - конечно, интересные, но не очень похожи на те прикладные задачи, для которых мне на самом деле хотелось бы использовать эмбеддинги предложений. И потому не очень понятно, насколько они вообще полезны для оценки тех моделек, которые я собираюсь изучать.

Впрочем, мне настолько нравится само намерение вышкинских ребят, что его стрёмную реализацию я готов простить 🙂
#sotanlu
Я в марте писал про многофункционального чатбота от Фейсбука, и один из датасетов, на которых он учился - Empathetic Dialogue.
Этот датасет собрали тоже в Facebook Research и написали про него пейпер: https://arxiv.org/abs/1811.00207
Сам датасет - 25К коротеньких диалогов, собранных на MechanicalTurk, где один спикер ("рассказчик") изображает определенную эмоцию и жизненную ситуацию, с которой она связана, а другой ("слушатель") его активно слушает и эмпатично отвечает. Типа такого:
- Got a bag of candy I'm polishing off. Diabetes be damned
- uh oh! Have you checked your sugar lately?
- I haven't gotten a physical in over a year.
- After that bag of candy, you may want to!

Ребята попробовали пообучать на этих данных разные болталки, и оказалось, что retrieval-болталки по-прежнему работают лучше генеративных, и что сильно помогает перед искомым текстом довписать теги: выделенные из него отдельными классификаторами эмоцию или тему. И что в целом болталки справляются неплохо - эмпатичность и релевантность оцениваются людьми на 4 балла из 5, а fluencу на все 4.6 (как у хьюманов - но это и неудивительно, если ты отвечаешь готовыми фразами).

Прочитав эту статью, я предпринял героическую попытку перевести этот датасет на русский, чтобы встроить в своего бота. Конечно же, не вышло - API яндекс.переводчика выдаёт какой-то трэш, а другие онлайн переводчики чё-то дороговаты.
Надеюсь, удастся с кем-нибудь скооперироваться и перевести этот датасет вскладчину)
А вот что я писал про большого фейсбучного чатбота
Forwarded from Матчасть
Недавно Facebook Research опубликовали статью про нового чатбота. Вот их блогпост: https://ai.facebook.com/blog/state-of-the-art-open-source-chatbot/. Если у вас нет времени или большого интереса, почитайте его. Если время и интерес есть, почитайте и их большую статью. Она длинная, но затрагивает много вещей, важных для понимания текущего состояния чатботов и NLP в целом. В частности:

1. Размеры моделей продолжают расти. Фейсбучная модель втрое жирнее, чем гугловская Meena (предыдущая SOTA); в ней уже почти 10 миллиардов параметров. Хотя по качеству этот гигант вроде не сильно лучше, чем втрое меньшая модель.
2. Разработчики сблендили несколько подходов к генерации диалоговых ответов и несколько разных датасетов, сфокусированных на диалоговых навыках. Получилась кракозябра, работающая ожидаемо лучше, чем более узкоспециализированые модельки.
3. Для генерации ответов использовали (А) retrieval-модельку, выбирающую ответ, наиболее подходящий под контекст, из готового набора ответов. (Б) классический seq2seq трансформер, генерирующую ответ слово-за-словом, глядя на контекст и готовый префикс ответа. (В) их гибрид, так же генерирующий ответ слово-за-словом, но но глядя так же на ответ, предложенный retrieval-моделью, или на подтянутый по ключевым словам абзац из Википедии.
4. Файн-тюнили модели на трёх датасетах: ConvAI2 (диалоги, где участники общались с учётом описания приписанного им персонажа), Empathetic Dialogues (где один участник описывал свою ситуацию, а другой эмпатично активно слушал), и Wizard of Wikipedia (где обсуждение строилось вокруг релевантного абзаца из Википедии). Разнообразные задачи - разнообразное и поведение получившегося бота.
5. Разные боты друг с другом сравнивались ассессорами side-by-side. Это не настолько секси, как более явные числовые метрики по отдельно взятому диалогу, зато, возможно, результат получается менее шумным.
6. Если оценивать диалоги бота с ботом, то модель с поиском по готовым ответам работает лучше, чем модель с генерацией ответов пословно. А если оценивать диалоги бота с человеком, то наоборот. Из этого следует как минимум то, что бот общается с ботом как-то существенно иначе, чем человек. И ещё, что retrieval подход сдаёт свои позиции довольно медленно.
7. При генерации ответов дофига важно ограничивать пространство возможных реплик. В частности, не допускать слишком коротких ответов или ответов с повторяющимися словами. В результате применения этих простых фильтров качество растёт прям существенно. В ходе своих экспериментов товарищи из фейсбука применяли разные фильтры, и, возможно, непонятные результаты из предыдущего пункта объясняются именно этим.
Forwarded from Матчасть
8. Авторы статьи умнички и самостоятельно находят косяки в своём чатботе. Самый неприятный из них - это, кажется, забывчивость, например, когда бот снова и снова задаёт один и тот же вопрос. Другая особенность бота - что он уворачивается от углубления в любой разговор, предлагая сменить тему. Что предлагает тему - это хорошо, но что уклоняется от ответов - не очень. И ещё одно слегка бесящее свойство этого и других ботов - когда у них нет фактического ответа, они не сознаются в этом, а выдумывают его.
9. Авторы статьи справедливо замечают, что качество человеческой оценки бота не определяется его перплексией на тестовых диалогах, ибо и тестовые диалоги могут быть разные, и для одной и той же модели разные алгоритмы декодирования дают разное качество.

Итак, Гугл свой чатботный ход сделал зимой, Фейсбук - весной. Ждём, кто выступит следующий (:
#ботоводство
Продолжаю работать над @the_watchman_bot - поправил в нём приветственное сообщение и пунктуацию в болталке.
Ещё провёл эксперимент: разослал сегодня всем-всем злободневный вопрос про карантин. Надеялся, что отклик будет повышенный, но по факту нет.
Посмотрел, сколько лайков-дизлайков поставили за месяц с их внедрения, и оказалось, что уже почти тысячу. Это вполне можно использовать для настройки рекомендательной системы.
Впилил пока что примитивного "бандита": вопросы с высоким профицитом лайков над дизлайками показываются чаще, но не слишком, чтобы всех не заспамить.
Посмотрим, отразится ли это как-нибудь на метриках.
#ботоводство
Сегодня внезапно мой костыльный навык "Искатель навыков" репостнули как "навык среды" в канале "Около Яндекс.Станции" @yandexdb
Пришлось срочно лезть читать его логи и закрывать самые большие косяки, пока пользователей не набежало.
Чуть улучшил регулярками NLU, добавил перелистывание страниц поиска.
В ближайшие дни буду ещё собирать логи и улучшать.
̶с̶а̶м̶̶о̶изолента мёбиуса
#ботоводство По ботам: научился сохранять аватарки юзеров из телеграма. Должно помочь автоматически составлять пиплбуки из приветствий.
#Ботоводство
Вернулся к пиплботу и за последние два дня добавил туда базовую функциональность бота-вахтёра: если его настроить, бот может требовать от вступающих в чатик хуизы, и заносит их тексты в пиплбук.