Category: животные

Category was added automatically. Read all entries about "животные".

Небольшие эксперименты с векторными эмбеддингами предложений

В ходе экспериментов с генерацией текстов у меня опять всплыла тема разных автоэнкодеров для предложений.
Чтобы немного упорядочить результаты, я вынес код и модели в отдельный репозиторий https://github.com/Koziev/sent_embedders

Сейчас там лежит модель вариационного автоэнкодера с использованием bpe для токенизации текста, которая позволяет делать вот такие незамысловатые векторные операции над текстом:


"кошка ловит мышку" + ("собака не спит" - "собака спит") => "кошка не ловит мышку"
"кот обожает рыбу" + ("мышь ненавидит арбуз" - "мышь обожает арбуз") => "кот ненавидит рыбу"
"я ем" + ("ты ел" - "я ел") => "ты ем"

Генерация текста, потом генерация иллюстрации к тексту

Использую одну из готовых моделей для DALL-E для генерации изображения по короткому текстовому описанию.

Для некоторых генерируемых текстов получается неплохо, для других - абсолютная жуть.

Например, для исходного затравочного словосочетания "тихий вечер" генератор текста выдает:


--- Белых ночей дурман ---
Тихий вечер.
В синем небе —
Полосатый след.


Если текст перевести на английский и попросить DALL-E сгенерировать иллюстрацию, получаются такие "полотна":

Collapse )

А вот для текста на кошачью тему:




--- Кошачьи истории. Утро котенка ---
А кошка в углу
Сидела,
Кверху кряхтя.



получается что-то из дешевых ужастиков:

Collapse )

Еще примеры генерации, уже с автоматическими заголовками

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

Примеры на тему "тихий вечер" (тема в виде словосочетания задается генератору, но он не обязан буквально ей следовать - свобода творчества, так сказать):


--- Белых ночей дурман ---

Тихий вечер.
В синем небе —
Полосатый след.



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

Еще:

Collapse )


На тему "кошка":




--- Я не могу тебя больше не любить... ---

Не в силах, не в силах я
Удержать свой дикий крик.
И я, как кошка бездомная,
Сжимаю кулаки.



Еще:
Collapse )


Ожидаемо тексты на тему "роботы" более шизофреничны и корявы:




--- робот который живёт за счёт других ---

Я   робот  который живёт за счёт других
И потому так беспомощен  что не понимает
Что не может сам себя господин
В глазах же людей  как и в головах



Еще:


Collapse )


Еще хуже получилось на тему "градиентный спуск":




--- Цифровой формализм ---

А на экране -
В зеркалах,
В кинокамерах -
Градиентный спуск!

Артефакты переобучения или все-таки генерация уникального контента?

Играю сейчас с очередной генеративной моделью.

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

Разумеется, поиск по обучающему корпусу доступен, и он вроде говорит, что такого текста там нет. Но что там сетка видела на стадии предобучения, я не могу сказать.

Например, вот этот забавный диалог, который выдала сетка, точно уникальный (и создает впечатление умного, кстати):

- каковы пропорции человеческого тела ?
- пропорции не важны , важна конечность


Вот тут неопределенность больше, но вроде бы скорее уникальный текст:

Я знаю: это кошка
Поет о любви, о стране,
О счастье, о смерти на краю земли,
О верности, о страсти на краю.


А вот это скорее что-то существующее (но тоже не гуглится, кстати):

Я в детстве был мал, и котенок был
У меня на груди, и я не знал,
Как по-взрослому я был велик
И как по-птичьи я жил!


Collapse )

Генерация определений слов с gpt-2 (фейкопедия)

Далее - выдача перетренированной генеративной языковой модели GPT-2.

Для некоторых слов даны результаты при повышенной (t=1.2) или пониженной (t=0.8) температуре.

Жирным выделены слова, для которых модель генерировала толкование.

Стоит обратить внимание, что только 2 из разобранных слов встречались модели в ходе обучения (кошачий и свинячий). Для остальных модель честно опиралась на морфемный состав настолько, насколько это позволило "byte pair encoding" представление токенов.

Collapse )

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

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

Попробуем добиться от языковой модели GPT-2 генерации вопросов к заданному текстовому фрагменту на русском языке.

Collapse )

Добавлена обработка OOV слов в лемматизаторе rulemma

В питоновской библиотеке rulemma добавлена обработка несловарных (out-of-vocabulary) слов. Большинство OOV-слов образуются по относительно небольшому количеству словоизменительных правил русского языка, так что модель неплохо справляется с ними. При этом используются результаты частеречной разметки, чтобы снимать неоднозначности типа крокодил - проходил.

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

Релиз чатбота 0.0.0.5

Докер-образ чатбота 0.0.0.5 выложен в репозитории. Там же выложены все актуальные языковые модели и исходники бота.

Основное изменение - некоторая оптимизация процесса запуска чатбота. Я внес небольшие изменения в проект грамматического словаря (ruword2tags), чтобы можно было загружать не полную русскую словарную базу из 2.5 миллионов словоформ, а только небольшое подмножество, которое фактически встречалось в обучающих датасетах. Сопутствующие правки сделаны также в проекте частеречной разметки rupostagger.

Также я поправил некоторые баги в моделях интерпретации.

Ну и разумеется общее улучшение языковых моделей, переобученных по расширенным датасетам. В частности, сейчас в checklist'е проверки бота есть целый набор для проверки FAQ-режима бота:
Collapse )

rupostagger - простой пакет для частеречной разметки русскоязычных предложений

Привел в порядок и выложил пакет rupostagger - простую (и не SOTA) реализацию алгоритма для разметки слов тегами. Пакет не делает ничего, кроме разметки, поэтому токенизацию надо делать самостоятельно. Я использую пакет под 2 и 3 веткой питона, под Windows и Linux. Батарейки (обученная русская языковая модель) входят в комплект, ничего самостоятельно обучать не надо. Также используется русская словарная база - отдельный пакет ruword2tags, и слогоделитель rusyllabs,  они указаны в requirements.txt.

После установки (pip install git+https://github.com/Koziev/rupostagger) использовать так:
Collapse )

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

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

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