← Ко всем open source проектам

Faiss

facebookresearch/faiss

Faiss — библиотека Meta для быстрого поиска похожих плотных векторов и кластеризации.

Форки 4,438
Автор facebookresearch
Язык C++
Лицензия MIT
Обновлено 2026-06-27

Что это такое

Faiss — библиотека для поиска похожих плотных векторов и кластеризации. Она разработана преимущественно в исследовательской группе Meta FAIR и написана на C++ с полноценными обертками для Python и NumPy.

Проект нужен там, где объект представлен числовым вектором: текст, изображение, аудио, пользовательский профиль или товар. Поиск становится задачей: найти в большом наборе векторы, ближайшие к запросу.

Faiss поддерживает разные методы поиска, включая варианты для очень больших наборов, которые не помещаются целиком в оперативную память. Часть полезных алгоритмов реализована для GPU.

Что внутри

Базовая модель Faiss проста: каждому вектору соответствует целочисленный идентификатор, а близость измеряется L2-расстоянием или скалярным произведением. Косинусная близость тоже поддерживается через нормализованные векторы.

Внутри есть точные индексы, приближенные индексы, квантование, сжатые представления, средства оценки и настройки параметров. Это не только функция `search`, а целый набор инженерных компромиссов между скоростью, памятью и точностью.

Python-слой делает библиотеку удобной для экспериментов, а C++-ядро важно для производительности. Поэтому Faiss часто встречается и в исследовательских прототипах, и в производительных поисковых системах.

Как используют

Типичный сценарий начинается с эмбеддингов: модель превращает документы или объекты в векторы, затем Faiss строит индекс и быстро возвращает ближайшие элементы для нового запроса.

В небольшом проекте можно использовать точный индекс и получить понятное поведение. В большом наборе чаще выбирают приближенный поиск, чтобы сэкономить память и время ответа.

Ограничение Faiss в том, что он не решает весь поиск целиком. Нужно отдельно получать качественные векторы, хранить исходные документы, обновлять индекс и проверять качество ответов на реальных запросах.

Минимальный поиск

Пример показывает базовую механику: создать индекс по размерности, добавить векторы и найти ближайшие элементы для запроса.

Сильные стороны и ограничения

Сильная сторона Faiss — зрелый набор индексов и высокая скорость. Библиотека дает инженеру контроль над точностью, памятью и временем ответа.

Слабое место — сложность настройки. Неправильно выбранный индекс может быть либо слишком медленным, либо слишком неточным, поэтому нужны измерения на своих данных.

Faiss подойдет для семантического поиска, рекомендаций, поиска дублей, кластеризации и мультимедийных коллекций. Если данных мало, иногда достаточно простого перебора или возможностей базы данных.

Пример

Поиск ближайших векторов

Пример использует точный L2-индекс: он прост для проверки идеи, хотя для больших наборов часто выбирают другие индексы.

Язык: Python
import faiss
import numpy as np

vectors = np.random.random((1000, 128)).astype("float32")
queries = np.random.random((3, 128)).astype("float32")

index = faiss.IndexFlatL2(128)
index.add(vectors)

distances, ids = index.search(queries, 5)
print(ids)