Комментарии 2
КМК, стоило бы подробнее объяснить про квантизацию. Что-то вроде:
Вычислять произведение-размерного запроса на вс
векторов в базе слишком дорого, O(nd). Общепринятый подход к проблеме - квантизация: можно разбить векторы на
групп. Для каждой группы мы храним "центр"
, выбранный так чтобы произведение векторов в группе с "центром" отличалось не слишком сильно (более формально - реализовано минимизацие функции потерь, эта работа как раз предлагает улучшить эту функцию). Теперь при запросе нам нужно вычислить произведение запроса с
центрами (O(kd)), найти наиболее подходящую группу, найти векторы в группе по индексу, и посчитать произведение только с ними (а не со всей базой). При правильно подобранных группах суммарная сложность будеть меньше чем O(nd).
И дальше по тексту - наивное назначене векторов в группу с близжайшим центроидом может быть неоптимально, поэтому ...
Сколько векторов эту штука потянет?
И чем она лучше annoy/faiss/hnsw или других индексов из например проекта Milvus?
Представляем ScaNN: эффективный поиск схожих векторов