Category: животные

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

Так ли хороша GPT(*) для оценки P(текст)?

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



  1. Берем SV-затравку для предложения с синтаксисом SVO, например "Кошки любят есть".

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

  3. Оцениваем  достоверность с помощью loss'а языковой модели GPT.

  4. Ранжируем в порядке от лучшего к худшему и смотрим первую десятку.


Результат меня мягко говоря неприятно удивил, и я даже проверил работу нескольких вариантов GPT, включая базовую многоязычную GPT2. Результат для многоязычной GPT2 еще можно оправдать тем, что русских текстов она при обучении видела очень немного. Но вот попадание в топ ruGPT грейпфрутов объяснить я не берусь.


Число в первом столбце - это "перплексия", поэтому чем оно меньше, тем более вероятно предложение. Код доступен по ссылке, оценка предложения реализована функцией в строке 16.


Collapse )

PS: листинг скоринга предложений в ruGPT small с фрагментами для рыбы, сметаны и т.д. Тут лучше видно, что интуитивные ожидания совершенно не коррелируют с оценкой GPT.


Collapse )

Masked NP Language Modeling

Идея эксперимента с MNPLM была следующая.
Что, если учить генеративную нейросетку восстанавливать не просто какое-то слово в контексте предложения, а цельное словосочетание?

К примеру, в предложении "Голодная кошка ловит серую мышку" будем запикивать именную группу прямого дополнения и просить сетку по строке "Голодная кошка ловит [NP]" догадаться, какие варианты подстановок [NP] допустимы. Главная мысль - так как целое словосочетание лучше описывает объективную сущность, то модель сформирует более качественное представление о мире.

Возможное практические применение модели - аугментация текстовых датасетов, а именно их рандомизация (несинонимичные замены).

Весь код, датасеты и небольшая техническая справка выложены в репозитории https://github.com/Koziev/masked_np_language_model.

Под катом - некоторые результаты, полученные после обучения rugpt-small на 10 миллионах сэмплов.
Collapse )

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

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