🚀 Попробуйте Zilliz Cloud, полностью управляемый Milvus, бесплатно — ощутите 10-кратное увеличение производительности! Попробовать сейчас>

milvus-logo
LFAI
  • Home
  • Blog
  • Вкрапления "Матрешки": Детализация в нескольких масштабах

Вкрапления "Матрешки": Детализация в нескольких масштабах

  • Engineering
October 30, 2024
Stefan Webb, David Wang

Что такое вкрапления "Матрешки"?

При создании эффективных систем векторного поиска одной из ключевых задач является управление затратами на хранение данных при сохранении приемлемой задержки и запоминания. Современные модели встраивания выдают векторы с сотнями или тысячами измерений, что создает значительные затраты на хранение и вычисления для исходного вектора и индекса.

Традиционно требования к хранению снижаются путем применения метода квантования или уменьшения размерности непосредственно перед построением индекса. Например, мы можем сэкономить место, снизив точность с помощью Product Quantization (PQ) или количество измерений с помощью Principal Component Analysis (PCA). Эти методы анализируют весь набор векторов, чтобы найти более компактный, сохраняющий семантические связи между векторами.

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

Появились вкрапления "Матрешки". Названные в честь русской матрешки (см. иллюстрацию), эти умные конструкции встраивают несколько масштабов представления в один вектор. В отличие от традиционных методов постобработки, вкрапления "Матрешки" учатся этой многомасштабной структуре в процессе начального обучения. Результат поразителен: не только полное вложение отражает семантику входных данных, но и каждый вложенный префикс подмножества (первая половина, первая четверть и т. д.) обеспечивает целостное, хотя и менее детальное представление.

Figure: Visualization of Matryoshka embeddings with multiple layers of detail Рисунок: Визуализация вкраплений "Матрешки" с несколькими слоями детализации

Рисунок: Визуализация вкраплений "Матрешки" с несколькими слоями детализации

Этот подход резко контрастирует с обычными вкраплениями, где использование произвольных подмножеств размерности вектора обычно разрушает семантический смысл. С вкраплениями Matryoshka вы можете выбрать ту степень детализации, которая наилучшим образом сбалансирует точность и вычислительные затраты в вашей конкретной задаче.

Нужен быстрый приблизительный поиск? Используйте самую маленькую "матрешку". Нужна максимальная точность? Используйте полное вложение. Такая гибкость делает их особенно ценными для систем, адаптирующихся к различным требованиям производительности или ограничениям ресурсов.

Выводы

Ценным применением вкраплений "Матрешки" является ускорение поиска по сходству без ущерба для запоминания. Используя меньшие подмножества вкраплений запросов и баз данных - например, первые 1/32 их размерности - мы можем построить индекс по этому уменьшенному пространству, сохраняющий большую часть информации о сходстве. Исходные результаты из этого уменьшенного пространства вкраплений можно использовать напрямую. Тем не менее, существует техника, позволяющая увеличить запоминание и учесть любое незначительное уменьшение размерности, что делает этот подход эффективным и действенным для задач поиска по сходству.

Figure: How the funnel search works with Matryoshka embeddings Рисунок: Как работает воронкообразный поиск с вкраплениями "Матрешки

Рисунок: Как работает воронкообразный поиск с вкраплениями Матрешки

Чтобы эффективно ускорить поиск сходства, сохранив при этом точность, мы можем использовать подход "воронкообразного поиска". Сначала мы выполняем первоначальный поиск сходства, используя только первые 1/32 измерения вкраплений, создавая широкий пул элементов-кандидатов. Затем мы ранжируем эти кандидаты на основе их сходства с запросом, используя первые 1/16 измерений, обрезая часть списка. Этот процесс продолжается итеративно, ранжируя и обрезая все более крупные подмножества размерностей встраивания - 1/8, 1/4 и так далее. Важно отметить, что мы выполняем только один первоначальный поиск сходства в этом более низкоразмерном пространстве, и за один проход модели встраивания вычисляется встраивание запроса. Этот процесс воронки сужает круг кандидатов на каждом шаге и является более быстрым и эффективным, чем прямой поиск в полноразмерном пространстве. Извлечение множества совпадений из 1/32-мерного пространства и их уточнение с помощью поиска в воронке позволяет значительно ускорить поиск по сходству, сохраняя при этом высокую запоминаемость.

Обучение

Давайте рассмотрим некоторые технические детали. Метод очень прост в применении. Рассмотрим контекст тонкой настройки BERT-модели для встраивания предложений. Чтобы преобразовать BERT-модель, которая была предварительно обучена на потерях маскированных слов, в модель встраивания предложений, мы формируем встраивание предложений как среднее значение последнего слоя, то есть среднее значение контекстуализированных вкраплений для каждого слова.

Одним из вариантов цели обучения является косинусная потеря предложения (CoSENT), L(u,v;s)L(u, v; s) L v s . На вход подается пара вкраплений предложений, u,vu,v u v, и их желаемый балл сходства, ss s (формулу см. по ссылке выше). Теперь, чтобы выучить вкрапления "Матрешки", мы вносим небольшую модификацию в цель обучения:

LM(u,v)=w0L(u1:d,v1:d)+w1L(u1:d/2,v1:d/2)+w2L(u1:d/4,v1:d/4)+⋯L_M(u, v) = w_0L(u_{1:d}, v_{1:d}) + w_1L(u_{1:d/2}, v_{1:d/2}) + w_2L(u_{1:d/4}, v_{1:d/4}) + \cdots L v = w L1, v 1) + w L1, v 1) + w L1, v

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

w0=w1=⋯=1w_0=w_1=\cdots=1 w

Проще говоря, потери "Матрешки" - это взвешенная сумма исходных потерь по рекурсивным подмножествам входных данных.

Один из ключевых выводов из приведенного выше уравнения заключается в том, что потери Матрешки позволяют эффективно обучать представления в нескольких масштабах за счет распределения весов между моделями встраивания (одна и та же модель используется для кодирования, например, u1:du_{1:d} u и u1:d/2u_{1:d/2} u ) и совместного использования размерностей на разных масштабах(u1:d/2u_{1:d/2} u является подмножеством uu u).

Матрешечные вкрапления и Milvus

Milvus без проблем поддерживает любую модель вкраплений Матрешки, которая может быть загружена через стандартные библиотеки, такие как pymilvus.model, предложения-трансформеры или другие подобные инструменты. С точки зрения системы, нет никакой функциональной разницы между обычной моделью встраивания и моделью, специально обученной генерировать вкрапления "Матрешки".

К популярным моделям встраивания "Матрешки" относятся:

Полное руководство по использованию вкраплений Matryoshka в Milvus можно найти в блокноте "Поиск по воронке с вкраплениями Matryoshka".

Резюме

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

Однако в настоящее время ограничением является нехватка вкраплений "Матрешки" с открытым исходным кодом, и лишь немногие из них доступны на хабе Hugging Face. Кроме того, эти модели часто не имеют явного обозначения "Матрешка", что затрудняет их поиск. Надеемся, что с ростом интереса к ним вскоре появится более широкая доступность и более четкая маркировка.

Готовы оптимизировать свои поисковые возможности? Начните работу с вставками Milvus + Matryoshka уже сегодня!

Ресурсы

Like the article? Spread the word

Продолжить чтение