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

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

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

Кстати, касательно чередования гласных и согласных не грех вспомнить, что марковские процессы возникли 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". Но это может быть ложный след :)

Квазивспомогательные глаголы и мягкий императив

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

А именно - особые "вспомогательные" глаголы дать, давать, пойти и т.д., участвующие в образовании "мягкого императива":

- Дайте-ка я попробую.

В случае давать/дать исходная семантика подавляется полностью, позволяя говорить о чисто синтаксической функции. А вот для идти и производных оттенок "ступай и сделай" выражен довольно четко.

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

Вариантов у нас всего два.

Либо смысловой глагол может быть в будущем времени (синтетическом или аналитическом, построенном с участием обычного вспомогательного глагола "быть": давайте будем петь и плясать). В этом случае вспомогательный глагол добавляет смысл "а почему бы нам не сделать что-то" к общему значению будущего действия:

Будем петь и плясать.

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

- Пойди оденься и приходи.

От японской системы вспомогательных глаголов, частиц суффиксов наша отечественная разработка отличается парой вещей.

Во-первых, японский синтаксис использует очень обширный набор глагольных суффиксов под все случаи жизни. Когда мне нужно выяснить, как переводится очередное предложение, я беру три толстых японских книжечки страниц по 300-400 каждая с перечнем частиц и их переводом на английский, и не всегда нахожу в них нужный случай. У нас список "квазивспомогательных" глаголов невелик и, пожалуй, замкнут, с поправкой на производные от глагола движения идти.

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

А кровать давайте поставим сюда

Японцы же строго придерживаются старого самурайского правила - суффиксы стоят слева от смыслового глагола.

Вдобавок, в русском синтаксисе эти же глаголы могут работать как обычные модальные, присоединяя инфинитив. Для сравнения:

Идите играть.

Идите играйте.

А вот что создает синтаксический парсер после добавления конструкций "мягкого императива" в восходяще-нисходящий алгоритм разбора:

Collapse )

Все эти миры ваши, кроме Европы. Не пытайтесь высадиться на нее.

Поддавшись на шумиху вокруг Ложной Слепоты (кхм если книга вообще может считаться поводом для шумихи, когда есть куда более вкусные поводы прямо здесь и сегодня), не смог удержаться от попадания на забавную пиар-рекурсию. Автор ЛС крайне рекомендовал, среди прочего, "Быть Никем" Метцингера. Вроде бы до сих пор на русский книга не переведена, но в принципе язык там довольно простой, насколько простым может быть в принципе философия. Кто имел удовольствие пройти курс философии в институте или даже сдать кандидатский минимум, тот поймет, что главная трудность - это не английский или русский язык сам по себе, а то, что пытается автор объяснить на нем.

Если не углубляться - я остановился примерно на середине. Как мне показалось, слишком много воды. С другой стороны, нет причин не доверять мнению Уоттса и других умных людей, так что надеюсь на второй заход.

PS: Цитата из кларковской Одиссеи сама всплыла на днях. Видимо, творящаяся ерунда, как и остальная природа, начала просыпаться по весне и влиять на ассоциативные зоны памяти.

Частота употребления предлогов (черновик)

Краткая постановка задачи

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

Collapse )