̶с̶а̶м̶̶о̶изолента мёбиуса
2.34K subscribers
13 photos
2 videos
1 file
180 links
Костыли и технологии для обработки естественных языков. Обзоры статей и личный опыт. by @cointegrated
Download Telegram
#ботоводство
Сегодня решил отдохнуть от пипблота, и вернулся к @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, добавил перелистывание страниц поиска.
В ближайшие дни буду ещё собирать логи и улучшать.
̶с̶а̶м̶̶о̶изолента мёбиуса
#ботоводство По ботам: научился сохранять аватарки юзеров из телеграма. Должно помочь автоматически составлять пиплбуки из приветствий.
#Ботоводство
Вернулся к пиплботу и за последние два дня добавил туда базовую функциональность бота-вахтёра: если его настроить, бот может требовать от вступающих в чатик хуизы, и заносит их тексты в пиплбук.
̶с̶а̶м̶̶о̶изолента мёбиуса
#sotanlu Пришла очередь статьи про SuperGLUE. Этот бенчмарк выкатили спустя год после GLUE, который уже дорешали до сверх-человеческого уровня. В нём 8 задач: - BoolQ: Дан абзац текста и бинарный вопрос про этот абзац (ответ "да" или "нет"), на который надо…
SuperGLUE вообще-то достоин того, чтобы разобрать его поподробнее. Пойдём прямо по порядочку.

Первая задача взята из статьи The CommitmentBank: Investigating projection in naturally occurring discourse.
Я не до конца уверен, как её правильно объяснить по-русски, но буду пытаться. В датасете даны составные высказывания, типа "Джейн не знает, что идёт снег". Конкретно это высказывание - про Джейн, но, возможно, оно и про снег тоже. Так вот надо понять, уверен ли сам автор высказывания, что снег идёт. И в общем случае: уверен ли автор в истинности определённого подчинённого предложения в рамках своего сложноподчинённого высказывания? Особенно, если это подчинённое предложение "спрятано" под оператором, не означающим логического следования - вопроса, отрицания, "может быть" или "если".

Подобными вопросами занимается довольно мутная часть лингвистики - прагматика, которая изучает контекст и цели высказываний. Рандомный факт: статья опубликована в журнале Sinn und Bedeutung, что переводится как Смысл и Значение. Мутная она, потому что плохо формализуется, но таки именно таких умений хочется от настоящего ИИ, с которым можно не просто разговаривать, а разговаривать по делу. Так что, когда/если подобные задачи алгоритмизировать всё-таки удастся, это будет означать заметный прорыв в NLP.

Датасет CommitmentBank надёрган из новостей, художественной литературы и диалогов автоматически (с помощью синтаксического парсера), почищен вручную, и отдан на разметку механическим тёркерам, которые оценивали уверенность автора в высказывании по шкале от -3 до 3. Авторы заморочились, и для каждого подчинённого предложения подготовили его парафразу, чтобы спрашивать тёркера именно про неё - и удалили вообще нафиг те высказывания, которые не удалось нормально перефразировать. Дополнительно разметили кучу информации - например, смысл кучи модальных глаголов (might, could, allowed to и т.п.), и оценка правдоподобности подчинённого предложения при условии контекста.

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

В целом, авторы надеются, что дальнейший анализ поможет разобраться, как же всё-таки выявлять степень уверенности спикеров. Я не знаю, какие в итоге explainable фичи вылезли, но вот непрозрачный T5 справляется с задачей весьма неплохо.

Что я думаю: похоже, что основная информация о степени коммитмента автора сосредоточена где-то близко на синтаксическом дереве к корню подчинённого предложения. А значит, если у нас есть хороший парсер и по уму извлечённые из него фичи, то натаскаться определять степень комитмента наверняка можно даже слабенькую модельку.
Впрочем, в истинности последнего высказывания я пока не слишком уверен 🤷‍♂️
#sotanlu
Продолжаем расковыривать 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
Третья задача 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
#ботоводство добавил в пиплбота команду /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 - и возможно ли это вообще?
#ботоводство
После нескольких дней простоя закодил вчера и выкатил сегодня в пиплбота обновлённый поиск людей по профайлам - теперь он доступен для всех сообществ.
#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 мне она как-то особенно симпатично - видимо, как раз в силу своей простоты и "натуральности".
#sotanlu послушал умных людей, почитал прошлогоднюю статью про mixout.
Это такая специальная регуляризация для файн-тюнинга моделей, когда в каждом батче некоторые случайно выбранные нейроны дообучаемой модели заменяются на старые. По аналогии с дропаутом, где они бы просто занулялись.
Авторы математически доказывают, что обе эти регуляризации, как и 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%, обогнав кожаных мешков.

Чё, клёво.
Довольно прикольную модель для редактирования текстов, LaserTagger предложили зимой ребята из Гугла.
Чего хочется: быстро и дёшево и на маленьких выборках обучать модели для решения несложных seq2seq-задач.

В чём идея: во многих seq2seq задачках выход очень похож на вход: суммаризация (даже абстрактивная), разрезание и склейка предложений, исправление грамматических ошибок. А раз так, имеет смысл не генерировать выход с нуля, а получить его из входа путём вставок и удалений токенов. Решения можно принимать отдельно для каждого токена входа: оставлять его или удалять, вставлять ли перед ним текст, и если да, то какой. То есть архитектурно получается задачка, эквивалентная NER или POS-теггингу, для которых языковые модели хорошо файн-тюнятся даже на маленьких выборках. И хотя теоретически вставка может быть какой угодно, на практике словарём из 500 слов или коротких фраз можно покрыть 80-90% необходимых вставок.

То есть рецепт такой:
- берёшь seq2seq задачу
- строишь выравнивание input'а c output'ом, определяя необходимые вставки или удаления
- выкидываешь все редкие вставки, оставляя небольшой словарь
- при желании, можно ввести собственные операции редактирования, например, замену сущностей на подходящие местоимения
- файн-тюнишь BERT на по-токенное предсказание всех этих операций
- при желании, поверх BERT можно прилепить рекуррентный декодер, чтобы последующие правки явно зависели от предыдущих

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

Мораль: большие и сложные модели - это хорошо, но маленькие и экономные модели - это ещё лучше. Ну и вообще, кажется, лень - это полезное для компьютерного лингвиста качество.
Рассказал на Диалоге про своё участие в дорожке по обогащению таксономии.
С одной стороны, стыдненько, что моё решение такое примитивное, по сравнению с некоторыми другими докладами.
С другой стороны, очень рад, что в эту тусовку вообще ворвался. К следующей конфе подготовлю что-нибудь уже действительно вкусное)