Was ist FAISS?
FAISS ist eine Open-Source-Bibliothek, die in einer Menge dichter Vektoren die Vektoren sucht, die einem Anfragevektor am nächsten liegen. Der Name steht für Facebook AI Similarity Search. Das Projekt schreibt ihn „Faiss“.
Was die Bibliothek leistet
Ein dichter Vektor ist eine Liste von Zahlen fester Länge. Ein neuronales Netz kann ein Bild oder einen Text in einen solchen Vektor umwandeln. Das nennt man Einbettung (Embedding). FAISS speichert viele Vektoren in einem Index. Zu einem Anfragevektor liefert es die nächsten Vektoren und ihre Abstände. Es vergleicht Vektoren mit der L2-Distanz (euklidisch) oder mit dem Skalarprodukt. Außerdem unterstützt es die Kosinus-Ähnlichkeit, das Skalarprodukt normalisierter Vektoren.
Die Forschungsgruppe Fundamental AI Research bei Meta entwickelt FAISS. Die Bibliothek ist in C++ geschrieben und hat Wrapper für Python. Einige Algorithmen laufen auch auf einer GPU.
Indextypen
Der Indextyp bestimmt das Verhältnis von Geschwindigkeit und Exaktheit.
- IndexFlatL2 und IndexFlatIP vergleichen die Anfrage mit jedem Vektor, deshalb ist das Ergebnis exakt. IndexFlatIP verwendet das Skalarprodukt. Mit normalisierten Vektoren ergibt es die Kosinus-Ähnlichkeit.
- IndexIVFFlat teilt die Vektoren in nlist Zellen auf. Eine Anfrage durchsucht davon nur nprobe Zellen. Das ist schneller, aber der nächste Nachbar kann übersehen werden, wenn seine Zelle nicht durchsucht wird.
- IndexHNSWFlat durchsucht einen Graphen der Vektoren (ein hierarchischer navigierbarer Small-World-Graph).
- IndexIVFPQ ergänzt die Produktquantisierung, die jeden Vektor in komprimierter Form speichert.
Die meisten Indizes müssen vor der Verwendung mit Beispielvektoren trainiert werden. IndexFlatL2 braucht kein Training.
Skalierung
FAISS kann Mengen von Vektoren durchsuchen, die nicht in den Arbeitsspeicher (RAM) passen. In der Arbeit von 2017 haben die Autoren einen Graphen der nächsten Nachbarn für 1 Milliarde Vektoren in weniger als 12 Stunden auf 4 GPUs aufgebaut.
Häufig gestellte Fragen
- Wer entwickelt FAISS und in welcher Sprache ist es geschrieben?
- FAISS wird vor allem bei der Forschungsgruppe Fundamental AI Research von Meta entwickelt. Es ist in C++ geschrieben und hat Wrapper für Python und numpy. Der Code steht unter der MIT-Lizenz. Meta hat es im März 2017 angekündigt.
- Ist FAISS eine Vektordatenbank?
- Nein. FAISS ist eine Bibliothek, die Sie aus Ihrem eigenen Programm aufrufen. Auf der Projektseite wird sie als Bibliothek für die Ähnlichkeitssuche und Clusterbildung dichter Vektoren beschrieben, nicht als Datenbank.
- Wie findet FAISS die Kosinus-Ähnlichkeit?
- FAISS vergleicht Vektoren mit der L2-Distanz oder dem Skalarprodukt. Für die Kosinus-Ähnlichkeit normalisieren Sie die Vektoren zuerst auf die Länge 1. Dann verwenden Sie einen Index für das Skalarprodukt, etwa IndexFlatIP. Die Kosinus-Ähnlichkeit ist das Skalarprodukt normalisierter Vektoren.
- Liefert FAISS immer den exakten nächsten Nachbarn?
- Nein. Die flachen Indizes (IndexFlatL2 und IndexFlatIP) durchsuchen jeden Vektor und liefern deshalb exakte Ergebnisse. Partitionierte Indizes wie IndexIVFFlat durchsuchen nur einen Teil der Daten. Sie sind schneller, verlieren aber die Garantie, den nächsten Nachbarn zu finden.
Referenzen
- faiss-github
- facebookresearch/faiss, README Meta Fundamental AI Research (GitHub)
- faiss-wiki-indexes
- Faiss indexes (Faiss wiki) Meta Fundamental AI Research (GitHub)
- faiss-wiki-getting-started
- Getting started (Faiss wiki) Meta Fundamental AI Research (GitHub)
- faiss-meta-2017
- Faiss: A library for efficient similarity search Engineering at Meta
- johnson-2017
- Billion-scale similarity search with GPUs (Johnson, Douze, Jegou), arXiv:1702.08734 arXiv
- douze-2024
- The Faiss library (Douze et al.), arXiv:2401.08281 arXiv
Dies ist ein Referenzeintrag. TarmacView bietet Drohneninspektionsdienste an und verkauft nicht die in diesem Glossar beschriebene Ausrüstung oder Materialien.