#ботоводство
Сегодня решил отдохнуть от пипблота, и вернулся к @the_watchman_bot на денёк - поправил кнопки в режиме коуча, добавил счётчик вопросов и дополнительный вопрос для обратной связи.
Сейчас думаю, что ещё сделать со Стражником, чтобы сделать его пизже.
Наверное, правильный ответ: пойти поспрашивать людей.
Сегодня решил отдохнуть от пипблота, и вернулся к @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) задачи - конечно, интересные, но не очень похожи на те прикладные задачи, для которых мне на самом деле хотелось бы использовать эмбеддинги предложений. И потому не очень понятно, насколько они вообще полезны для оценки тех моделек, которые я собираюсь изучать.
Впрочем, мне настолько нравится само намерение вышкинских ребят, что его стрёмную реализацию я готов простить 🙂
Начал разбираться с вышкинским бенчмарком, и вижу, что всё плохо. 🤦
Но начнём с конструктивного. Речь идёт об этой статье: 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, где один спикер ("рассказчик") изображает определенную эмоцию и жизненную ситуацию, с которой она связана, а другой ("слушатель") его активно слушает и эмпатично отвечает. Типа такого:
Ребята попробовали пообучать на этих данных разные болталки, и оказалось, что retrieval-болталки по-прежнему работают лучше генеративных, и что сильно помогает перед искомым текстом довписать теги: выделенные из него отдельными классификаторами эмоцию или тему. И что в целом болталки справляются неплохо - эмпатичность и релевантность оцениваются людьми на 4 балла из 5, а fluencу на все 4.6 (как у хьюманов - но это и неудивительно, если ты отвечаешь готовыми фразами).
Прочитав эту статью, я предпринял героическую попытку перевести этот датасет на русский, чтобы встроить в своего бота. Конечно же, не вышло - API яндекс.переводчика выдаёт какой-то трэш, а другие онлайн переводчики чё-то дороговаты.
Надеюсь, удастся с кем-нибудь скооперироваться и перевести этот датасет вскладчину)
Я в марте писал про многофункционального чатбота от Фейсбука, и один из датасетов, на которых он учился - 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. При генерации ответов дофига важно ограничивать пространство возможных реплик. В частности, не допускать слишком коротких ответов или ответов с повторяющимися словами. В результате применения этих простых фильтров качество растёт прям существенно. В ходе своих экспериментов товарищи из фейсбука применяли разные фильтры, и, возможно, непонятные результаты из предыдущего пункта объясняются именно этим.
1. Размеры моделей продолжают расти. Фейсбучная модель втрое жирнее, чем гугловская Meena (предыдущая SOTA); в ней уже почти 10 миллиардов параметров. Хотя по качеству этот гигант вроде не сильно лучше, чем втрое меньшая модель.
2. Разработчики сблендили несколько подходов к генерации диалоговых ответов и несколько разных датасетов, сфокусированных на диалоговых навыках. Получилась кракозябра, работающая ожидаемо лучше, чем более узкоспециализированые модельки.
3. Для генерации ответов использовали (А) retrieval-модельку, выбирающую ответ, наиболее подходящий под контекст, из готового набора ответов. (Б) классический seq2seq трансформер, генерирующую ответ слово-за-словом, глядя на контекст и готовый префикс ответа. (В) их гибрид, так же генерирующий ответ слово-за-словом, но но глядя так же на ответ, предложенный retrieval-моделью, или на подтянутый по ключевым словам абзац из Википедии.
4. Файн-тюнили модели на трёх датасетах: ConvAI2 (диалоги, где участники общались с учётом описания приписанного им персонажа), Empathetic Dialogues (где один участник описывал свою ситуацию, а другой эмпатично активно слушал), и Wizard of Wikipedia (где обсуждение строилось вокруг релевантного абзаца из Википедии). Разнообразные задачи - разнообразное и поведение получившегося бота.
5. Разные боты друг с другом сравнивались ассессорами side-by-side. Это не настолько секси, как более явные числовые метрики по отдельно взятому диалогу, зато, возможно, результат получается менее шумным.
6. Если оценивать диалоги бота с ботом, то модель с поиском по готовым ответам работает лучше, чем модель с генерацией ответов пословно. А если оценивать диалоги бота с человеком, то наоборот. Из этого следует как минимум то, что бот общается с ботом как-то существенно иначе, чем человек. И ещё, что retrieval подход сдаёт свои позиции довольно медленно.
7. При генерации ответов дофига важно ограничивать пространство возможных реплик. В частности, не допускать слишком коротких ответов или ответов с повторяющимися словами. В результате применения этих простых фильтров качество растёт прям существенно. В ходе своих экспериментов товарищи из фейсбука применяли разные фильтры, и, возможно, непонятные результаты из предыдущего пункта объясняются именно этим.
Meta
A state-of-the-art open source chatbot
Today we’re announcing that Facebook AI has built and open-sourced BlenderBot, the largest-ever open-domain chatbot. It outperforms others in terms of engagement and also feels more human, according to human evaluators.
Forwarded from Матчасть
8. Авторы статьи умнички и самостоятельно находят косяки в своём чатботе. Самый неприятный из них - это, кажется, забывчивость, например, когда бот снова и снова задаёт один и тот же вопрос. Другая особенность бота - что он уворачивается от углубления в любой разговор, предлагая сменить тему. Что предлагает тему - это хорошо, но что уклоняется от ответов - не очень. И ещё одно слегка бесящее свойство этого и других ботов - когда у них нет фактического ответа, они не сознаются в этом, а выдумывают его.
9. Авторы статьи справедливо замечают, что качество человеческой оценки бота не определяется его перплексией на тестовых диалогах, ибо и тестовые диалоги могут быть разные, и для одной и той же модели разные алгоритмы декодирования дают разное качество.
Итак, Гугл свой чатботный ход сделал зимой, Фейсбук - весной. Ждём, кто выступит следующий (:
9. Авторы статьи справедливо замечают, что качество человеческой оценки бота не определяется его перплексией на тестовых диалогах, ибо и тестовые диалоги могут быть разные, и для одной и той же модели разные алгоритмы декодирования дают разное качество.
Итак, Гугл свой чатботный ход сделал зимой, Фейсбук - весной. Ждём, кто выступит следующий (:
#ботоводство
Продолжаю работать над @the_watchman_bot - поправил в нём приветственное сообщение и пунктуацию в болталке.
Ещё провёл эксперимент: разослал сегодня всем-всем злободневный вопрос про карантин. Надеялся, что отклик будет повышенный, но по факту нет.
Посмотрел, сколько лайков-дизлайков поставили за месяц с их внедрения, и оказалось, что уже почти тысячу. Это вполне можно использовать для настройки рекомендательной системы.
Впилил пока что примитивного "бандита": вопросы с высоким профицитом лайков над дизлайками показываются чаще, но не слишком, чтобы всех не заспамить.
Посмотрим, отразится ли это как-нибудь на метриках.
Продолжаю работать над @the_watchman_bot - поправил в нём приветственное сообщение и пунктуацию в болталке.
Ещё провёл эксперимент: разослал сегодня всем-всем злободневный вопрос про карантин. Надеялся, что отклик будет повышенный, но по факту нет.
Посмотрел, сколько лайков-дизлайков поставили за месяц с их внедрения, и оказалось, что уже почти тысячу. Это вполне можно использовать для настройки рекомендательной системы.
Впилил пока что примитивного "бандита": вопросы с высоким профицитом лайков над дизлайками показываются чаще, но не слишком, чтобы всех не заспамить.
Посмотрим, отразится ли это как-нибудь на метриках.
#ботоводство
Сегодня внезапно мой костыльный навык "Искатель навыков" репостнули как "навык среды" в канале "Около Яндекс.Станции" @yandexdb
Пришлось срочно лезть читать его логи и закрывать самые большие косяки, пока пользователей не набежало.
Чуть улучшил регулярками NLU, добавил перелистывание страниц поиска.
В ближайшие дни буду ещё собирать логи и улучшать.
Сегодня внезапно мой костыльный навык "Искатель навыков" репостнули как "навык среды" в канале "Около Яндекс.Станции" @yandexdb
Пришлось срочно лезть читать его логи и закрывать самые большие косяки, пока пользователей не набежало.
Чуть улучшил регулярками NLU, добавил перелистывание страниц поиска.
В ближайшие дни буду ещё собирать логи и улучшать.
̶с̶а̶м̶̶о̶изолента мёбиуса
#ботоводство По ботам: научился сохранять аватарки юзеров из телеграма. Должно помочь автоматически составлять пиплбуки из приветствий.
#Ботоводство
Вернулся к пиплботу и за последние два дня добавил туда базовую функциональность бота-вахтёра: если его настроить, бот может требовать от вступающих в чатик хуизы, и заносит их тексты в пиплбук.
Вернулся к пиплботу и за последние два дня добавил туда базовую функциональность бота-вахтёра: если его настроить, бот может требовать от вступающих в чатик хуизы, и заносит их тексты в пиплбук.
̶с̶а̶м̶̶о̶изолента мёбиуса
#sotanlu Пришла очередь статьи про SuperGLUE. Этот бенчмарк выкатили спустя год после GLUE, который уже дорешали до сверх-человеческого уровня. В нём 8 задач: - BoolQ: Дан абзац текста и бинарный вопрос про этот абзац (ответ "да" или "нет"), на который надо…
SuperGLUE вообще-то достоин того, чтобы разобрать его поподробнее. Пойдём прямо по порядочку.
Первая задача взята из статьи The CommitmentBank: Investigating projection in naturally occurring discourse.
Я не до конца уверен, как её правильно объяснить по-русски, но буду пытаться. В датасете даны составные высказывания, типа "Джейн не знает, что идёт снег". Конкретно это высказывание - про Джейн, но, возможно, оно и про снег тоже. Так вот надо понять, уверен ли сам автор высказывания, что снег идёт. И в общем случае: уверен ли автор в истинности определённого подчинённого предложения в рамках своего сложноподчинённого высказывания? Особенно, если это подчинённое предложение "спрятано" под оператором, не означающим логического следования - вопроса, отрицания, "может быть" или "если".
Подобными вопросами занимается довольно мутная часть лингвистики - прагматика, которая изучает контекст и цели высказываний. Рандомный факт: статья опубликована в журнале
Датасет CommitmentBank надёрган из новостей, художественной литературы и диалогов автоматически (с помощью синтаксического парсера), почищен вручную, и отдан на разметку механическим тёркерам, которые оценивали уверенность автора в высказывании по шкале от -3 до 3. Авторы заморочились, и для каждого подчинённого предложения подготовили его парафразу, чтобы спрашивать тёркера именно про неё - и удалили вообще нафиг те высказывания, которые не удалось нормально перефразировать. Дополнительно разметили кучу информации - например, смысл кучи модальных глаголов (might, could, allowed to и т.п.), и оценка правдоподобности подчинённого предложения при условии контекста.
Дальше авторы исследуют, от чего зависит степень уверенности автора. Классическое представление - что это определяется "фактивностью" применённого оператора (примеры фактивных - "знать", "забывать", "узнавать", "помнить", и т.п., а вот "полагать", "говорить" или "решить" - не фактивные совсем). Авторы показывают (и в этом во многом цель статьи), что одной только фактивностью всё не решается. Примерно такую же роль играет, например, то, от какого лица высказывание, и в каком оно времени.
В целом, авторы надеются, что дальнейший анализ поможет разобраться, как же всё-таки выявлять степень уверенности спикеров. Я не знаю, какие в итоге explainable фичи вылезли, но вот непрозрачный T5 справляется с задачей весьма неплохо.
Что я думаю: похоже, что основная информация о степени коммитмента автора сосредоточена где-то близко на синтаксическом дереве к корню подчинённого предложения. А значит, если у нас есть хороший парсер и по уму извлечённые из него фичи, то натаскаться определять степень комитмента наверняка можно даже слабенькую модельку.
Впрочем, в истинности последнего высказывания я пока не слишком уверен 🤷♂️
#sotanlu
Первая задача взята из статьи The CommitmentBank: Investigating projection in naturally occurring discourse.
Я не до конца уверен, как её правильно объяснить по-русски, но буду пытаться. В датасете даны составные высказывания, типа "Джейн не знает, что идёт снег". Конкретно это высказывание - про Джейн, но, возможно, оно и про снег тоже. Так вот надо понять, уверен ли сам автор высказывания, что снег идёт. И в общем случае: уверен ли автор в истинности определённого подчинённого предложения в рамках своего сложноподчинённого высказывания? Особенно, если это подчинённое предложение "спрятано" под оператором, не означающим логического следования - вопроса, отрицания, "может быть" или "если".
Подобными вопросами занимается довольно мутная часть лингвистики - прагматика, которая изучает контекст и цели высказываний. Рандомный факт: статья опубликована в журнале
Sinn und Bedeutung
, что переводится как Смысл и Значение
. Мутная она, потому что плохо формализуется, но таки именно таких умений хочется от настоящего ИИ, с которым можно не просто разговаривать, а разговаривать по делу. Так что, когда/если подобные задачи алгоритмизировать всё-таки удастся, это будет означать заметный прорыв в NLP. Датасет CommitmentBank надёрган из новостей, художественной литературы и диалогов автоматически (с помощью синтаксического парсера), почищен вручную, и отдан на разметку механическим тёркерам, которые оценивали уверенность автора в высказывании по шкале от -3 до 3. Авторы заморочились, и для каждого подчинённого предложения подготовили его парафразу, чтобы спрашивать тёркера именно про неё - и удалили вообще нафиг те высказывания, которые не удалось нормально перефразировать. Дополнительно разметили кучу информации - например, смысл кучи модальных глаголов (might, could, allowed to и т.п.), и оценка правдоподобности подчинённого предложения при условии контекста.
Дальше авторы исследуют, от чего зависит степень уверенности автора. Классическое представление - что это определяется "фактивностью" применённого оператора (примеры фактивных - "знать", "забывать", "узнавать", "помнить", и т.п., а вот "полагать", "говорить" или "решить" - не фактивные совсем). Авторы показывают (и в этом во многом цель статьи), что одной только фактивностью всё не решается. Примерно такую же роль играет, например, то, от какого лица высказывание, и в каком оно времени.
В целом, авторы надеются, что дальнейший анализ поможет разобраться, как же всё-таки выявлять степень уверенности спикеров. Я не знаю, какие в итоге explainable фичи вылезли, но вот непрозрачный T5 справляется с задачей весьма неплохо.
Что я думаю: похоже, что основная информация о степени коммитмента автора сосредоточена где-то близко на синтаксическом дереве к корню подчинённого предложения. А значит, если у нас есть хороший парсер и по уму извлечённые из него фичи, то натаскаться определять степень комитмента наверняка можно даже слабенькую модельку.
Впрочем, в истинности последнего высказывания я пока не слишком уверен 🤷♂️
#sotanlu
GitHub
GitHub - mcdm/CommitmentBank: Materials related to our Sinn und Bedeutung 23 paper
Materials related to our Sinn und Bedeutung 23 paper - mcdm/CommitmentBank
Продолжаем расковыривать SuperGLUE. Вторая задача - COPA по статье Choice of Plausible Alternatives: An Evaluation of Commonsense Causal Reasoning.
Смысл задачи - понимание причинно-следственной связи. Это опять-таки довольно зыбкое понятие, поэтому вместо типичной задачи natural language inference "следует ли второе утверждение из первого?" вопрос формулируется как "какое из двух предложений - наиболее правдоподобная причина (либо следствие) данного утверждения?". Например:
- Гости вечеринки прятались за диваном. Что больше похоже на причину этого?
- Вариант 1: это была вечеринка-сюрприз
- Вариант 2: это был день рождения
Для правильного ответа на такие вопросы нужно уметь строить "логические" цепочки, основанные на здравом смысле, типа cюрприз->секрет->прятаться.
Оригинальный датасет состоит из 1000 вопросов, которые авторы сгенерировали самостоятельно и очень заморочившись. Сначала они составили собственную карту различных предметных областей и тем, чтобы сделать датасет максимально разнообразным, потом вручную нагенерировали пары причина-следствие для каждой предметной области, стараясь основывать их на каком-то прозрачном рассуждении. Дальше самое творческое - сгенерировать негативные примеры; они должны быть структурно и тематически похожи на позитивные примеры, и возможно даже иметь какую-то связь с утверждениями - но не прямую причинно-следственную. Отдельно авторы проконтролировали язык: максимально краткие и содержательные высказывания, без сленга, зато с анафорами.
Собранный датасет прогнали на волонтёрах, и после некоторой фильтрации получили 100% точность человеков. А бейзланы (из 2011 года, основанные даже не на эмбеддингах, а на попарной совстречаемости слов) дали точность меньше 60%. Впрочем, уже BERT дал все 70%, а T5 сейчас даёт почти 95%.
Что мне кажется. Задача определения причинно-следственной связи - действительно дофига сложная, и если машины научились её решать честным образом, это очень круто. Но проверять это, наверное, нужно на adversarial примерах, потому что даже очень творческие и умные авторы, генерируя датасет, могут дать много нечаянных подсказок. История про BERT и коня по имени Умный Ганс - тому пример, и вроде как поэтому и собрали суперклей.
Возможно, имеет смысл собрать датасет с причинами и следствиями автоматически, ориентируясь на ключевики типа "потому что", и посмотреть, как справляются модели на нём. Но майнинг негативных примеров, кажется, всё равно остается черной магией.
#sotanlu
Смысл задачи - понимание причинно-следственной связи. Это опять-таки довольно зыбкое понятие, поэтому вместо типичной задачи natural language inference "следует ли второе утверждение из первого?" вопрос формулируется как "какое из двух предложений - наиболее правдоподобная причина (либо следствие) данного утверждения?". Например:
- Гости вечеринки прятались за диваном. Что больше похоже на причину этого?
- Вариант 1: это была вечеринка-сюрприз
- Вариант 2: это был день рождения
Для правильного ответа на такие вопросы нужно уметь строить "логические" цепочки, основанные на здравом смысле, типа cюрприз->секрет->прятаться.
Оригинальный датасет состоит из 1000 вопросов, которые авторы сгенерировали самостоятельно и очень заморочившись. Сначала они составили собственную карту различных предметных областей и тем, чтобы сделать датасет максимально разнообразным, потом вручную нагенерировали пары причина-следствие для каждой предметной области, стараясь основывать их на каком-то прозрачном рассуждении. Дальше самое творческое - сгенерировать негативные примеры; они должны быть структурно и тематически похожи на позитивные примеры, и возможно даже иметь какую-то связь с утверждениями - но не прямую причинно-следственную. Отдельно авторы проконтролировали язык: максимально краткие и содержательные высказывания, без сленга, зато с анафорами.
Собранный датасет прогнали на волонтёрах, и после некоторой фильтрации получили 100% точность человеков. А бейзланы (из 2011 года, основанные даже не на эмбеддингах, а на попарной совстречаемости слов) дали точность меньше 60%. Впрочем, уже BERT дал все 70%, а T5 сейчас даёт почти 95%.
Что мне кажется. Задача определения причинно-следственной связи - действительно дофига сложная, и если машины научились её решать честным образом, это очень круто. Но проверять это, наверное, нужно на adversarial примерах, потому что даже очень творческие и умные авторы, генерируя датасет, могут дать много нечаянных подсказок. История про BERT и коня по имени Умный Ганс - тому пример, и вроде как поэтому и собрали суперклей.
Возможно, имеет смысл собрать датасет с причинами и следствиями автоматически, ориентируясь на ключевики типа "потому что", и посмотреть, как справляются модели на нём. Но майнинг негативных примеров, кажется, всё равно остается черной магией.
#sotanlu
Третья задача SuperGLUE - MultiRC из статьи Looking Beyond the Surface:A Challenge Set for Reading Comprehension over Multiple Sentences.
Авторы задачи недовольны тем, что классические вопросно-ответные датасеты типа SQuAD - довольно простые, и решаются лексическим матчингом, но решения плохо обобщаются. Задача MulitRC похожа на SQuAD - в ней дан параграф и вопрос к нему с предложенными вариантами ответов. Но она специально создавалась как сложная:
- Для ответа на каждый вопрос необходимо скомбинировать информацию минимум из двух предложений входного текста;
- Вместе с вопросом есть предложенные ответы, но сколько из них верные - заранее неизвестно. То есть решение надо принимать для каждого варианта ответа по-отдельности;
- Верный ответ не обязательно является подстрокой текста, а может содержать различные его фрагменты или даже их парафразы;
- Тексты взяты из 7 разных доменов, так что узкоспециализированная модель такую задачу не решит.
Авторы набрали тыщу абзацев из разных корпусов, отфильтровав их по разным количественным статистикам, и посадили тёркеров сначала генерировать вопросы, потом проверять, что вопросы требуют несколько предложений для ответа, потом генерировать сами варианты ответов (включая неправильные!), потом валидировать и ответы тоже. В итоге набралось 6К "чистых" вопросов и ещё несколько тысяч отбракованных. Оказалось, что и тип вопросов достаточно разнообразен, и ответы на них требуют разных типов мышления: разрешения анафор, понимания парафраз, здравого смысла, и даже немножко разной математики.
В статье люди в итоге набрали F-скор 86% на этом датасете; простые бейзлайны - существенно меньше, но авторы презентовали их как-то неуверенно. А в рамках SuperGLUE люди набрали только 82%, а RoBERTa - уже 84%. T5 все 88%. Так что похоже, что эта задача тоже уже решена. То ли она с самого начала не была такой уж сложной, то ли для ответа на многопредложЕнные вопросы идеально подходят трансформеры с их многоголовым селф-атеншном, если их правильно готовить.
В этом смысле, кстати, прикольно было бы попробовать запустить модельку попроще, но где при этом каждое слово так же "видит" каждое. Я не удивлюсь, если секрет успеха именно в этом.
#sotanlu
Авторы задачи недовольны тем, что классические вопросно-ответные датасеты типа SQuAD - довольно простые, и решаются лексическим матчингом, но решения плохо обобщаются. Задача MulitRC похожа на SQuAD - в ней дан параграф и вопрос к нему с предложенными вариантами ответов. Но она специально создавалась как сложная:
- Для ответа на каждый вопрос необходимо скомбинировать информацию минимум из двух предложений входного текста;
- Вместе с вопросом есть предложенные ответы, но сколько из них верные - заранее неизвестно. То есть решение надо принимать для каждого варианта ответа по-отдельности;
- Верный ответ не обязательно является подстрокой текста, а может содержать различные его фрагменты или даже их парафразы;
- Тексты взяты из 7 разных доменов, так что узкоспециализированная модель такую задачу не решит.
Авторы набрали тыщу абзацев из разных корпусов, отфильтровав их по разным количественным статистикам, и посадили тёркеров сначала генерировать вопросы, потом проверять, что вопросы требуют несколько предложений для ответа, потом генерировать сами варианты ответов (включая неправильные!), потом валидировать и ответы тоже. В итоге набралось 6К "чистых" вопросов и ещё несколько тысяч отбракованных. Оказалось, что и тип вопросов достаточно разнообразен, и ответы на них требуют разных типов мышления: разрешения анафор, понимания парафраз, здравого смысла, и даже немножко разной математики.
В статье люди в итоге набрали F-скор 86% на этом датасете; простые бейзлайны - существенно меньше, но авторы презентовали их как-то неуверенно. А в рамках SuperGLUE люди набрали только 82%, а RoBERTa - уже 84%. T5 все 88%. Так что похоже, что эта задача тоже уже решена. То ли она с самого начала не была такой уж сложной, то ли для ответа на многопредложЕнные вопросы идеально подходят трансформеры с их многоголовым селф-атеншном, если их правильно готовить.
В этом смысле, кстати, прикольно было бы попробовать запустить модельку попроще, но где при этом каждое слово так же "видит" каждое. Я не удивлюсь, если секрет успеха именно в этом.
#sotanlu
#ботоводство добавил в пиплбота команду /all, по которой он может тегнуть всех известных ему участников чата
#sotanlu разбираем SuperGLUE дальше, с задачей WiC: the Word-in-Context Dataset for Evaluating Context-Sensitive Meaning Representations.
Это первый датасет в подобном формате: дана пара предложений с общим словом, и надо определить, употреблено ли это слово в одном смысле, или в разных. Все предложения и смыслы были надёрганы из WordNet (там это примеры словоупотреблений) и пары других подобных тезаурусов. Пары предложений были пофильтрованы так, чтобы негативные смыслы не были слишком похожи друг на друга (не было соседями в wordNetовской таксономии), и ещё немножко пофильтрованы вручную.
Тёркеры показали согласованность 80% с получившейся разметкой и друг с другом. Классификатор, разделяющий пары слов по косинусному расстоянию между контекстными эмбеддингами из BERT, дал точность 65%. Ни один другой бейзлайн не дотянул даже до 60%. Поэтому задачу признали сложной и взяли в SuperGLUE, но T5 уже сейчас даёт 77% на ней.
В целом, кажется, что файн-тюнинг T5 для такой задачи - овершут, а вот self-supervised контекстные словные эмбеддинги типа BERT на таком датасете мерять очень клёво. Интересно, что нужно сделать с BERT'ом, чтобы он научился воссоздавать WordNet - и возможно ли это вообще?
Это первый датасет в подобном формате: дана пара предложений с общим словом, и надо определить, употреблено ли это слово в одном смысле, или в разных. Все предложения и смыслы были надёрганы из WordNet (там это примеры словоупотреблений) и пары других подобных тезаурусов. Пары предложений были пофильтрованы так, чтобы негативные смыслы не были слишком похожи друг на друга (не было соседями в wordNetовской таксономии), и ещё немножко пофильтрованы вручную.
Тёркеры показали согласованность 80% с получившейся разметкой и друг с другом. Классификатор, разделяющий пары слов по косинусному расстоянию между контекстными эмбеддингами из BERT, дал точность 65%. Ни один другой бейзлайн не дотянул даже до 60%. Поэтому задачу признали сложной и взяли в SuperGLUE, но T5 уже сейчас даёт 77% на ней.
В целом, кажется, что файн-тюнинг T5 для такой задачи - овершут, а вот self-supervised контекстные словные эмбеддинги типа BERT на таком датасете мерять очень клёво. Интересно, что нужно сделать с BERT'ом, чтобы он научился воссоздавать WordNet - и возможно ли это вообще?
#ботоводство
После нескольких дней простоя закодил вчера и выкатил сегодня в пиплбота обновлённый поиск людей по профайлам - теперь он доступен для всех сообществ.
После нескольких дней простоя закодил вчера и выкатил сегодня в пиплбота обновлённый поиск людей по профайлам - теперь он доступен для всех сообществ.
#sotanlu
Ещё одна задача из SuperGLUE зовётся BoolQ: Exploring the Surprising Difficulty of Natural Yes/No Questions.
Основная её клёвость в том, что вопросы действительно "естественные": это реальные запросы реальных людей в гугл. А значит, задача супер прикладная. Авторы датасета пофильтровали запросы тёркерами по "да-нетности" и по хорошести (вопрос понятен и на него можно дать ответ, основанный на фактах), подтянули к вопросам релевантные абзацы из Википедии, и оставили только те вопросы, для ответа на которые достаточно такого абзаца. Оказалось, что вопросы в целом сложненькие, в них куча именованных сущностей и неочевидных логических ходов.
Авторы попробовали сделать transfer learning, дообучая на своём датасете модельки, натасканные на reading comprehension или natural language inference. Удивительно, но RC-подобные задачи типа SQuAD оказались не особо релевантными, а вот задачи на определение entailment - вполне. Моделька, предобученная только на MultiNLI, после файн-тюнинга дала точность 75.5%, тогда как BERT - 77%. А если уменьшить обучающую выборку для файн-тюнинга, то модель, предобученная на MultiNLI, справляется даже заметно лучше берта. Возможно, говорят авторы, это потому, что в MultiNLI есть примеры противоречий.
Для справки, люди справились с этой задачей на 89%, а бейзлайн "всегда говори да" дал точность 62%. T5 сейчас решает её на 91.5%, так что уже и эту задачу можно считать "хакнутой". Но из множества других задач SuperGLUE мне она как-то особенно симпатично - видимо, как раз в силу своей простоты и "натуральности".
Ещё одна задача из SuperGLUE зовётся BoolQ: Exploring the Surprising Difficulty of Natural Yes/No Questions.
Основная её клёвость в том, что вопросы действительно "естественные": это реальные запросы реальных людей в гугл. А значит, задача супер прикладная. Авторы датасета пофильтровали запросы тёркерами по "да-нетности" и по хорошести (вопрос понятен и на него можно дать ответ, основанный на фактах), подтянули к вопросам релевантные абзацы из Википедии, и оставили только те вопросы, для ответа на которые достаточно такого абзаца. Оказалось, что вопросы в целом сложненькие, в них куча именованных сущностей и неочевидных логических ходов.
Авторы попробовали сделать transfer learning, дообучая на своём датасете модельки, натасканные на reading comprehension или natural language inference. Удивительно, но RC-подобные задачи типа SQuAD оказались не особо релевантными, а вот задачи на определение entailment - вполне. Моделька, предобученная только на MultiNLI, после файн-тюнинга дала точность 75.5%, тогда как BERT - 77%. А если уменьшить обучающую выборку для файн-тюнинга, то модель, предобученная на MultiNLI, справляется даже заметно лучше берта. Возможно, говорят авторы, это потому, что в MultiNLI есть примеры противоречий.
Для справки, люди справились с этой задачей на 89%, а бейзлайн "всегда говори да" дал точность 62%. T5 сейчас решает её на 91.5%, так что уже и эту задачу можно считать "хакнутой". Но из множества других задач SuperGLUE мне она как-то особенно симпатично - видимо, как раз в силу своей простоты и "натуральности".
#sotanlu послушал умных людей, почитал прошлогоднюю статью про mixout.
Это такая специальная регуляризация для файн-тюнинга моделей, когда в каждом батче некоторые случайно выбранные нейроны дообучаемой модели заменяются на старые. По аналогии с дропаутом, где они бы просто занулялись.
Авторы математически доказывают, что обе эти регуляризации, как и weight decay, примерно эквивалентны L2-штрафу за отдаление новых параметров от старых, и экспериментально показывают, что для файн-тюнинга BERT на GLUE mixout работает лучше аналогичного dropoutа. В принципе, очень понятно, почему так.
Простенький код для pytorch к статье прилагается)
Это такая специальная регуляризация для файн-тюнинга моделей, когда в каждом батче некоторые случайно выбранные нейроны дообучаемой модели заменяются на старые. По аналогии с дропаутом, где они бы просто занулялись.
Авторы математически доказывают, что обе эти регуляризации, как и weight decay, примерно эквивалентны L2-штрафу за отдаление новых параметров от старых, и экспериментально показывают, что для файн-тюнинга BERT на GLUE mixout работает лучше аналогичного dropoutа. В принципе, очень понятно, почему так.
Простенький код для pytorch к статье прилагается)
#sotanlu ещё один датасет из SuperGLUE - ReCoRD, то бишь Reading Comprehension with Commonsense Reasoning Dataset
Этот датасет придумывался как сложная задача на понимание текстов. Решаемая боль была в том, что многие подобные задачи, типа SQuAD - довольно простые, и для их решения достаточно не очень сложных когнитивных навыков, типа детекции парафраз.
Выглядит задача так: дан новостной текст и одно предложение после него, и в этом предложении одна именованная сущность пропущена. Нужно понять, какой из сущностей, упомянутых в тексте, этот пропуск уместнее всего заполнить.
Тройки (текст, фраза, правильный ответ) были намайнены автоматически из новостных корпусов и отфильтрованы простыми правилами. То, что осталось, авторы пофильтровали моделькой типа Stochastic Answer Networks (текст и вопрос к нему энкодятся, вопрос с помощью атеншна подтягивается к тексту, и дальше для каждого токена текста предсказывается вероятность того, что на нем начинается или заканчивается верный ответ, и всё это с кучей дропаута). Оставили только треть троек, с которыми нейросетка не справилась, и из них отобрали ту половину, с которой справился хотя бы один адекватный тёркер. В результате осталось 100 тысяч обучающих троек, и 20 тысяч дополнительно провалидированных тестовых.
Авторы разметили часть заданий по тому, какой тип мышления нужен для получения ответа - в 3/4 случаев это "здравый смысл", который в свою очередь в основном сводится к работе с понятиями, пониманию причинно-следственных связей, и базовой психологии.
Люди корректно решили 91% задач, случайный выбор и простые языковые модели - 19%, а модель DocQA с ELMO-векторами (BERT'а тогда ещё не было), наилучшая из попробованных - 45%. После чего датасет рекомендовали как сложный. BERT впоследствии решил эту задачу на 72%, RoBERTa - на 84%, а T5 уже на 94%, обогнав кожаных мешков.
Чё, клёво.
Этот датасет придумывался как сложная задача на понимание текстов. Решаемая боль была в том, что многие подобные задачи, типа SQuAD - довольно простые, и для их решения достаточно не очень сложных когнитивных навыков, типа детекции парафраз.
Выглядит задача так: дан новостной текст и одно предложение после него, и в этом предложении одна именованная сущность пропущена. Нужно понять, какой из сущностей, упомянутых в тексте, этот пропуск уместнее всего заполнить.
Тройки (текст, фраза, правильный ответ) были намайнены автоматически из новостных корпусов и отфильтрованы простыми правилами. То, что осталось, авторы пофильтровали моделькой типа Stochastic Answer Networks (текст и вопрос к нему энкодятся, вопрос с помощью атеншна подтягивается к тексту, и дальше для каждого токена текста предсказывается вероятность того, что на нем начинается или заканчивается верный ответ, и всё это с кучей дропаута). Оставили только треть троек, с которыми нейросетка не справилась, и из них отобрали ту половину, с которой справился хотя бы один адекватный тёркер. В результате осталось 100 тысяч обучающих троек, и 20 тысяч дополнительно провалидированных тестовых.
Авторы разметили часть заданий по тому, какой тип мышления нужен для получения ответа - в 3/4 случаев это "здравый смысл", который в свою очередь в основном сводится к работе с понятиями, пониманию причинно-следственных связей, и базовой психологии.
Люди корректно решили 91% задач, случайный выбор и простые языковые модели - 19%, а модель DocQA с ELMO-векторами (BERT'а тогда ещё не было), наилучшая из попробованных - 45%. После чего датасет рекомендовали как сложный. BERT впоследствии решил эту задачу на 72%, RoBERTa - на 84%, а T5 уже на 94%, обогнав кожаных мешков.
Чё, клёво.
Довольно прикольную модель для редактирования текстов, LaserTagger предложили зимой ребята из Гугла.
Чего хочется: быстро и дёшево и на маленьких выборках обучать модели для решения несложных seq2seq-задач.
В чём идея: во многих seq2seq задачках выход очень похож на вход: суммаризация (даже абстрактивная), разрезание и склейка предложений, исправление грамматических ошибок. А раз так, имеет смысл не генерировать выход с нуля, а получить его из входа путём вставок и удалений токенов. Решения можно принимать отдельно для каждого токена входа: оставлять его или удалять, вставлять ли перед ним текст, и если да, то какой. То есть архитектурно получается задачка, эквивалентная NER или POS-теггингу, для которых языковые модели хорошо файн-тюнятся даже на маленьких выборках. И хотя теоретически вставка может быть какой угодно, на практике словарём из 500 слов или коротких фраз можно покрыть 80-90% необходимых вставок.
То есть рецепт такой:
- берёшь seq2seq задачу
- строишь выравнивание input'а c output'ом, определяя необходимые вставки или удаления
- выкидываешь все редкие вставки, оставляя небольшой словарь
- при желании, можно ввести собственные операции редактирования, например, замену сущностей на подходящие местоимения
- файн-тюнишь BERT на по-токенное предсказание всех этих операций
- при желании, поверх BERT можно прилепить рекуррентный декодер, чтобы последующие правки явно зависели от предыдущих
В чём профит: в силу своей простоты по сравнению с полноценным seq2seq, такая моделька заводится даже на небольшой обучающей выборке (сотни и тысячи примеров), и, например, на 6К примерах для суммаризации уделывает бейзлайны с большим отрывом. А ещё, такая моделька, в отличие от seq2seq, не склонна выдумывать несуществующие слова или по многу раз повторять имеющиеся, и менее склонна галлюцинировать несуществующие факты. Ну и ещё такая моделька очень быстрая.
Мораль: большие и сложные модели - это хорошо, но маленькие и экономные модели - это ещё лучше. Ну и вообще, кажется, лень - это полезное для компьютерного лингвиста качество.
Чего хочется: быстро и дёшево и на маленьких выборках обучать модели для решения несложных seq2seq-задач.
В чём идея: во многих seq2seq задачках выход очень похож на вход: суммаризация (даже абстрактивная), разрезание и склейка предложений, исправление грамматических ошибок. А раз так, имеет смысл не генерировать выход с нуля, а получить его из входа путём вставок и удалений токенов. Решения можно принимать отдельно для каждого токена входа: оставлять его или удалять, вставлять ли перед ним текст, и если да, то какой. То есть архитектурно получается задачка, эквивалентная NER или POS-теггингу, для которых языковые модели хорошо файн-тюнятся даже на маленьких выборках. И хотя теоретически вставка может быть какой угодно, на практике словарём из 500 слов или коротких фраз можно покрыть 80-90% необходимых вставок.
То есть рецепт такой:
- берёшь seq2seq задачу
- строишь выравнивание input'а c output'ом, определяя необходимые вставки или удаления
- выкидываешь все редкие вставки, оставляя небольшой словарь
- при желании, можно ввести собственные операции редактирования, например, замену сущностей на подходящие местоимения
- файн-тюнишь BERT на по-токенное предсказание всех этих операций
- при желании, поверх BERT можно прилепить рекуррентный декодер, чтобы последующие правки явно зависели от предыдущих
В чём профит: в силу своей простоты по сравнению с полноценным seq2seq, такая моделька заводится даже на небольшой обучающей выборке (сотни и тысячи примеров), и, например, на 6К примерах для суммаризации уделывает бейзлайны с большим отрывом. А ещё, такая моделька, в отличие от seq2seq, не склонна выдумывать несуществующие слова или по многу раз повторять имеющиеся, и менее склонна галлюцинировать несуществующие факты. Ну и ещё такая моделька очень быстрая.
Мораль: большие и сложные модели - это хорошо, но маленькие и экономные модели - это ещё лучше. Ну и вообще, кажется, лень - это полезное для компьютерного лингвиста качество.
Рассказал на Диалоге про своё участие в дорожке по обогащению таксономии.
С одной стороны, стыдненько, что моё решение такое примитивное, по сравнению с некоторыми другими докладами.
С другой стороны, очень рад, что в эту тусовку вообще ворвался. К следующей конфе подготовлю что-нибудь уже действительно вкусное)
С одной стороны, стыдненько, что моё решение такое примитивное, по сравнению с некоторыми другими докладами.
С другой стороны, очень рад, что в эту тусовку вообще ворвался. К следующей конфе подготовлю что-нибудь уже действительно вкусное)