June 20

Хакатон ЛЦТ 2024: сервис SeedVideo. Кейс (15) Сервис текстового поиска по медиаконтенту

Суть проекта:

Платформа «SeedVideo» демонстрирует работу поисковой системы видео, направленной на извлечение данных из видео с целью индексации и поиска по этим данным.

Задачи платформы:

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

Описание алгоритма получения результата:

Платформа позволяет пользователям загружать видео для индексации, а так же осуществлять поиск по ранее проиндексированным данным.

Описание архитектуры:

В нашем решении использована гибридная архитектура, позволяющая гибко извлекать необходимые данные из на нескольких уровнях: из произносимой речи на видео, из фоновой звуковой дорожки, из происходящего на видео, из пользовательского описания видео. Совокупность этих данных у нас векторизуется, и с помощью поиска по векторной базе мы предоставляем ТОП самых подходящих под описание запроса видео. Более того наша архитектура позволяет конфигурировать веса важности вышеописанных данных и использовать LLM с помощью RAG (контекстные запросы) чтобы находить видео еще на более глубоком уровне.

Мы извлекаем из видео 4 вида модальностей: субтитры, звуковую дорожку, описание содержимого видео, пользовательское описание. Описание содержимого мы извлекаем из n уникальных ключевых фреймов (кадров видео).

Для улучшения UX мы поддерживаем автокомплит и автоисправление поисковых запросов

Описание основных алгоритмов и моделей машинного обучения:

l  Алгоритмы хэширования для определения уникальности фреймов

l  Мультимодальная языковая модель

l  Алгоритмы автокомплита и исправленя ошибок по близости расстояния.

l  Алгоритмы векторизации

l  RAG.

Как мы обрабатываем видео:

В нашем решении использована гибридная архитектура, позволяющая гибко настраивать и извлекать необходимые данные из видео на нескольких уровнях: из произносимой речи на видео, из фоновой звуковой дорожки, из происходящего на видео, из пользовательского описания видео. Совокупность этих данных мы векторизуем, и с помощью поиска по векторной базе мы предоставляем ТОП самых подходящих под описание запроса видео. Более того наша архитектура позволяет конфигурировать веса важности вышеописанных данных и использовать LLM с помощью RAG (контекстные запросы) чтобы находить видео еще на более глубоком уровне.

Преимущества нашего решения

Мы используем извлечение уникальных кадров, которые описываем с помощью мультимодальной языковой модели, чтобы понять что происходит на видео, даже если в нем нет описания, тегов и не произносится речь и нет фоновых звуков. Гибкость системы позволяет управлять количеством уникальных фреймов и порогом уникальности, размером окна ответа LLM, использовать разные модальности. Векторная база позволяет оптимизировать хранение проиндексированных данных и ускорять по ним поиск.

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

Описание инструментов:

l  На беке Python, FastAPI, Celery, ChromaDB for servers

l  На фронте ReactJS, Consta.design

Скорость работы:

l  Скорость индексации ~5 секунд на видео до 1 минуты в одном потоке

l  Скорость поиска~470 мс на топ 10 видео

Сложности при обработке данных:

· Видео файлы разной длины, поиск наилучего числа фреймов? извлечение уникальных фреймов определяется с помощью хэширования и вычисления дистанции в различиях

· В видео загруженных пользователем может вообще не быть описания и тегов

· Языковые модели плохо работают с русским языком

· Речь в видео не всегда можно извлечь качественно

· Индексация требует ГПУ вычислительных ресурсов

Интерфейс.

Основная часть интерфейса - это поисковая строка. Поисковая строка являестя интеллектуальной, позволяет предложить варианты на начально введенный запрос пользователя:

А таr же позволяют пользователю нивелировать не верно введённый запрос, предугадывая и исправляя его:

Еще одним приимуществом нашего поисковика являеся система весов, котораяпозволяет гибко настраивать качество поисковой выдачи в зависимости от настройки весов на различные модальности:

По видео - это основная фишка сервиса, в данной модальности хранятся описанные (визуальной языковой моделью) сцены на видео, другими словами интерпретация происходящего на видео (с помощью комбинации описаний нескольких уникальных фреймов).

По аудио - наша система умеет разделять* звуковую дорожку и извлекать отдельно речь и фоновую музыку\звуки. Благодаря этому мы можем качественно транскрибировать речь и перенести её в модальность.

* - благодаря этому в будущем можно векторизовать звуки и искать видео по загруженным трекам\звукам.

По тексту - по пользовательскому описанию видео.

По тегам - по введённым пользователем тегам к видео.

Система позволяет интерпретировать результаты своего поиска и обосновывать свой выбор:

Каждому видео присваивается вероятность уверенности поисковика в принадлежности данного видео к поисковому запросу.

К тому же модель показывает на основе какой из модальностей был сделан вывод о принадлежности видео.

Мы пошли дальше и для большей интерпретируемости и продемонстрировали участки данных из модальностей, по которым система делает вывод:

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

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

Пример выдачи:

В данном примере мы указали вес 80 для содержимого в видео и модель будет ориентироваться на содержимое в большей степени чем на другие модальности.

Возможности сервиса:

· Поиск по проиндексированной базе пользователя

· Индексация новых видео происходит практически реалтайм и данные попадают в базу

· Поиск по содержимому видео

· Поиск по произнесённой речи в виде

· Поиск по описанию видео

· Поиск по тегам

· Интерпретация результатов выдачи

· Система скоринга при поисковой выдаче

· Система весов для тонкой настройки поиска\содание гибридной системы поика

· Быстрый отклик при поисковом запросе

· Исправление ошибок при наборе поискового запроса

· Система автодополнения запроса популярными запросами при наборе поискового запроса

Архитектура сервиса:

Алгоритм работы:

API сервис:

Пример выдачи АПИ:

https://api.seedvideo.ru/video/7470?query=%D1%85%D0%B0%D0%B1%D0%B0%D1%80%D0%BE%D0%B2%D1%81%D0%BA&video=90&audio=80&text=20&hashtag=30

Для работы с API сервисом вся документация по работе с сервисом указана в swagger по адресу: https://api.seedvideo.ru/docs

https://api.seedvideo.ru/openapi.json

Установка и настройка

Для установки серверной части вам необходимо использовать Docker версии не ниже 20. Инструкцию по установке можете найти здесь (https://docs.docker.com/engine/install/)

Далее вам следует заполнить файл переменных окружений. Например, следующим образом:

.env

PROJECT_NAME=name
PGSQL_URL=postgresql://root:password@pgsql/name
PGSQL_USERNAME=root
PGSQL_PASSWORD=password
PGSQL_DATABASE=name
PGSQL_DATA=/data/
RABBITMQ_USERNAME=root
RABBITMQ_PASSWORD=password
CELERY_BROKER_URL=amqp://root:password@rabbitmq:5672//
CELERY_RESULT_BACKEND=redis://redis:6379/0
KEYCLOAK_ADMIN=root
KEYCLOAK_ADMIN_PASSWORD=password
API_BASE_URL=http://localhost:9000/
API_MEDIA_URL=http://localhost/files/
API_MEDIA_PATH=media
REACT_APP_API_URL=http://localhost:9000/
И клонируем репозиторий:
· git clone https://github.com/ShakurovR/vsm
· cd vsm
· docker compose –f docker-compose.local.yml build —no-cache —pull
· docker compose –f docker-compose.local.yml up –d

Также для разворачивания только API сервиса можно использовать файл docker-compose.back.yml

Полезные ссылки

· Веб сервис: https://seedvideo.ru

· API сервис: http://api.seedvideo.ru

· Документация API сервиса: https://api.seedvideo.ru/docs

· Github: https://github.com/ShakurovR/vsm/tree/main

Стек используемых технологий и библиотек:

· Python/Pandas/regex

· FastAPI

· Sbercloud IaaS/PaaS Infrastructure

· Docker

· React js \ reduct

· ChromaDB

· Celery

· Nginx

· Postgresql

· Llama.cpp (server)

ЛИДЕРЫ ЦИФРОВОЙ ТРАНСФОРМАЦИИ 2024

Команда Простите, у нас вдохновение \ 2024.