Привет, Хабр! В прошлой статье мы рассказали про эволюцию подходов к обучению мультимодальных больших языковых моделей для решения задачи понимания видео. Сегодня хотим рассказать о том, как мы учим LLM понимать видео и поддерживать диалог по ним на русском языке, и как мы оцениваем этот навык, чтобы сравнивать разные модели между собой.
Очевидный ответ: потому что большинство доступных данных для обучения моделей имеют разметку и надписи в самих видео на английском или китайском языке, при этом содержание видео в зарубежных наборах и бенчмарках нередко отражает культурную специфику других стран, а российскую — наоборот, не отражает.
В итоге, обучаясь и оценивая результаты только на англоязычных данных, мы получили модель, которая могла показывать хорошие метрики на стандартных англоязычных бенчмарках, но совершала глупые ошибки при общении на русском.
Самая частая проблема — ответы полностью на английском или переход на английский в процессе ответа. Чтобы построить систему оценки модели, которая отражала бы качество работы на реальных и продуктовых сценариях, мы решили собрать и разметить свой бенчмарк на русском.
Для оценки способности LLM понимать видео-модальность обычно используется категория заданий «ответы на вопросы по видео» (Video Question Answering, VideoQA): модель получает на вход видео и инструкцию (вопрос) на естественном языке, и должна ответить точно в соответствии с содержанием видео и инструкцией. Для своего бенчмарка мы выбрали два формата вопросов VideoQA:
вопросы с несколькими вариантами ответов (Multiple Choice Video Question Answering, MC-VQA) и метрику Accuracy;
открытые вопросы (Open-Ended Video Question Answering, OE-VideoQA) и метрику GPT Accuracy, предложенную в работе Video-ChatGPT.
Если первый вариант проверяет способность выбрать правильный ответ из предложенных, то второй позволяет оценить качество генерации на естественном (русском) языке. Эти форматы позволяют достаточно легко оценить модели в разрезе различных навыков. Каждый вопрос проверяет определённый навык, например: распознавание действий (Action Recognition), пространственное мышление (Spatial Reasoning), понимание временных рамок (Temporal Perception) и другие.
За основу русскоязычного бенчмарка были взяты академические англоязычные бенчмарки. При выборе учитывалось разнообразие тем (повседневные ситуации, активности, юмористические видео и т. д.), разный уровень сложности и набор проверяемых навыков. Выбранные наборы данных были переведены вручную на русский язык при помощи команды профессиональных редакторов. В таблице ниже приведены бенчмарки, их объём и темы:
Бенчмарк | Темы | Количество вопросов | Проверяемые навыки |
Повседневные активности | 1162 | Action Recognition, Attribute Perception, Object Recognition | |
Юмор, магия, креативность | 175 | Action Reasoning, Object Reasoning, Spatial Reasoning, Temporal Reasoning | |
Музыка, люди, игры, спорт, новости, образование, ТВ-шоу, анимация, транспорт, как сделать, путешествия, наука, животные дети, документы, еда, приготовление, красота, реклам | 1524 | Action Recognition, Attribute Perception, Object Recognition | |
Повседневные активности | 1797 | Action Recognition, Counting Problems, Object Recognition | |
3D-сцены | 1656 | Spatial Perception, Spatial Reasoning | |
Повседневные ситуации | 420 | Action Recognition, Object Recognition | |
Повседневные ситуации | 1785 | Counting Problems, Temporal Perception, Temporal Reasoning | |
Повседневные ситуации | 1895 | Action Reasoning, Action Recognition, Temporal Perception, Temporal Reasoning | |
Повседневные активности, передвижение по улице, развлечения, работа, спорт, повседневные домашние дела, поделки и ремесла | 159 | Action Reasoning, Action Recognition, Temporal Perception, Temporal Reasoning |
В результате анализа тем и навыков, представленных в академических бенчмарках, нам стало понятно, что для русскоязычного бенчмарка не хватает данных, отражающих русский культурный код. Мы заметили, что в академических бенчмарках почти нет видео, ориентированных на практические прикладные задачи (How-to, DIY-видео).
Для выбранных прикладных тем автоматически собрали материалы из открытых источников. Далее собранные видео отфильтровали (валидация видео) на платформе разметки ABC Elementary по следующим критериям: видео хорошего качества, не содержит контент 18+, есть динамика в видео.
На следующем этапе к отфильтрованному набору видео разметчики составляли различные по сложности вопросы: один простой, один средний и два сложных. И в этом же задании разметчики сразу заполняли ответы.
Простой вопрос: Что в руках у человека на велосипеде?
Средний вопрос: Какое преступление совершил человек на видео?
Сложный вопрос: Какое неожиданное действие делает видео смешным?
Также требовалось, чтобы составленные вопросы опирались на специфику темы видео, например:
видео: «На видео человек готовит яичницу»;
специфичный вопрос: «Что готовит человек?»;
общий вопрос: «В каком помещении находится человек?».
При составлении вопросов к видео требовалось опираться только на визуальную составляющую (в данной разметке не рассматривалась звуковая модальность).
На последнем этапе разметки проверялась корректность вопросов и правильность ответов к видео. При этом, если вопрос был корректен, а ответ на него был правильным, то заполнялись варианты неверных ответов (с условием, что минимум два неверных ответа похожи на правильный). Из неверных вариантов ответа и правильного ответа далее были сформированы опции для выбора ответа на вопрос.
Вопрос: «В какую сторону поворачивает машина из которой снимают видео в начале видео?»;
Правильный ответ: «Влево»;
Опции ответов: A: не знаю, B: вбок, C: вправо, D: влево, E: назад.
Ниже приведена общая информация о данных, собранных на русском языке «с нуля». Навыки сформированы на основе наиболее популярных вопросов.
Категория | Темы | Количество вопросов | Навыки |
Культурный код | Фильмы (советские и российские) | 1069 | Action Recognition, Attribute Perception, Counting Problems, Emotion Recognition, Object Localization, Object Recognition, Spatial Perception |
Культурный код | Танцы и гуляния (народные танцы, Масленица, Иван Купала) | 698 | Action Recognition, Counting Problems, Spatial Perception, Special QA, Temporal Perception, Temporal Reasoning |
Культурный код | История, исторические реконструкции | 121 | Action Reasoning, Action Recognition, Attribute Perception, Object Recognition, Special QA, Temporal Perception, Temporal Reasoning |
Культурный код | Мультфильмы (советские и российские) | 415 | Action Recognition, Attribute Perception, Counting Problems, Emotion Recognition, Temporal Perception |
Культурный код | Театр | 166 | Action Recognition, Attribute Perception, Counting Problems, Emotion Recognition, Spatial Perception, Special QA |
Культурный код | Юмор | 845 | Action Recognition, Attribute Perception, Counting Problems, Emotion Recognition, Spatial Perception, Special QA, Temporal Action, Temporal Perception |
Культурный код | Настольные игры (нарды, шашки, шахматы и т. д.) | 346 | Action Recognition, Attribute Perception, Counting Problems, Special QA |
Культурный код | Спортивные игры (лапта, городки, кулачные бои и т. д.) | 460 | Action Reasoning, Counting Problems, Object Localization, Spatial Perception, Special QA, Temporal Perception, Temporal Reasoning |
How-to | ПДД (уроки, экзамены) | 3289 | Action Recognition, Attribute Perception, Counting Problems, Object Localization, Spatial Reasoning, Special QA, Temporal Perception |
How-to | Спорт и фитнес (йога, кроссфит, пилатес и т. д.) | 233 | Action Reasoning, Counting Problems, Object Localization, Spatial Perception, Special QA, Temporal Perception, Temporal Reasoning |
How-to | Рецепты еды | 483 | Action Recognition, Attribute Perception, Counting Problems, Object Recognition, Special QA |
How-to | Ремонт жилья | 2220 | Action Reasoning, Action Recognition, Attribute Perception, Counting Problems, Object Recognition, Spatial Perception, Special QA, Temporal Perception |
How-to | Ремонт устройств | 2367 | Action Reasoning, Action Recognition, Attribute Perception, Counting Problems, Object Recognition, Spatial Perception, Special QA |
В получившемся бенчмарке 23 253 вопросов для проверки различных навыков. Мы проверили, что распределение ответов по классам равномерное: «A: 5263, B: 5310, C: 4876, D: 4719, E: 3085». Большая часть вопросов содержит 5 опций для выбора правильного ответа.
Общее количество уникальных видео в бенчмарке 8865. Ниже приведена статистика по длительности видео. Распределение количества примеров по длительности в секундах следующее:
Длительность, секунд | Число примеров |
<=10 | 2420 |
10-30 | 2364 |
30-60 | 1027 |
60-240 | 3010 |
>240 | 44 |
Большинство видео в бенчмарке короче 4 минут. Статистика длительности видео в разрезе наборов данных (жирным выделены крайние значения средней длины):
Бенчмарк | Средняя длина видео | Минимальная длина видео | Максимальная длина видео |
ActivityNet | 0:01:51 | 0:00:05 | 0:04:46 |
FunQA | 0:00:24 | 0:00:02 | 0:01:56 |
MSRVTT | 0:00:15 | 0:00:10 | 0:00:30 |
MSVD | 0:00:10 | 0:00:02 | 0:00:47 |
SQA3D | 0:00:05 | 0:00:02 | 0:00:14 |
STAR | 0:00:31 | 0:00:08 | 0:01:13 |
TGIF | 0:00:04 | 0:00:02 | 0:03:20 |
NExT-QA | 0:00:40 | 0:00:10 | 0:03:00 |
PAXION | 0:00:04 | 0:00:01 | 0:00:06 |
Фильмы | 0:00:21 | 0:00:05 | 0:08:07 |
Мультфильмы | 0:00:09 | 0:00:05 | 0:00:37 |
Танцы и гуляния | 0:01:36 | 0:00:07 | 0:03:00 |
История | 0:00:50 | 0:00:08 | 0:02:55 |
Юмор | 0:02:08 | 0:00:09 | 0:03:00 |
Рецепты еды | 0:00:47 | 0:00:11 | 0:02:58 |
Спортивные игры | 0:00:55 | 0:00:06 | 0:03:00 |
Настольные игры | 0:01:10 | 0:00:06 | 0:02:56 |
Театр | 0:01:26 | 0:00:08 | 0:02:51 |
ПДД | 0:03:28 | 0:00:02 | 0:04:04 |
Спорт и фитнес | 0:00:45 | 0:00:31 | 0:03:59 |
Ремонт жилья | 0:02:18 | 0:00:05 | 0:04:02 |
Ремонт устройств | 0:03:33 | 0:01:19 | 0:04:02 |
В академических наборах в основном содержатся короткие видео. Мы постарались не только повысить разнообразие тем, но и увеличить среднюю длительность видео за счёт собранных данных.
На диаграмме отражены наиболее частые вопросы бенчмарка. Вопросы, начинающиеся со слов «я стою»/»я сижу», относятся к бенчмарку SQA3D, где вопрос состоит из двух частей — описания пространства + вопроса, проверяющего навыки ориентации в пространстве. Мы можем выделить распознавание действий (action recognition), как самый популярный навык. Отметим разнообразие вопросов по формулировкам, что делает оценку моделей более устойчивой относительно «запоминания» моделью определенных конструкций вопросов на этапе обучения.
Теперь мы можем оценить качество работы моделей на русскоязычном бенчмарке и посчитать на нём метрики. Следующий шаг — увеличить количество и разнообразие русскоязычных данных в обучении модели. Для эффективного решения этой задачи мы решили сгенерировать с помощью LLM инструктивный русскоязычный набор на основе текстовых описаний к видеозаписям.
Для генерации инструктивного набора мы адаптировали промпт, описанный в статье JourneyDB: A Benchmark for Generative Image Understanding. Основная идея — подать текстовые описания к видео и на их основе составить диалог между LLM и человеком, будто нейросеть сама смотрит на видеозаписи, а не читает текст. Для большей вариативности мы использовали такие темы, как: фильмы, мультфильмы, графический дизайн и анимация. Ниже приведены примеры описаний.
Фильмы:
Женщина в тёмном платье ходит в темной комнате и что-то говорит, она подходит к мужчине, поправляет свои волосы и что-то говорит. Стены из красного кирпича, измазанного в цементе.
Мультфильмы:
В советском мультфильме «Баранкин, будь человеком!» по голубому небу летают пять белых бабочек. Они приземляются на коричневую крышу дома. На крыше дома видны антенны.
Анимация:
Лучи энергии движутся от экрана к экрану, от одной панели к другой, зажигая их разными цветами.
Далее мы сгенерировали русскоязычные диалоги на основе описаний, следуя такому плану:
Эмпирически адаптировали промпт для извлечения контекста и вопросов для генерации русскоязычных инструктивных данных. Вопросы должны относиться к визуальному содержимому видео, выделенному с помощью этого промпта. Пример результата:
{
"Style": ["туристический", "информативный", "спокойный"],
"Content": [
"достопримечательности",
"гид рассказывает о здании",
"архитектурные элементы"
],
"Atmosphere": ["спокойная", "солнечная", "барокко", "интерес"],
"Оther": ["музыка на фоне", "шум людей"],
"Questions": [
{
"Question": "Сколько человек в туристической группе?",
"Answer": "Десять"
},
{
"Question": "Какой архитектурный стиль описывал гид?",
"Answer": "Барокко"
},
{
"Question": "0 чём рассказывает гид?",
"Answer": "Здание"
},
{
"Question": "Какая погода была на экскурсии?",
"Answer": "Солнечно"
}
]
}
После получения словаря с вопросами проверили его на корректность с помощью следующего алгоритма.
Инициализируем корректирующую строку.
clarification_prompts = ['\n Пример плохого ответа, так как']
Проверяем структуру сгенерированного словаря, наличие ключевых полей, наличие вопросов и ответов, и дополняем корректирующую строку соответствующими доработками.
if questions_json.get('Style') is None:
clarification_prompts.append("он не содержит поля 'Style',")
При наличии доработок в корректирующей строке дополняем её изначальный промпт и пробуем перегенерировать результат. Таким образом мы подаём модели пример плохого ответа, чтобы учесть предыдущие ошибки и не повторить их.
Пытаемся исправить до 15 раз или пока не получим корректный словарь с вопросами. Всего на этом этапе отсеялось около 10 % словарей.
На основе результата предыдущего пункта сгенерировали словарь с финальным диалогом. Без воды и новых рассуждений — только привели всё к нужной структуре и немного расширили ответы.
[
{
"role": "user",
"question": "Сколько человек в туристической группе?"
},
{
"role": "assistant",
"answer": "В туристической группе десять человек."
},
{
"role": "user",
"question": "О чём рассказывает гид?"
},
{
"role": "assistant",
"answer": "Гид рассказывает о здании и его архитектурных особенностях."
},
{
"role": "user",
"question": "Какой архитектурный стиль описывал гид?"
},
{
"role": "assistant",
"answer": "Гид описывал стиль барокко."
},
{
"role": "user",
"question": "Какая погода была на экскурсии?"
},
{
"role": "assistant",
"answer": "На экскурсии была солнечная погода."
}
]
Следующим шагом мы немного модифицировали промпт для генерации данных — теперь вместо общих вопросов на понимание происходящего (perception) и ответов на них модель должна была создать диалоги, включающие в себя рассуждения и анализ причинно-следственных связей происходящего на видео (reasoning). Все пункты описанного ранее подхода оставили без изменений, но немного изменили текст запроса. Пример финального диалога:
[
{
"role": "user",
"question": "Почему в группе именно десять человек?"
},
{
"role": "assistant",
"answer": "Это количество позволяет создать комфортные условия для общения и взаимодействия с гидом, при этом не создавая больших толп."
},
{
"role": "user",
"question": "Какие особенности здания выделил гид?"
},
{
"role": "assistant",
"answer": "Гид акцентировал внимание на уникальной симметрии и сложных декоративных элементах в стиле барокко."
},
{
"role": "user",
"question": "Зачем гид упоминал барочный стиль?"
},
{
"role": "assistant",
"answer": "Цель заключалась в том, чтобы подчеркнуть величественность и историческую значимость здания, используя архитектурный контекст."
}
]
Всего сгенерированных диалогов получилось:
Тема | Кол-во вопросов (perception) | Кол-во вопросов (reasoning) |
Фильмы | 18 000 | 23 000 |
Мультфильмы | 5000 | 25 000 |
Анимация | 2000 | 2000 |
Итого | 25 000 | 50 000 |
Этот подход позволил сэкономить время и средства на ручную разметку видеозаписей, а также улучшить метрику на русскоязычном бенчмарке.
Для экспериментов с русскоязычными инструктивными данными мы выбрали базовый конвейер Video-LLaVA и модель LLaMA 3.1 8b Instruct в качестве LLM.
Провели два эксперимента:
базовый эксперимент: на наборе Video-LLaVA (большинство диалогов на английском, встречаются также китайский и корейский) — 890 тыс. пар картинка-текст, 800 тыс. пар видео-текст и 90 тыс. диалогов без визуальной составляющей;
эксперимент с русскоязычными инструктивными данными: набор из предыдущего раздела добавили к базовому набору Video-LLaVA на втором этапе обучения модели (когда обучается и адаптер, и LLM) — ещё 75 тыс. пар видео-текст.
Мы пробовали добавлять русскоязычные пары «видео-текст» на обоих этапах обучения модели (в том числе на первом, когда обучаем только адаптер), но не заметили существенных изменений относительно второго эксперимента. Давайте посмотрим, как это повлияло на результаты на нашем бенчмарке.
На закрытые вопросы с несколькими вариантами ответа обе модели отвечали почти одинаково. Это ожидаемый результат, потому что в таких заданиях модель должна вернуть только букву, соответствующую правильному ответу, а сам навык генерации развёрнутых ответов по видео на русском языке эти задания не проверяет. Немного (на 1,7 п. п.) выросла метрика в категории «Culture Code» за счёт входящих в неё подкатегорий «Фильмы» и «Мультфильмы», что объяснимо: данные из этих категорий присутствовали в русскоязычном обучающем наборе.
Здесь результаты были уже интереснее. За основу взяли подход к оценке ответов на открытые вопросы из Video-ChatGPT и Video-LLaVA, про который рассказывали в предыдущей части: когда соответствие ответа референсу оценивается с помощью GPT-ассистента. Рассчитанная таким образом метрика Accuracy практически по всем темам бенчмарка заметно выросла (то есть улучшилось соответствие содержания ответов референсам).
Кроме того, мы оценили частоту вхождения английских слов в ответы каждой из моделей. В большинстве случаев наличие английских слов в ответе модели означало, что модель ошибочно перешла на английский в произвольный момент ответа. Но иногда вхождение слов, состоящих из латинских букв, было обоснованно: например, если шла речь о зарубежной марке автомобиля или бытовой техники. Поэтому мы учитывали только количество «ложных» вхождений английских слов: если в референсе они отсутствовали, а в ответе модели появлялись.
MC-VideoQA (Accuracy), % | OE-VideoQA (GPT Accuracy), % | Ложные вхождения английских слов, % заданий | ||||
Видео-данные | EN | EN+RU | EN | EN+RU | EN | EN+RU |
Academic | 55,4 | 55,3 | 30,3 | 42,20 | 8,52 | 0,1 |
How-to | 44,0 | 44,0 | 36,5 | 51,55 | 9,2 | 0,2 |
Culture_Code | 44,2 | 45,9 | 31,2 | 47,68 | 6,1 | 0,1 |
Всего | 49,0 | 49,0 | 33,0 | 47,0 | 8,3 | 0,2 |
Как видно из таблицы, в целом по бенчмарку GPT accuracy выросла на 14 п. п., по отдельным категориям — от 12 до 16,5 п. п. Кроме того, модель, которая не обучалась на русскоязычном видео-наборе, в 8,3 % заданий бенчмарка выдавала ответы хотя бы частично на английском там, где референс этого не предполагал, а модель, обученная в том числе на русскоязычных инструктивных данных, делала это лишь в 0,2 % заданий.
Мы описали интересный практический аспект оценки Video-LLM — измерение качества понимания вопросов и генерации ответов на естественном русском языке. Предложенный подход к подбору видео, составлению вопросов и выбору метрик позволил получить бенчмарк, подходящий как для оценки VIdeo-LLM как с точки зрения качества генерации именно на русском языке, так и с точки зрения навыков понимания разнообразных тем, актуальных для нашей страны — специфичных культурных явлений и актуальных практических областей. Кроме этого, мы рассмотрели простой и эффективный способ улучшения качества ответов на русском языке с помощью автоматической генерации русскоязычных инструктивных данных.
Спасибо всем, кто принимал участие в исследованиях, а также в подготовке материалов к публикации: Роману Крайнову @romacckka, Альбине Ахметгареевой @Colindonolwe, Александру Капитанову @hukenovs, Карине Кванчиани @karinakvanchiani.