2.5Kпросмотров
30 сентября 2025 г.
📷 ФотоScore: 2.7K
✅ Как искать иголку в стоге миллиардов — и находить за миллисекунды Вы когда-нибудь задумывались, как векторные базы данных быстро находят похожие объекты в гигантских коллекциях? Есть такой алгоритм — Hierarchical Navigable Small World, который сегодня используют большинство векторных хранилищ. Он уже работает эффективно и останется релевантным по мере роста объёмов данных. HNSW строит многоуровневую сеть. На верхних уровнях остаются только дальние связи — это как авиамаршруты между крупными городами. Внизу находятся все векторы; они связаны плотно, как улицы и кварталы. Каждый слой вниз содержит больше объектов и короче связи. Такая иерархия позволяет сначала быстро приблизиться к нужной области, а затем выполнить детальный локальный поиск — без перебора всего набора. Как это выглядит на практике: сначала «подлетаем» по верхнему уровню, затем уточняем район на среднем, и в конце спускаемся в нижний слой для точного поиска. Сначала алгоритм отбрасывает явно нерелевантное, а потом проверяет ближайших соседей — поэтому он остаётся быстрым даже при миллиардах векторов. При настройке обратите внимание на три параметра. ➡️maxConnections управляет плотностью связей: больше связей повышает точность, но увеличивает затраты на память и индексацию. ➡️ ef и efConstruction задают размер кандидатного списка при поиске и при построении индекса: их увеличение обычно повышает точность, но замедляет работу. ➡️ Наконец, выбор метрики (косинус, евклид и т. п.) определяет, какие объекты считать похожими в вашей задаче. ❗️Меня кстати пару раз спрашивали на собесах как работает HNSW, поэтому решил чуть освежить память, да и часто в работе применяется. Надеюсь получилось классно вам объяснить, накидайте реакций если хотите побольше таких постов #RECSYS MADE IN @researchoshnaya