Лабораторная 2. Эмбеддинги
Цель лабораторной работы: познакомиться с эмбеддингами.
Ключевая идея: эмбеддингами можно сравнивать похожесть текстов по смыслу.
Можно делать в группах до 5 человек при соответствующем качестве.
Творческий подход приветствуется.
Результат можно будет переиспользовать в следующих лабораторных
Результат предлагается оформить в виде микросервиса или CLI приложения, публикация в виде гитхаб-репозитория приветствуется.
Стек: любой.
Предлагаемые технологии:
-
Эмбеддинг модели: поднять локально ollama и выбрать модели оттуда. Взаимодействовать через REST API. Можно поднять в докере.
-
Векторная база данных (если нужна): postgres+pgvector. Клиенты есть почти под любой язык. В документации клиентов есть примеры минимальных решений для некоторых вариантов.
Общие бонусные задачи:
-
Есть UI в виде минимального фронтенда.
-
Есть docker-compose и проект одной командой запустится у преподавателя (пусть и без данных).
-
Проведено сравнение эффективности разных эмбеддинг моделей.
-
Проведено сравнение разных функций расстояния.
Оценка: 5-20 баллов
Вариант 1. Ведущий для викторин
Пусть есть список вопросов и ответов (составьте сами, найдите в интернете (для ЧГК или своей игры) или сгенерируйте LLM). С помощью модели с эмбеддингом сравнивайте близость ответа участника с правильным ответом.
Минимальное решение: на вход приходит правильный ответ и ответ участника, утилита возвращает “совпадает”/”не совпадает”.
Полное решение:
-
Администратор может загружать викторины, хранятся в базе данных, эмбединги посчитаны заранее.
-
Пользователь может проходить викторины, получая вопросы и отправляя только свои ответы.
Дополнительные задания:
-
Сравните качество с моделью LLM, попросив её сначала порассуждать, а потом выдать только true или false.
Вариант 2. Поиск по базе знаний
Возьмите набор статей (вики по фандому, документация к библиотеке, код вашего большого петпроекта) и сделайте поиск по нему на основе эмбеддингов с использованием векторной базы данных.
Минимальное решение: по текстовому запросу выдаётся n ссылок на похожие документы.
Полное решение:
-
Проработаны механизмы разбиения текста: заголовки, отдельные абзацы.
Дополнительное задание:
-
Сравните разные индексы для векторных полей.
-
В качестве доменной области выберите PascalABC.Net https://pascalabc.net/downloads/pabcnethelp/index.htm
Будущее развитие: использование в составе RAG как справочник для LLM.
Вариант 3. Автоматическая расстановка тегов
Возьмите размеченный датасет текстов с тегами, засуньте в векторную базу данных, и на основе множества тегов для k похожих текстов предложите подходящие теги. Например, анекдоты с тегами по тематикам (плюс анекдотов - они короткие и много сайтов с тегированными анекдотами).
Минимальное решение: на вход один анекдот, на выходе теги.
Полное решение: датасет разбит на тестовую и “обучающую” выборки, проведена оценка качества расстановки тегов.
Дополнительное задание:
-
Используются объёмные тексты, подобрана стратегия их разбиения на чанки.
-
Сравните разные индексы для векторных полей.
-
Сравните разные функции расстояния.
Вариант 4. Рекомендательная система (content-based)
На основе описаний фильмов/игр/товаров, загруженных в базу данных, предложите похожие.
Минимальное решение: на вход описание нового фильма, на выходе предлагаются похожие.
Полное решение: проведён анализ качества рекомендаций в зависимости от используемых функций расстояния и превращаемых в эмбеддинг данных (помимо описания можно включать другие данные).