Обновить

Сжатие декодерных эмбеддеров: как ужать 8B до продакшена без потери recall

Уровень сложностиСредний
Время на прочтение13 мин
Охват и читатели7.5K
Всего голосов 4: ↑4 и ↓0+6
Комментарии1

Комментарии 1

binary в одиночку - катастрофа. 32x сжатия выглядит соблазнительно, но recall рухнул до 0.67. Треть релевантных результатов просто теряется. Если вы включили binary quantization и не сделали ничего больше - вы сломали поиск. И вот тут начинается самое интересное.

Есть такая штука как анизотропия эмбеддингов (векторы трансформерных моделей не разлетаются по пространству равномерно, а кучкуются в узком телесном угле). Лечится она по-разному в зависимости от типа квантования: центрированием для sign-based и поворотом для scalar.

Для вашего int8 q_scalar считает lo, hi как min/max по каждой размерности из реальных данных корпуса, а не берёт фиксированный диапазон. А min-max квантование инвариантно к сдвигу: если вычесть из всех векторов средний (центроид), hi - lo по каждой оси не изменится (и шаг квантования тоже), и итог останется тем же самыми.

Бинарное же квантование берёт не диапазон, а знак координаты sign(x). И вот тут смещённое от нуля распределение подкинет проблем. Если по какой-то оси 90% значений корпуса положительны из-за анизотропии, то знак почти всегда будет +1 и различие между разными объектами по этой оси практически стирается. Именно поэтому продакшен-гайды по binary quantization (в частности, у Qdrant) требуют центрированного распределения значений и рекомендуют подходящие модели/препроцессинг. Если центра нет, знак почти не несёт информации. Можно проверить: если посчитать mean по корпусу и вычесть его перед sign, recall у binary-варианта, подозреваю, заметно подрастёт с нынешних 0.67. И это отдельный, куда более дешёвый вариант, чем full rescoring.

Для int4 (где просадка тоже заметна) центрирование не поможет по той же причине, что и для int8, но может помочь PCA/whitening, то есть поворот базиса, а не сдвиг. Анизотропия означает сильную корреляцию между измерениями. Если по простому, то часть объёма гиперпрямоугольника [lo, hi]^d просто пустует из-за этой корреляции. Декоррелирующий поворот перераспределяет дисперсию по осям более равномерно, и уже после этого поэлементное квантование начинает работать эффективнее. Это чуть дороже центрирования, но, в отличие от него, реально меняет геометрию задачи, а не просто сдвигает её.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации