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

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

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

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

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

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

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

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

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

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

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

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

Нелюбовь чатбота к букве 'п' (и еще про sklearn.metrics.classification_report)

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

Кроме финальной оценки качества модели через per instance accuracy (доля полностью правильно сгенерированных ответов, когда один неверный символ относит ответ к невалидным), я добавил туда расширенную диагностику с помощью sklearn.metrics.classification_report, см. строки 693 и 694. Вот что она показывает:
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". Но это может быть ложный след :)

Rhythms of the brain (by György Buzsáki)

Основные идеи тезисно.

Система возбуждающихся модулей с огромным числом обратных связей склонна к самовозбуждению и лавинной активации. Такая активация метаболически очень затратка (и в нормальных-то условиях мозг забирает себе 25% всего потребления организма) и вычислительно бесполезна.

Чтобы не допускать такого результата, в систему вводится определенное количество тормозящих модулей (по другим источникам их около 25%, но там есть очень эффективные "отсекатели").

В итоге система балансирует на грани перехода между двумя состояниями, находясь в точке бифуркации. См. Динамический хаос.

Временные окна позволяют эффективно решать задачу "integrate and fire", снижая торможение на этот период.

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

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

Чтобы увеличить скорострельность, архитектура сети воплощает small world hypothesis. Длинные связи между хабами позволяют быстро перекидывать сигнал между далекими системами, не дожидаясь срабатывая медленных немиелинизированных волокон.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Collapse )