Late interaction модели, такие как Wholembed v3, серьёзно повышают точность поиска. Они не сжимают весь документ в один вектор, а хранят много мелких кусочков информации. Но это меняет экономику хранения: один документ может породить сотни или тысячи векторов. Каждый нужно где-то держать.
Компания Mixedbread Search использует для этого поисковый движок silo. Он хранит векторы для более чем 2,5 миллиардов документов в объектном хранилище и подгружает их в быстрые слои по мере необходимости. В таком масштабе каждый лишний байт на документ умножается на миллиарды и бьёт по карману. Поэтому инженеры применили асимметричное квантование.
Идея проста: векторы документов хранятся долго, а запрос живёт одну миллисекунду. Значит, векторы запросов (query) держат в высокой точности int8, а векторы документов (document) сжимают до одноминутных бинарных знаков (sign). Это сокращает объём хранения в среднем в 32 раза — с 393 KiB до 12.28 KiB на документ. Качество при этом падает незначительно: NDCG@10 снижается с 90.26 до 89.65, то есть всего на 0.61 пункта. Частично это заслуга самой модели Wholembed v3, которую тренировали с учётом такого сжатия.
Бинарные векторы документов не только экономят место, но и ускоряют вычисления. Скалярное произведение превращается в простую операцию «выбери и сложи»: берёшь сумму значений запроса, отобранных по положительным битам документа, умножаешь на два и вычитаешь общую сумму запроса. Никаких полноценных умножений, только NEON-инструкции на ARM. Это даёт ускорение в 3.82 раза по сравнению с fp32.
Есть и альтернатива: если нужно максимальное качество, можно хранить обе стороны в int8. Это практически lossless (90.27 vs 90.26), режет хранилище в 4 раза и ускоряет в 3.2 раза. А вот если обнулить и запрос тоже (binary x binary), качество рушится — потеря 7.2 пункта, притом что документам всё те же 12.28 KiB. Всё дело в том, что запрос теряет слишком много сигнала.
Для крупномасштабных систем такое асимметричное квантование — золотая середина. Оно позволяет получать качество multi-vector представлений, не разоряясь на хранении гигабайтов fp32.