Что такое Faiss и как он устроен
Что проверяют
Понимаете ли вы, как устроен приближённый поиск ближайших соседей и чем оплачивается его скорость. От инженера ждут умения выбрать индекс под объём данных, память и требуемую полноту выдачи, а не назвать библиотеку.
Как отвечать
Faiss это библиотека индексов над плотными векторами: она ищет ближайшие по евклидову расстоянию или скалярному произведению, работает на процессоре и на видеокарте. Это не база данных: ни хранения атрибутов, ни фильтров по ним в общем виде, ни репликации тут нет, идентификаторы и метаданные держит ваш код.
Дальше по типам индексов. Плоский индекс это честный перебор: точный результат и линейное время. Индекс с инвертированными списками делит пространство кластерами и на запросе просматривает лишь несколько ближайших ячеек, число которых регулируется параметром поиска. Квантование произведений сжимает вектор до короткого кода и позволяет держать в памяти на порядок больше, теряя в точности. Графовый индекс строит многоуровневый граф соседей и обходит его жадно, а ширина обхода задаёт баланс скорости и полноты. Комбинации этих приёмов и дают миллиарды векторов на разумном железе.
Два практических пункта: кластеризующим и квантующим индексам нужно обучение на репрезентативной выборке, а косинусная близость получается нормализацией векторов и поиском по скалярному произведению.
Где спотыкаются
Не закладываются на приближённость. Выдачу сравнивают с перебором, видят расхождение и считают это багом, вместо того чтобы измерить полноту на контрольной выборке запросов и подобрать параметры поиска.
Обучают индекс на случайной горстке векторов или на данных другого распределения. Кластеры получаются перекошенными, часть запросов уходит в переполненные ячейки, и качество падает именно там, где важнее всего.
Ждут от библиотеки того, чего в ней нет: фильтрации по атрибутам и быстрого обновления. Фильтр после поиска на жёстком условии выкашивает всю выдачу, а поток изменений требует либо отдельных индексов на сегменты данных, либо полноценного векторного хранилища.