Задача

Создать предобученную иерархическую систему классов/тегов для Desktop-приложения «Персональный каталогизатор фотографий». Система ориентирована на реальные семейные архивы и использует векторные представления (embeddings), полученные методом OpenCLIP (модификация LAION). Цель: ускорить поиск нужного фото среди тысяч файлов без лишних кликов.

Бизнес-требования

  • Полнота покрытия: ≥99% фото должно получить хотя бы один тег
  • Вариативность комбинаций: не более 3% изображений с одинаковым набором тегов
  • Субъективная однозначность: в ≥97% случаев тег однозначен для сортировщика
  • Точность включения (precision) и обнаружения (recall): не ниже 90% для каждого класса
  • Фильтр контента: обязательно выделение «мусорных» типов: мемы, скриншоты, поздравления WhatsApp, поврежденные изображения и пр. (отдельная категория)

Ключевые метрики

  • Масштабирование: требуется >200 классов/тегов, часть из них – взаимно исключающие (exclusiveOR)
  • Подбор обучающего набора: для каждого класса не менее нескольких сотен релевантных фото (семантический bootstrap по open_image и дополнительной ручной разметке)
  • Решающее правило: на основе распределения эмбеддингов обучающей выборки (например, ядерная оценки или порог по границе класса)

Пример использования

Поиск «женщина в красном платье у моря» получает комбинацию тегов «портрет женщины» + «море» + «яркая одежда». После этого из 100 тыс. изображений алгоритм предлагает ≤30 вариантов, отсеивая лишние глазом за секунды.

Состав исполнительной задачи (выходные артефакты)

  • Словарь классов/тегов в иерархической графе, включая обучающие примеры
  • Алгоритм классификации (ядро + функции порогов) на Python/sklearn и файл выгрузки порогов
  • Тестовая мини-вселенная: ≥100 тыс. размеченных фото (тренировочный/верификационный срез 80/20) не уникальных с номенклатурой 500 классов
  • Скрипт метрического оценивания precision/recall на Python и HTML выхлоп отчета auto_test_tagger.py

Особые условия: Все наименования и эмбеддинги должны воспроизводиться средствами publLICClip (запрет на проприетарные extensions). Исполучи библиотеки: torch⩽2.2, sklearn, numpy, open_clip(0.3dev), pathlib. Вся документация→ насторже хранится local-версиями.