Главная / Статьи / Сравнение векторной квантизации: инт8 против бинарной — точность восстановления и объем хранения

Сравнение векторной квантизации: инт8 против бинарной — точность восстановления и объем хранения

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

940 слов

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

Вот суть проблемы. Квантизация Int8 обычно сохраняет 95% или более точности поиска, одновременно сокращая объем хранения в 4 раза. Бинарная квантизация позволяет добиться впечатляющего сокращения объема в 32 раза, но если модель эмбеддингов не обучалась для этого формата, точность поиска может снизиться на треть или больше. Эти два метода не являются точками на одной шкале — их поведение настолько различно, что неправильный выбор может незаметно испортить качество поиска.

Квантизация заключается в хранении каждого измерения с меньшей точностью. Можно перейти от 32-битных чисел с плавающей точкой к 8-битным целым числам (скэлярная квантизация) или даже к одному биту на измерение (бинарная квантизация). Экономия реальна: использование ОЗУ снижается вдвое — до 24 раз при бинарной квантизации и в 3,75 раза при скэлярной; эффект усиливается, когда корпус данных содержит миллионы векторов, что становится всё более распространённым для памяти агентов и систем RAG в предприятиях в 2026 году.

Как выглядят цифры

Тестовый корпус был синтетическим: 2000 векторов с 768 измерениями, объединённых в 20 кластеров для имитации реальной семантической структуры. Точность поиска измерялась по показателю recall@10 по сравнению с базовым вариантом без сжатия в формате float32 после применения каждого из двух квантизаторов. Во-первых, int8, который масштабируется в соответствии с наибольшим абсолютным значением и округляет его в диапазон int8:

def quantize_int8(vecs):
    scale = np.max(np.abs(vecs))
    q = np.round(vecs / scale * 127).astype(np.int8)
    return q.astype(np.float32) / 127 * scale

А также бинарный квантизатор, который сохраняет только знак каждого значения:

def quantize_binary(vecs):
    return (vecs > 0).astype(np.float32) * 2 - 1

Результаты оказались следующими:

Format       | Recall@10 vs float32   | Storage (MB)   | Reduction
----------------------------------------------------------------------
float32      | 1.000 (baseline)       |          6.144 | 1x
int8         |                  0.961 |          1.536 | 4.0x
binary       |                  0.326 |          0.192 | 32.0x

Формат Int8 сохранял 96% точности поиска даже при сокращении объема хранения в 4 раза, что является отличным показателем для большинства производственных систем. Формат бинарный же в рамках этого универсального симулятора вкладок, не разработанного с учетом квантизации, показал всего 32,6% точности восстановления данных, несмотря на импрессивное сжатие в 32 раза. Это не ошибка округления — пропадает примерно два из каждых трех релевантных результатов, которые мог бы вернуть формат с плавающей точкой.

Почему бинарный формат создает столько проблем

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

Однако это не закон природы — всё зависит от модели. Независимые тестирования показали, что некоторые архитектуры эмбеддингов практически не чувствуют влияния двоичной квантизации и сохраняют около 98% качества, характерного для формата float, тогда как другие семейства теряют больше качества, оставаясь на уровне 87–92%, в зависимости от размера модели. Разница между ними заключается в том, была ли модель обучена так, чтобы выдерживать квантизацию.

Какой вариант выбрать

  • Установите int8 в качестве стандартного формата. Вы теряете небольшую долю точности, причем это легко предсказуемо, а сэкономленное пространство всё равно достаточно велико, чтобы иметь значение для крупных индексов.
  • Используйте двоичный формат только с моделью, предназначенной для него. Провайдеры теперь поставляют варианты эмбеддингов с учётом квантизации, поскольку стандартные эмбеддинги сильно ухудшают качество при двоичной компрессии. Перед развертыванием убедитесь, что ваша конкретная модель протестирована с учётом этого фактора, и не предполагайте, что эта техника безопасна во всех случаях.
  • Рассмотрите сокращение числа измерений в стиле матрёшки как промежуточный вариант. Некоторые более новые модели можно сократить до меньшего количества измерений (например, с 2 048 до 256), при этом сохраняется большая часть качества поиска, что позволяет найти баланс между скромной экономией памяти при использовании формата int8 и более высокой эффективностью, но сопряжённой с рисками, у двоичных форматов.
  • Сначала измерьте показатель воспроизводимости на собственном корпусе данных. Степень сгруппированности реальных эмбеддингов и количество почти одинаковых результатов, которые могут быть приняты вашими запросами, повлияют на эти показатели в ту или иную сторону по сравнению с данными любого универсального теста, включая этот.
  • Часто задаваемые вопросы

    Насколько снижается точность при использовании int8? Обычно очень незначительно — потеря воспроизводимости обычно составляет менее 5% по сравнению с полным форматом float32, в обмен на примерно в 4 раза меньшее потребление памяти.

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

    Сколько места на хранении сэкономляется? Примерно в 4 раза при использовании формата int8. При двоичной квантовке сэкономление может достигать 24–32 раз, но при этом существенно ухудшается и становится менее предсказуемой точность результатов.

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

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