FAISS adalah perpustakaan untuk pencarian kesamaan yang efisien dan pengelompokan vektor padat. Ini berisi algoritma yang mencari di set vektor dengan ukuran apa pun, hingga yang mungkin tidak muat di RAM. Ini juga berisi kode pendukung untuk evaluasi dan penyetelan parameter. FAISS ditulis dalam C ++ dengan pembungkus lengkap untuk Python/Numpy. Beberapa algoritma yang paling berguna diimplementasikan pada GPU. Ini dikembangkan terutama di Meta Fundamental AI Research Group.
Lihat Changelog.md untuk informasi terperinci tentang fitur terbaru.
FAISS berisi beberapa metode untuk pencarian kesamaan. Diasumsikan bahwa instance direpresentasikan sebagai vektor dan diidentifikasi oleh bilangan bulat, dan bahwa vektor dapat dibandingkan dengan jarak L2 (Euclidean) atau produk titik. Vektor yang mirip dengan vektor kueri adalah yang memiliki jarak L2 terendah atau produk titik tertinggi dengan vektor kueri. Ini juga mendukung kesamaan kosinus, karena ini adalah produk titik pada vektor yang dinormalisasi.
Beberapa metode, seperti yang didasarkan pada vektor biner dan kode kuantisasi kompak, semata -mata menggunakan representasi vektor terkompresi dan tidak perlu menyimpan vektor asli. Ini umumnya datang dengan biaya pencarian yang kurang tepat tetapi metode ini dapat skala hingga miliaran vektor dalam memori utama pada satu server. Metode lain, seperti HNSW dan NSG menambahkan struktur pengindeksan di atas vektor mentah untuk membuat pencarian lebih efisien.
Implementasi GPU dapat menerima input dari memori CPU atau GPU. Pada server dengan GPU, indeks GPU dapat digunakan penggantian drop-in untuk indeks CPU (misalnya, ganti IndexFlatL2
dengan GpuIndexFlatL2
) dan salinan ke/dari memori GPU ditangani secara otomatis. Hasilnya akan lebih cepat namun jika input dan output tetap tinggal di GPU. Penggunaan tunggal dan multi-GPU didukung.
Faiss dilengkapi dengan perpustakaan yang dikompilasi untuk Anaconda di Python, lihat Faiss-CPU dan FAISS-GPU. Perpustakaan sebagian besar diimplementasikan dalam C ++, satu -satunya ketergantungan adalah implementasi BLAS. Dukungan GPU opsional disediakan melalui CUDA atau AMD ROCM, dan antarmuka Python juga opsional. Ini dikompilasi dengan cmake. Lihat Install.md untuk detailnya.
FAISS dibangun di sekitar jenis indeks yang menyimpan satu set vektor, dan menyediakan fungsi untuk mencari di dalamnya dengan perbandingan vektor produk L2 dan/atau titik. Beberapa jenis indeks adalah garis dasar sederhana, seperti pencarian yang tepat. Sebagian besar struktur pengindeksan yang tersedia sesuai dengan berbagai pertukaran sehubungan dengan
Implementasi GPU opsional memberikan apa yang mungkin (pada Maret 2017) benar-benar tepat dan perkiraan (domain terkompresi) implementasi pencarian tetangga terdekat untuk vektor dimensi tinggi, k-means Lloyd tercepat, dan algoritma pemilihan K tercepat yang diketahui. Implementasinya dirinci di sini.
Berikut ini adalah titik masuk untuk dokumentasi:
Penulis utama FAISS adalah:
Referensi untuk mengutip saat Anda menggunakan FAISS dalam makalah penelitian:
@article{douze2024faiss,
title={The Faiss library},
author={Matthijs Douze and Alexandr Guzhva and Chengqi Deng and Jeff Johnson and Gergely Szilvasy and Pierre-Emmanuel Mazaré and Maria Lomeli and Lucas Hosseini and Hervé Jégou},
year={2024},
eprint={2401.08281},
archivePrefix={arXiv},
primaryClass={cs.LG}
}
Untuk versi GPU FAISS, silakan kutip:
@article{johnson2019billion,
title={Billion-scale similarity search with {GPUs}},
author={Johnson, Jeff and Douze, Matthijs and J{'e}gou, Herv{'e}},
journal={IEEE Transactions on Big Data},
volume={7},
number={3},
pages={535--547},
year={2019},
publisher={IEEE}
}
Untuk diskusi publik tentang FAISS atau untuk pertanyaan, ada grup Facebook di https://www.facebook.com/groups/faissusers/
Kami memantau halaman masalah repositori. Anda dapat melaporkan bug, mengajukan pertanyaan, dll.
FAISS dilisensikan MIT, lihat file lisensi di direktori tingkat atas.
Hak Cipta © Meta Platforms, Inc.