Как можно описать последние два года в области машинного обучения и искусственного интеллекта? Пожалуй, подойдет словосочетание «расцвет генеративных моделей». Причём работающих в разных модальностях. Gopher, Chinchilla, LaMDA, UL2, InstructGPT, ChatGPT, LLaMA, FRED-T5, GigaChat — вот неполный список больших языковых моделей, работающих с текстами (некоторые из которых также умеют работать и с кодом). DALL-E, CogView, Malevich (ruDALL-E 1.3B), Kandinsky 1.0 (ruDALL-E 12B), Parti, GLIDE, DALL-E 2, Imagen, Midjourney, Stable Diffusion, eDiff-I, Kandinsky 2.0, Kandinsky 2.1 — генеративные модели, способные обрабатывать текст и генерировать изображение по текстовому описанию. Есть успехи даже в генерации видео- и 3D-контента. Так, модели Make-A-Video, CogVideo, Imagen Video, Phenaki, VideoFusion, Gen-1, Gen-2 могут генерировать короткие (но полноценные) видеоролики на основе текстового описания, DreamFusion, Magic3D — 3D-объекты на основе текста, а Make-It-3D — 3D-объекты на основе одного изображения. Также развиваются и совершенствуются модели, генерирующие аудио в разных форматах (таких как, например, midi и wav) — это MuseNet, Music Transformer, Jukebox, VALL-E, SymFormer. Есть даже модели, которые решают задачу построения рекомендаций в генеративном формате, например, P5. При этом стоит отметить, что последнее время каждый день публикуется огромное количество работ (в том числе и значимых), касающихся генеративных моделей, — что однозначного говорит о небывалом интересе к этой области как исследователей, так и индустрии в целом. И это не может не радовать :)
Очень ярко прослеживается тренд и на развитие мультимодальности (и особенно активно развиваются бимодальные модели, работающие на стыке модальностей текстов и изображений). Если нашумевшая модель ChatGPT, построенная на основе архитектуры InstructGPT и принципах Reinforcement Learning with Human Feedback, работает только в текстовой модальности и может отвечать на текстовые вопросы различной степени сложности, то её последователь GPT-4 работает уже в двух модальностях, текст и изображение, но выдает только текстовый ответ. Похожим образом работают и модели Flamingo, FROMAGe, Kosmos-1, MiniGPT-4, LLaVa. Можно заметить, что большинство моделей «однонаправлены», то есть либо переводят текст в соответствующее ему изображение, либо генерируют текстовый ответ по мультимодальному запросу.
???? Это легко объяснить тем, что исследователи либо решают конкретную (но очень сложную) задачу генерации изображения по тексту, либо в качестве главного свойства создаваемой модели выбирают возможность поддерживать мультимодальный диалог. Действительно, в таком формате («мультимодального чат-бота») модель очень удобно демонстрировать сообществу и показывать её способности. Но это значит, что в контекст непременно должны помещаться не только несколько вопросов пользователя/ответов модели, в том числе и об изображении, но и несколько изображений, чтобы пользователь имел возможность давать модели задания, касающиеся нескольких изображений сразу. Поэтому приходится кодировать изображение для последующей подачи в базовую языковую модель (добавление часто происходит с помощью замороженного энкодера изображений и обучаемого коннектора, который маппит эмбеддинги картинок и текстов в одно пространство) небольшим числом «токенов», достаточным для того, чтобы понимать изображение (отвечать на вопросы по нему, описывать, распознавать текст итд), но недостаточным для того, чтобы обратно декодировать изображение (как следствие и генерировать изображение). Эту проблему, в целом, можно решить, используя способности базовой языковой модели – например, на файнтюнинге можно научить её в нужные моменты генерировать запросы в отдельную, например, диффузионную модель, которая хорошо справляется с задачей text2image, или можно ввести специальный GEN-токен, из которого отдельная сильная text2image модель будет генерировать изображение.
Тем не менее, кажется, что модель, которая сможет работать с модальностями (в нашем случае, текстами и изображениями) равноценно и симметрично (то есть по факту решать zero-shot или после файнтюнинга все задачи на стыке двух модальностей, в том числе и генеративные) сможет более правильно оценивать совместные вероятности «токенов» текста и изображения и за счёт этого более качественно решать каждую из задач в отдельности (описывать изображения, генерировать изображения по тексту, отвечать на вопросы по тексту, отвечать на вопросы по изображениям, распознавать рукописный текст итд). Назовём такую способность модели гиперзадачностью (hyper-tasking).
???? Такие исследования и архитектуры в литературе тоже встречаются, например, OFA — task agnostic модель для модальностей текстов и изображений.
Чтобы проверить гипотезу, сформулированную выше, мы задумались над модификацией генеративной модели Kandinsky 1.0 (ruDALL-E 12B), а именно над изменением процесса обработки входной последовательности. Результатом наших экспериментов стала модель RUDOLPH (RUssian Decoder On Language Picture Hyper-tasking), которая представляет собой авторегрессионную модель, способную решать разные типы задач в текстово-визуальном домене.
Маленькая версия модели RUDOLPH-350M была обучена нами в Sber AI Research ещё в конце 2021 года и опубликована на GitHub и Hugging Face 7 января 2022 года (отсюда и её рождественское название). Затем были опубликованы бОльшие версии RUDOLPH-1.3B, RUDOLPH-2.7B, RUDOLPH-2.7B-FBC2, последняя из которых была дополнительно дообучена на инструктивном датасете решать 6 прикладных задач в модальностях текст и изображение (Text QA, Math QA, Image Generation, Image Captioning, Visual QA, Text Recognition in the Wild) и стала бейзлайном соревнования FusionBrain Challenge 2.0, проведённого в рамках AI Journey Contest 2022. Также моделью уже сейчас можно воспользоваться в Cloud.
После довольно громких релизов нашей диффузионной модели Kandinsky 2.1 в начале апреля (почитать можно тут, а воспользоваться, например, тут) и GigaChat в конце апреля (почитать можно тут), наконец-то дошли руки написать о RUDOLPH, раскрыть подробности архитектуры и поделиться деталями обучения.
Давайте начинать!
Архитектура RUDOLPH
Архитектурно модель представляет собой декодер-блок трансформера, работающий с входной последовательностью токенов, которую можно условно разделить на три основных сегмента: левые текстовые токены, токены изображения и правые текстовые токены (см. схему).
Именно сегментирование входной последовательности и специально организованный механизм внимания позволяют модели работать в мультизадачном формате и осуществлять так называемый fusion модальностей (текста и изображения).
Рассмотрим подробнее роль каждого типа токенов во входной последовательности:
Левые текстовые токены - важнейший элемент входной последовательности, отвечающий за понимание текста и, следовательно, любой текстовой инструкции к заданию. Именно левая часть текста использовалась при обучении модели языковому моделированию (text2text).
Токены изображения служат для кодирования входного изображения или для генерации нового изображения по текстовому запросу. Этому типу токенов отведено место между двумя текстовыми последовательностями для решения задач в двух направлениях: текст – изображение (text2image) и изображение – текст (image2text).
Правые текстовые токены служат для генерации ответа в задачах, которые требуют текстовый вывод.
Модель работает в авторегрессионном формате, генерируя сначала левые текстовые токены, затем токены изображения и потом правые текстовые токены, обусловленные левым контекстом. Для токенизации изображения используется Sber VQGAN, токенизация текстовой последовательностей осуществляется с помощью YTTM.
Базовые характеристики RUDOLPH
Всего мы обучили три версии модели: 350M, 1.3B, 2.7B. Они различаются количеством параметров и, соответственно, количеством и размером скрытых слоёв:
Количество параметров |
350M |
1.3B |
2.7B |
Параметры последовательности токенов | |||
Число левых токенов |
64 |
128 |
384 |
Число токенов изображения |
256 |
1024 |
576 |
Число правых токенов |
64 |
128 |
128 |
Параметры архитектуры | |||
Количество скрытых слоев |
24 |
24 |
32 |
Размер скрытого слоя |
1024 |
2048 |
2560 |
Количество голов внимания |
16 |
16 |
32 |
Можно заметить, что с увеличением размера модели увеличивается и максимальный размер текстовой последовательности. Модель RUDOLPH-350М больше подходит для генерации изображений по текстовым запросам (64 токена вполне хватит для подобных запросов) или генерации текста по изображениям. Модель RUDOLPH-2.7B, левый текстовый контекст которой вмещает до 384 токенов, может служить уже как языковая модель, продолжать текст или генерировать ответы на текстовые вопросы (например, в абзаце, который вы только что прочитали 112 токенов).
Чекпоинты предобученных моделей можно загрузить с Hugging Face ????
Обратите внимание на механизм внимания
В архитектуре RUDOLPH реализован многоуровневый механизм внимания: 1) маскированный механизм внимания (masked self-attention) для текстовых токенов; 2) механизм разреженного внимания (sparse attention) для визуальных токенов. При генерации текстовых токенов на матрицу скалярных произведений накладывается треугольная маска, чтобы новые токены генерировались только исходя из левого контекста. Когда генерируется новый токен изображения, открытыми остаются не все сгенерированные до этого токены, а лишь его соседи в строке, столбце и некотором контекстом окне.
Подобный механизм разреженного внимания хорошо зарекомендовал себя в генеративных text-to-image моделях (например, DALL-E), поскольку он позволяет учитывать лишь наиболее релевантные входные токены изображения, тем самым значительно снижая требования к памяти при их вычислении.
Маски внимания, которые используются в разных версиях модели RUDOLPH (350M, 1.3B, 2.7B) приведены на рисунке ниже. Слева направо показаны маски внимания для режимов «по строкам», «по столбцам», «свёртка» и «последняя свёртка» (когда открываются токены в некотором «скользящем окне» для текущего токена).
На схеме ниже можно увидеть, что при генерации токенов изображения бОльшая часть сгенерированной картинки остается закрытой.
Как раньше уже было отмечено, три версии модели отличаются не только количеством обучаемых параметров, но и спецификой сегментации входной последовательности на текстовые и визуальные токены. Так, например, самая большая модель RUDOLPH 2.7B может кодировать до 384 токенов в левом тексте, что делает ее наиболее подходящей версией модели для решения текстовых задач.
Спецтокены
Разделение токенов во входной последовательности, о котором мы говорили ранее, предполагает, что RUDOLPH может эффективно решать целый спектр задач, связанных с двумя модальностями. Например, модель может описывать изображение и отвечать на вопросы по изображению, генерировать изображения по тексту или работать как языковая модель. Чтобы помочь модели ориентироваться в мультизадачном сетапе, в словарь были добавлены спецтокены, кодирующие тип решаемой задачи.
Соответствующие токены добавляются в начало левой и правой текстовой последовательности. Левый токен обуславливает генерацию всей последовательности, правый токен кодирует информацию о всем предыдущем контексте и обуславливает генерацию ответа в правых текстовых токенах.
В процессе предобучения использовались следующие спецсимволы:
<LT_T2I>
— для задачи генерации изображения по тексту.
<LT_I2T>
— для задачи генерации текстового описания изображения.
<LT_T2T>
— для задачи языкового моделирования (LM).
<RT_I2T>
— для задачи генерации текстового описания по изображению.
<LT_UNK>
и<RT_UNK>
— спецсимволы неизвестной задачи для левого и правого текстов соответственно. Unknown‑токены заменяли токены определенных задач в 25 % случаев, чтобы модели было легче адаптироваться под решение новых неизвестных задач.
Обучение
Предобучение
RUDOLPH был предобучен на трех типах задач:
описание изображения (image captioning i2t)
генерация изображения по тексту (image generation t2i)
генерация текста в левых токенах (language modeling t2t)
Для предобучения были использованы следующие данные:
119M пар текст-изображение
60M текстовых параграфов на русском языке
В процессе обучения батч собирался из примеров задачи одного типа (t2i/i2t/t2t).
Единственный тип задачи, который модель не видела в процессе предобучения, — это генерация текста в правых текстовых токенах по левому тексту. Данную комбинацию мы использовали в процессе файнтюнинга модели.
Самую большую модель RUDOLPH-2.7B мы обучали на 160 GPU (Nvidia Tesla A100) в течение 45 дней.
Размер батча на 1 GPU: 32
Эффективный размер батча: 5120
Пиковый learning rate: 1e-4
Файнтюнинг с инструкциями
В левых текстовых токенах RUDOLPH обучался как стандартная языковая модель, что означает, что он способен понимать естественный язык. Мы предположили, что модель можно обучать решению новых задач с помощью описания этих задач на естественном языке в виде инструкций (этот подход особенно популярен в последнее время, а выход текстовых моделей FLAN-T5, FLAN-PaLM, FLAN-UL2 и вовсе показывает, что данный режим обучения модели во многом превосходит prompt-tuning и few-shot learning).
В нашем случае, левые текстовые токены отвечают за кодирование текстовой инструкции к задаче и самой задачи, далее мы можем подавать любую задачу, связанную с текстами и изображениями, и ожидать, что модель научится определять тип задачи по инструкции и генерировать правильный ответ, будь то изображение или текст.
Первый подход к развитию парадигмы Multimodal Instruction Tuning был реализован нами для модели RUDOLPH в рамках подготовки к соревнованию FusionBrain Challenge 2.0 на AI Journey Contest 2022, о котором мы расскажем подробнее в нашей следующей статье. Стоит отметить, что подход оказался довольно удачным, наша базовая модель, предложенная участникам в качестве бейзлайна, заняла почетное третье место в соревновании.
В процессе дообучения модели мы хотели оценить два основных аспекта. Во-первых, насколько хорошо модель сможет обучаться в мультизадачном режиме с двумя модальностями. Как известно, мультизадачное обучение часто вызывает эффект Negative Transfer, когда комбинация нескольких задач негативно влияет друг на друга и ведет к ухудшению качества. Во-вторых, нам было важно понять, действительно ли модель учится следовать инструкциям и способна ли она после файнтюна обобщать знания на новые задачи. Для того, чтобы это проверить, мы отобрали 12 задач, связанных с текстами и изображениями, 6 из которых мы использовали для файнтюна модели, а другие 6 задач были закрытыми — они использовались только при тестировании модели.
Описание задач
Шесть открытых задач, которые модель учится решать в процессе файнтюнинга включают в себя:
Понимание прочитанного текста (Text QA)
Решение математических задач (Mathematical QA)
Генерация изображения по тексту (Image Generation)
Описание изображения (Image Captioning)
Ответ на вопросы по изображению (Visual QA)
Распознавание текста на изображении (Text Recognition in the Wild)
Оставим небольшую тайну и пока не будем раскрывать, какие именно задачи были скрытыми, однако отметим, что эти задачи включают задания с теми же модальностями и не кардинально отличаются от открытых (это будет раскрыто в соответствующей статье про соревнование FusionBrain Challenge 2.0).
Данные для файнтюнинга
1. Text QA
Датасет: Sber Question Answering Dataset (SberQuAD). В нём содержатся задачи на понимание прочитанного текста. Каждый пример включает небольшой абзац текста на русском языке и вопрос к нему. Модели необходимо найти отрывок из текста, который будет являться ответом на соответствующий вопрос. Размер обучающей выборки составил 45 238.
Пример из датасета SberQuAD:
{
"context": "Первые упоминания о строении человеческого тела встречаются в Древнем Египте...",
"id": 14754,
"qas": [
{
"id": 60544,
"question": "Где встречаются первые упоминания о строении человеческого тела?",
"answers": [{"answer_start": 60, "text": "в Древнем Египте"}],
}
]
}
2. Mathematical QA
Датасет: синтетические примеры, сгенерированные с помощью mathematics_dataset от DeepMind. Для нашего файнтюна мы использовали модули для генерации линейных уравнений с одной и двумя переменными (algebra → 'linear_1d’, 'linear_2d’ modules). Мы перевели сгенерированные выражения на русский язык с помощью автоматического переводчика (так как все описания заданий в сгенерированном сете были шаблонными, автоматический перевод отработал хорошо) и аугментировали некоторые примеры, заменив знаки математических операций на их текстовое описание('+', '-', '*', '/', '=' --> 'плюс'/'прибавить', 'минус', 'умножить', 'делить', 'равно'
). Мы также добавили три неправильных варианта ответа, приведя задачу к типу Multiple Choice QA. Размер обучающей выборки составил 100 000 примеров.
Пример задачи Mathematical QA:
Решите уравнение. Если 6 умножить на y и вычесть 54, то получится -72. Чему равно y?
Варианты: a) -4; b) -20; c) -5; d) -3
Ответ: [d, -3, d -3]
3. и 4. Image Generation и Image Captioning
Датасет: для задачи генерации изображений по текстовому описанию и задачи описания изображения использовался переведённый датасет COCO, содержащий пары «текст-картинка».
Размер обучающей выборки — 82 783 пары.
5. Visual QA
Датасет: Visual Genome с переведенными вопросно-ответными парами.
Размер обучающей выборки — 82 759
6. Text Recognition in the Wild
Датасет: Для обучения мы использовали новый датасет – START (SynThesized and Annotated dataset for Recognition of Text), состоящий из двух частей с синтетическими и реальными данными. Синтетический набор данных содержит 140 000 изображений с наложенными на них надписями на русском языке. Изображения взяты из открытого датасета COCO. На изображения добавлен текст (текст расположен в разных частях изображения, повернут под разными углами, имеет различные цвета и прозрачность и т.д.). Набор реальных данных содержит 37 385 фотографий городской среды, на которых присутствуют надписи на русском языке.
Мы использовали разные комбинации синтетических и реальных данных, но лучшие результаты файнтюна для задачи Text Recognition in the Wild были получены, когда использовались только реальные данные.
Таким образом, размер обучающего датасета составил 37 385.
Для каждого из типа задач мы также придумали по 10 различных инструкций, которые описывают данную задачу.
Например, для задачи Text QA – «Напиши ответ на вопрос по тексту», «Сгенерируй ответ на вопрос», для задачи Image Captioning – «Опиши изображение», «Как можно описать картинку?»
Процесс дообучения
Модель RUDOLPH-2.7B дообучалась на 8 GPU (Nvidia Tesla A100). Для lr использовался косинусный шедулер с пиковым значением 2*10^-5. Эффективный размер батча — 64. Мы использовали взвешенное сэмплирование по задачам, т.е. в каждый батч попадало примерно одинаковое количество примеров из разных задач.
Так как последовательность RUDOLPH разделена на три сегмента, для каждого типа задач мы могли выбрать вес, с которым будет считаться лосс для каждого сегмента. Ниже приведены соответствующие веса по задачам. Здесь {segm}_loss_weight обозначает вес для значения лосса по токенам, относящимся к соответствующему сегменту segm ∈ [lt, rt, img].
Text QA: lt_loss_weight: 0.01; img_loss_weight: 0.01; rt_loss_weight: 7
Mathematical QA: lt_loss_weight: 0.01; img_loss_weight: 0.01; rt_loss_weight: 7
Image Generation: lt_loss_weight: 1; img_loss_weight: 7; rt_loss_weight: 0.07
Image Captioning: lt_loss_weight: 1; img_loss_weight: 1; rt_loss_weight: 7
Visual QA: lt_loss_weight: 0.01; img_loss_weight: 1; rt_loss_weight: 7
Text Recognition in the Wild: lt_loss_weight: 0.01, img_loss_weight: 1, rt_loss_weight: 7
Лосс вычислялся отдельно для каждой задачи и усреднялся по всем задачам для получения финальной оценки.
???? Стоит отметить, что вес каждого сегмента при подсчете лосса, а также степень влияния лосса каждой задачи на общий лосс являются гиперпараметрами, которые могут значительно повлиять на результаты работы модели.
Можно увидеть, что при файнтюнинге лосс падал на всех задачах, кроме генерации изображений. На претрейне модель увидела достаточное количество примеров задачи данного типа, при этом на файнтюне сэмплы по задаче text-to-image составляли всего 1/6 датасета. Таким образом, добавление задачи генерации изображений из общего домена позволяет с одной стороны, не забыть саму эту задачу на файнтюне, а с другой стороны, позволяет модели обучаться новым задачам, которые она не видела в процессе претрейна (например, Text QA или Visual QA).
Результаты дообучения
Как мы уже отметили, дообученная модель RUDOLPH-2.7B выступала в качестве бейзлайна на соревновании FusionBrain Challenge 2.0. Для соревнования были собраны public и private выборки, каждая содержала по 3 600 семплов по всем 12 задачам: по 400 семплов на открытые (на которых дообучалась модель) и по 200 на закрытые. Данные для этих выборок собирались и размечались вручную. В результате у нас получились следующие метрики на public и private тесте.
Score |
TextQA |
MathQA |
IG |
IC |
VQA |
TRitW |
H1 |
H2 |
H3 |
H4 |
H5 |
H6 |
|
public |
0.25 |
0.26 |
0.32 |
0.29 |
0.23 |
0.34 |
0.36 |
0.20 |
0.20 |
0.28 |
0.18 |
0.31 |
0.11 |
private |
0.25 |
0.28 |
0.29 |
0.30 |
0.23 |
0.32 |
0.35 |
0.23 |
0.27 |
0.26 |
0.19 |
0.30 |
0.11 |
Для оценки решений для Text QA использовалась метрика F1, для Math QA — Exact Match, для Image Generation (IG) — 1/2 * (CLIP+(200-min(200,FID)/200)), для Image Captioning (IC) — 1/2 * (Meteor+CLIP), для Visual QA (VQA) — Meteor, для TRiTW — (1-NED). Для каждой из 6 скрытых задач (Hk) рассчитывалась соответствующая ей скрытая метрика Sk ∈ [0,1], где 0 — наихудшее значение, а 1 — наилучшее значение метрики.
Метрики, полученные нашей моделью на private выборке, позволили ей занять 3 место в соревновании FusionBrain Challenge 2.0.
Задача Object Detection
Нахождение объектов на изображении (Object Detection) — еще один тип задач, который поддался нашей гиперзадачной модели RUDOLPH.
Существует два основных типа задачи Object Detection:
Нахождение всех объектов на изображении, относящихся к определенному (заранее известному) классу.
Zero-shot object detection — нахождение объектов, удовлетворяющих произвольному текстовому запросу.
В первом случае, у нас есть определенный список классов, и мы можем обучить модель находить все объекты, относящиеся к данным классам. Во втором типе задачи, модели нужно определить местоположение и масштаб любого объекта, описанного в текстовом запросе. Безусловно, вторая задача является более сложной для модели, так как требует глубокого понимания текста на естественном языке. При этом, RUDOLPH может справиться с обеими задачами.
При решении задачи object detection, модель должна выдать т.н. bounding box (ограничивающая рамка, bbox). Это прямоугольник, который максимально точно определяет границы положения искомого объекта на изображении. Положение рамки задается 4-мя числами — X, Y, W, H:
X — горизонтальная координата верхнего левого угла
Y — вертикальная координата верхнего левого угла
W — ширина прямоугольника
H — высота прямоугольника
Так как непосредственное предсказание координат в виде чисел является достаточно сложной задачей для генеративных моделей, при решении задачи object detection нам потребовалось расширить словарь токенов, которые понимает модель, добавив туда специальные локализационные токены, отвечающие за кодирование координат на изображении.
Для того чтобы получить локализационные токены мы наложили на изображение равномерную сетку N*N (N=32) и для каждой ячейки определили спецтокен, кодирующий ее.
При обучении модели на вход (в левые текстовые токены) подается текстовое описание искомого объекта (для zero-shot object detection) или список классов, токены изображения; координаты bbox-ов в виде последовательности соответствующих им локализационных токенов записываются в правые текстовые токены, которые модель учится предсказывать.
Как и в других задачах, на которые файнтюнилась модель, мы добавили левые и правые текстовые токены (<LT_ODG>
и <RT_ODG>
), определяющие тип решаемой задачи. Сама модель будет учиться предсказывать все координаты (в виде последовательности локализационных токенов) запрашиваемого объекта. Для файнтюна модель мы использовали датасет MS-COCO, содержащий изображения и соответствующие им аннотации, переведенные на русский язык.
Подход кажется довольно очевидным, однако не все так просто. Посмотрим, с какими основными трудностями мы столкнулись при файнтюне RUDOLPH на задачу object detection.
После первой итерации обучения мы обнаружили, что RUDOLPH склонен к ложным срабатываниям при решении данной задачи, т.е. помимо bbox искомого объекта модель генерирует дополнительные bbox-ы, которые не соответствуют целевым объектам.
Для решения этой проблемы, мы ввели два дополнительных токена, которые показывают, является ли объект внутри предсказанного bbox-а реальным или фейковым. Далее мы аугментировали наш обучающий датасет с помощью случайных bbox-ов, соответствующих фейковым объектам, и учили RUDOLPH предсказывать не только реальные объекты и их границы, но и их «реальность» или «фейковость».
Т.е. правый текст при обучении выглядел следующим образом: <bos> <RT_ODG> <LOC_0> <LOC_1> <LOC_2> <LOC_3> <IS_REAL> <eos>
Данный подход близок к negative sampling. Подобная аугментация данных позволила значительно сократить количество ложных срабатывали модели.
Второй проблемой стало то, что модель часто генерировала несколько bounding box-ов, относящихся к одному объекту, но пересекающихся друг с другом. С данным проблемой мы постарались справиться, добавив IoU-фильтр, который определяет площадь пересечения между bbox-ами и объединяет рамки с высокой долей пересечения (по некоторому порогу).
С кодом для дообучения RUDOLPH на задачу object detection можно познакомится по ссылке, а почитать подробнее про zero-shot object detection и найти полезные датасета для файнтюна моделей можно на гитхабе нашего соревнования Fusion Brain Challenge 2021.
Примеры инференса модели RUDOLPH-2.7B после инструктивного файнтюнинга
Давайте посмотрим, как RUDOLPH-2.7B справляется с различными задачами (как текстовыми, так и на стыке изображений и текстов).
Задача 1
Левый текст. Ответь на вопрос. Вопрос: Кто такой Чебурашка?
Правый текст. Ответ: чебурашка - это один из самых известных героев советского телевидения, маленькая плюшевая игрушка, которую можно увидеть в магазине
Задача 2
Левый текст. Реши математическую задачу. Если y умножить на 2, то получится 16. Чему равно y?
Варианты: a) 1; b) 2; c) 8; d) -8
Правый текст. Ответ: с 8
Задача 3
Левый текст. Реши логическую задачу. У Папы Мэри 5 дочерей: Чичи, Чача, Чучу и Чече. Как зовут пятую дочку?
Правый текст. Ответ: мэри
???? Картинка генерируется в любом случае, даже если решаемая задача полностью текстовая (интересный побочный эффект архитектуры и мультимодальности)
Задача 4
Левый текст. Сгенерируй изображение по описанию. Поле с одуванчиками в стиле Ван Гога.
Правый текст. масло
???? Бонусом происходит text completion (то есть в каком-то смысле модель сама объясняет, почему, например, сгенерировала на картинке детали, о которых напрямую в запросе не было речи)
Задача 5
Левый текст. Опиши изображение.
Правый текст. Ответ: на картинке изображены два пингвина на скале
Задача 6
Левый текст. Проанализируй изображение и дай ответ на вопрос. Какое время суток изображено?
Правый текст. Ответ: ночное время
Задача 7
Левый текст. Определи текст на картинке.
Правый текст. Ответ: то самое тесто
Задача 8
Левый текст. Распознай текст на изображении.
Правый текст. Ответ: мама
Задача 9
Левый текст. Опиши космоснимок.
Правый текст. Ответ: вид сверху на городскую территорию
Задача 10
Левый текст. Сгенерируй лицо мужчины. У него темные короткие волосы, карие глаза и прямой нос. Мужчина в шляпе.
Правый текст. вид сбоку
Задача 11
Левый текст. Как приготовить блины?
Левый текст (продолжение). для приготовления нам понадобится: мука пшеничная - 1 ст. л. ; разрыхлитель (сода) - 1 ст. л. ; растительное масло - 2 ст. л. ; масло сливочное - 1 ст. л. ; яйцо - 1 шт. ; сахар - 1 ст. л. ; мука пшеничная - 1 ст. л. ; яйца взбить миксером в пышную пену. Для украшения и подачи в блинчики добавить сметану и приступать к подаче.
Правый текст. Блины сметанные с измельченным миндалем.
Важно: выше были показаны специально отобранные примеры генераций/ответов на вопросы модели RUDOLPH-2.7B
Примеры использования RUDOLPH в zero-shot режиме можно также найти в репозитории на Github.
Заключение и выводы
Следует отметить, что предложенное нами решение RUDOLPH, показывает хорошие результаты на задачах в двух модальностях, а также демонстрирует понимание инструкций и возможность файнтюнинга на нескольких задачах. Последнюю особенность мы исследовали весной 2022 года, когда Instruction tuning еще не стал мейнстримом :)
В продолжении развития идеи сильных мультимодальных мультизадачных моделей мы работаем в направлении усиления моделей за счёт использования encoder-decoder архитектур и устранения четкого разделения между левым, центральным и правым контекстами. В настоящее время нами разработана концепция мультимодальной архитектуры, которая не зависит от типа и количества модальностей, но все описанные подходы к обучению и файнтюнингу RUDOLPH будут применимы в новой концепции, о которой мы также скоро расскажем подробнее.
Авторы и контрибьют
Модель RUDOLPH была разработана и обучена исследователями команды Sber AI и AIRI на объединённом датасете Sber AI и компании SberDevices. Особую благодарность хотелось бы выразить Елизавете Гончаровой ????
Коллектив авторов: Алексей Шоненков, Елизавета Гончарова, Денис Димитров, Михаил Константинов (независимый контрибьютор), Анастасия Мальцева, Игорь Павлов, Григорий Рашков, Андрей Кузнецов.