Category: литература

Category was added automatically. Read all entries about "литература".

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

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

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

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

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


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

Новая версия датасета с русскоязычными диалогами (130 Мб)

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

- Андрюха! Да чего же теперь будет?
- Что надо, Арбузик, то и будет!

- Мне бы Шиповника...
- Какого еще Шиповника?


Каждый диалог содержит от 2 реплик, отделяется пустой строкой. Чистка выполнялась автоматически, некоторое количество мусора в диалогах осталось.

Посимвольная генерация ответа в чатботе - иногда это похоже на детский лепет, реально

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

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

Сам Марков для иллюстрации своих результатов исследовал зависимость в чередовании гласных и согласных в первых главах «Евгения Онегина» и «Детских годов Багрова-внука»

Далее - избранные результаты валидации с ошибками генерации. Premise - это найденная релевантная предпосылка, question - заданный вопрос, model answer - требуемый эталонный ответ, pred. answer - сгенерированный сеткой ответ:
Collapse )

Как SentencePiece токенизирует русскоязычный текст

SentencePiece - питоновская библиотека для unsupervised tokenization. Для японского и и китайского, видимо, является очень хорошей альтернативой токенизаторам с handcrafted rules (типа MeCab, который и я когда-то использовал). А для английского языка дает в нейросетевых моделях (гугловский трансформер и BERT) такую приятную вещь, как заранее фиксированный размер словаря.

А как выглядит результат токенизации для русскоязычного текста, учитывая темную сторону русского языка - слишком богатое словоизменение? Далее - краткие результаты эксперимента.
Collapse )

Реализация линейной регрессии МНК с autograd - библиотекой для символического дифференцирования

Случайно наткнулся недавно на Autograd - питоновскую либу, которая умеет для функции, заданной исходным текстом в коде, получить функцию же частной производной по указанному аргументу. Всякие tensorflow, pytorch и theano это, конечно, тоже делают под капотом. Но autograd делает это с любой питоновской функцией. Магия.
Collapse )

Эффективное встраивание фрагментов слов в векторное пространство слов средствами gensim

Чтобы определять w2v вектор несловарных термов, можно применять разные алгоритмы, включая описанный ранее регрессор char-векторов в w2v-вектор. Сейчас я опишу еще один способ, который может кому-то пригодится сам по себе, или даст повод посмотреть на интересную особенность библиотеки gensim.
Collapse )

char-rnn и char-feedforward модели

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

Collapse )

ПРЕАМБУЛА: фонетическая похожесть слов, кора головного мозга и умственная отсталость

При построении языковой модели для текста всегда есть соблазн вывести ее прямо из символьного представления слов.

В частности, преимущественная роль окончаний при образовании грамматических форм в русском языке подбивает на попытки определять часть речи слова по его последним 3-4 символам. До некоторых пределов это работает. Если бы русский язык реализовывал агглютинацию (https://ru.wikipedia.org/wiki/%D0%90%D0%B3%D0%B3%D0%BB%D1%8E%D1%82%D0%B8%D0%BD%D0%B0%D1%86%D0%B8%D1%8F_%28%D0%BB%D0%B8%D0%BD%D0%B3%D0%B2%D0%B8%D1%81%D1%82%D0%B8%D0%BA%D0%B0%29), этот подход был бы еще успешнее.


Но насколько далеко можно зайти с искусственными сетками, опираясь только на символьное представление и не используя словарь в том или ином виде?

Collapse )

Размещение многозначных слов в векторном пространстве

Это вторая задача, которую хотелось бы решить в следующем году. Надо научиться автоматически разделять многозначные слова в векторном пространстве, чтобы "затопить"  имело два вектора, один рядом с "зажечь", а другой рядом с "утопить".

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

Предварительно для решения задачи может потребоваться инкрементный построитель векторной модели, который будет брать небольшие порции слов и размещать их на основе критерия минимума общей энергии, например. Само собой, надо прошерстить текущую литературу по vector space model, так как задача настолько явная, что кто-то уже должен был предложить способ решения, как мне кажется.

PS: по поводу этой задачи крутится в голове "мультимодальные распределения" , "gaussian mixture model" и упрощенный подвид GMM aka "k-means". Но это может быть ложный след :)