Что-то странное полезло из генератора стихов

Теряюсь в догадках, откуда такие странные отголоски, намеки и аллегории:


--- Я не люблю ---

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



или вот:


--- Я не могу сказать люблю ---

И в душе твоей весна,
Прохладный ветерок.
И ты, как будто, была одна
И я не смог


Ну и в целом выдача стала получше, чем в предыдущей версии:
Collapse )

Маскулинативы от NMT модели

При просмотре результатов машинного перевода с английского на русский (с помощью OpenNMT) заметил прелестные примеры в духе  толерантности и прочего BLM'а:

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


Было бы, конечно, неплохо для симметрии увидеть еще феминитив "баранка" для "баран".

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

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

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


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

Делаю новый вариант генератора стихотворений

В продолжение недавней темыболее старой темы).

Я решил принципиально не воспроизводить подходы Нейронной Обороны, проекта Ильи Гусева или генератора стихов, о котором рассказывал Сергей Марков в последней части семинара SberDevices.

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


           * * *

И вспыхнув круг, над тенью мира,
Пойдёт на полумрак всегда,
С трудом порочная вода,
В объятьях своего кумира.


        * * *

Нас поднимать
Прибыл медведь -
Лапой познать,
Песню нам петь…


        * * *

Двадцать восемь лет тепло,
Вдруг от взгляда утекло:
Был любовью старой
Чей-то гость с гитарой!

С генерацией изображений в DALL-E не ахти

После недели экспериментов с моделью DALL-E остались такие впечатления.

1. Обучить DALL-E на своем датасете картинок с текстовыми описаниями без вычислительного кластера нереально. Все мои попытки обучиться на MSCOCO не давали ничего, кроме мешанины мазков или очень странных узоров при генерации изображения по простым словосочетаниям.

2. Если использовать предобученные модели, получается немного лучше, но все равно результат скорее разочаровывает. Я попробовал модели отсюда. Например, эта модель для текста "smiling child" выдает:
Collapse )

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

В итоге, продолжим поиски работающих подходов для text 2 image в рамках бюджета.

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

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

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

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


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


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

Collapse )

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




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



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

Collapse )

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

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

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


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

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



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

Еще:

Collapse )


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




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

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



Еще:
Collapse )


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




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

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



Еще:


Collapse )


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




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

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

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

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

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

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

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

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


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

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


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

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


Collapse )

Релиз 0.0.20.1 чатбота и докер-образ с полным набором моделей

В репозиторий прототипа чатбота Axioma выложены все последние изменения в кодовой базе и сценариях.


Кроме этого, собран докер-образ со всеми моделями чатбота. С помощью этого образа можно легко запустить своего телеграм-бота - пошаговая инструкция под катом.

Collapse )

На каком слое BERT'а самые лучшие эмбеддинги токенов?

Как побочный результат некоторых экспериментов с эмбеддингами предложений получен вот такой не совсем очевидный заранее результат.
Берем модель BERT, точнее выходы ее последнего слоя, без усреднения.
По сути, получаем для каждого входного токена контексто-зависимый эмбеддинг.
Далее, упаковываем эту последовательность векторов токенов в вектор предложения с помощью LSTM.
И ставим финальный декодер - из полученного вектора предложения восстанавливаем входной список токенов.
Получается несимметричный автоэнкодер. На входе у него - токены BPE, на выходе - они же:
Collapse )

Сюрприз обнаруживается, если проверить, как влияет количество трансформеров (или в общем случае сложность BERT) на качество получающегося автоэнкодера.
Collapse )