̶с̶а̶м̶̶о̶изолента мёбиуса
2.44K subscribers
13 photos
2 videos
1 file
191 links
Костыли и технологии для обработки естественных языков. Обзоры статей и личный опыт. by @cointegrated
Download Telegram
#sotanlu
Решил в ближайший месяц сделать обзор бенчмарков основных NLU задач: датасетов, на которых меряются, и моделек, которые на них лидируют.
Начал с русского бенчмарка sentence embeddings на четырёх задачках от DeepPavlov: https://github.com/deepmipt/deepPavlovEval
1) Paraphraser - определить, являются ли пара предложений одинаковыми по смыслу
2) MSRVid - определить, на сколько шакалов два предложения похожи друг на друга
3) XNLI - правильно классифицировать логическую связь между двумя предложениями
4) Rusentiment (уже закрытый датасет, но его можно найти) - классификация тональности комментов из VK
Код из этой репы вполне запускается.
Завтра попробую прогнать через него современные эмбеддеры. Должно получиться ощутимо лучше, чем модельки из самого репозитория.
#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 всё ещё не "решён". Так что, похоже, человечеству нужен новый бенчмарковый датасет.
#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 яндекс.переводчика выдаёт какой-то трэш, а другие онлайн переводчики чё-то дороговаты.
Надеюсь, удастся с кем-нибудь скооперироваться и перевести этот датасет вскладчину)