дополнение к "Синтагрус, UDPipe и Spacy" - теперь Turku NLP

В дополнение к посту "Синтагрус, UDPipe и Spacy"
Я проверил еще и Turku NLP, поскольку там русская модель тоже обучалась на том же самом Синтагрусе. Последовательность шагов для создания докера с русской моделью и выполнение разбора сделаны по мануалу. В консоли делаем так:
Collapse )

Видим результат:

Collapse )


То есть опять женский род (Gender=Fem) для слова "мужчиной".

Можно сделать два интересных вывода.

1) В Синтагрусе есть некий статистически значимый bias, приводящий к одинаковому результату на разных алгоритмах (Spacy, UDPipe, TurkuNLP)

2) Так как я обнаружил этот пример совершенно случайно, то нелишне спросить, сколько еще подобных пасхалок скрыто в Синтагрусе.

Чатбот: полная переделка модели генерации ответа на seq2seq with attention

Репозиторий проекта чатбота: https://github.com/Koziev/chatbot
Докер-образ: https://github.com/Koziev/chatbot/releases/tag/0.0.2.10-alpha

Доработки в новом релизе чатбота

1. Полностью переработан код, строящий ответ на основе вопроса и предпосылок. Вместо нескольких моделей, делавших это для разных типов вопросов, теперь оставлена единственная sequence2sequence модель с "классическим" attention. На текущем датасете из ~81000 троек предпосылка-вопрос-ответ эта модель учится около 10 часов, что намного меньше суммарного времени старого ансамбля моделей. К тому же, качество новой модели выше.
Collapse )
Тестовый диалог с ботом

Вопросы идут без особого порядка, только для тестирования отдельных частей пайплайна бота и моделей. Реплики бота идут с префиксом B, фразы человека предваряются префиксом H.

Collapse )

Текущие концептуальные проблемы, над которыми предстоить серьезно поработать

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

2. В дополнение к предыдущему, бот не умеет предсказывать психическое состояние собеседника по его ответам. Поэтому он не знает, доволен ли собеседник его ответами, не сердится ли он и т.д.

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

4. Движок бота имеет ограниченные возможности по интерпретации неполных ответов человека, анафоры, элипсиса. Вопросы типа "зачем?", "почему?", "а еще?", а также местоимения 3-го лица (он, она etc) обычно ставят его в тупик, выражающийся в нерелевантном ответе.

5. В диалоговый движок заложена возможность строить ответ на основе 2х и более предпосылок. Таким образом, бот теоретически может выполнять сложные рассуждения, используя части и взаимосвязь множества фактов. Но текущая реализация механизма подбора релевантных фактов нормально работает только для случая, когда для ответа вообще не нужны дополнительные предпосылки (Чему равно 2 плюс 2?) или достаточно найти одну релевантную предпосылку в базе данных.

Генерация форм существительных с помощью GPT-2

Генерация определений слов с помощью GPT-2 и толкового словаря описана в этом посте.
Продолжим забивать языковые гвозди микроскопом!

Я обучил GPT-2 на парадигмах существительных из грамматического словаря. В обучающий датасет взято около 110 тысяч существительных, в каждом по 6 падежных форм для единственного числа. Модель училась из номинатива выдавать остальные 5 форм - родительный, творительный, винительный, дательный и предложный.

Примеры генерации:


Collapse )
Нужно еще добавить модель определения ударения и можно генерить Викисловарь.

Синтагрус, UDPipe и Spacy

Синтагрус - один из самых популярных корпусов для тренировки русскоязычных POS tagger'ов и парсеров.
И у этой всеобщности есть обратная сторона, о которой не следует забывать.

Collapse )

Восстановление согласованного текста из списка лемм с помощью OpenNMT

Иногда возникает задача, обратная лемматизации: имеем список лемм, надо восстановить  исходный согласованный текст. При лемматизации из-за омонимии теряется часть информации:

Из "кошка ловит мышку" после леммаизации получаем "кошка ловить мышка".
Из "кошку ловит мышка" тоже получаем "кошка ловить мышка".

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

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

Collapse )

В рагу не сдается наш гордый варяг: еще омофоны и омографы

Несколько SQL-запросов к словарной базе и нашлись такие пары предложных словосочетаний и омофоничных/омографичных существительных (кое-где ударение не совпадает, поэтому омографы):

В + аккузатив или препозитив:
Collapse )

НА + аккузатив или препозитив:
Collapse )

К + датив
Collapse )

У + генитив
Collapse )

(инфра)красная бурда

Накопилось тут немного всякого в ходе отладки стихогенератора.

За этой штукой закрепилось рабочее название "инфракрасная бурда" как намек на красную бурду с привкусом технологичности.

Двустрочники:
Collapse )

Однострочники:
Collapse )

И многострочный плагиат:
Collapse )

Датасет для проверки спеллчекера

Если принять на веру гипотезу, что юмор - это способ продемонстрировать свой интеллект, то датасет для валидации современных спеллчекеров должен содержать примерно такое:

Collapse )

Надо как-то оценивать качество сгенерированных стихов

Из неплохого на выходе стихогенератора:

=== Разработчик-лингвист ===

Баг ли по лесу идёт —
Баги за руку ведёт,
Из программ выходит сказка!
Из отладок! Из работ!

Это что за перевод?
Это бага хоровод!
Баг - наречие и прелесть,
С нами рядышком живёт


Главная проблема этой модели - низкий выход годного материала. Что побуждает задуматься о автоматизации процесса оценки сгенерированных текстов с точки зрения мммм семантичности что-ли. После этого стихогенератор можно оформлять как оригинальный скилл для чатбота. И будет Вика на просьбы 'сочини стишок про бабочек' выдавать такие штуки, веселить собеседника.

Использование статистики аргументной структуры для генерации рэпа

Цель

Овладеть искусством (или мастерством) генерации рэпа на заданную тему.

Я ожидал, что это будет попроще, чем онегинская строфа, но не тут-то было :) Приходится идти небольшими шагами, перебирая множество подходов.
Collapse )
PS: и немного свежей выдачи стихогенератора на тему программистов-лингвистов:
Collapse )