Siehe Benchmarks
Wie man benutzt
- Stellen Sie sicher, dass die entsprechenden Pakete installiert sind. Stellen Sie sicher, dass die folgenden Installationen installiert sind: Satz_Transformers Tqdm Pandas PYPDF2 Torch Asyncio gleichzeitlich re -qdrant_client pinecone pyMilvus dotenv
- Laden Sie alle PDFs in /data /oder ein anderes Verzeichnis hoch, falls angegeben.
- Wenn Sie eine Metadatendatei für weitere Informationen zu PDF -Dateien haben, laden Sie sie in das Home -Verzeichnis hoch und nennen Sie es metadata.csv oder ändern Sie den Namen. Der Code muss wahrscheinlich in Macloader in get_metadata () geändert werden, um Ihre spezifische Metadatendatei zu berücksichtigen.
- Datenverbindungsdetails in .Env. Sehen Sie .Env-Beispiel dafür, wie Ihr .env aussehen sollte.
- Dies kann vermieden werden, wenn Sie stattdessen nur die Details als Teil der DB -Initialisierung im Code eingeben möchten.
- Erstellen Sie eine Index -Python -Datei. Von hier aus würde ich eine geeignete Protokollierung definieren. Bei all den Daten ist es wichtig, auf Probleme zu achten. Die gesamte Protokollierung wird mit Informationen, Warnungen, Fehler und kritisch angemessen benannt.
- Erstellen Sie Delete.txt, geben Sie nichts hinein.
- Importieren Sie geeignete Dateien aus dem Projekt und initialisieren Sie sie mit den entsprechenden Details. Alle verfügbaren Parameter sind gut dokumentiert und sollten von Ihrer IDE durch Schwebe- oder Klicken angezeigt werden.
- Beispiel:
from Loader import MacLoader & from databases.PineconeDB import PineconeDB
- Schauen Sie sich nach einem Ausführen Ihrer Dateien delete.txt an und sehen Sie, welche Dateien Probleme mit dem PYPDF2 -Leser angeben. Wenn Sie diese Dateien entfernen möchten, verwenden Sie Utility.delete_bad_pdfs ()
- Genießen Sie, lassen Sie mich wissen, wie ich diesen Prozess verbessern kann!
Key Takeaways
Vorverarbeitung
Llama_index ist großartig, aber die Zuverlässigkeit an Knoten ist ein echtes Hindernis. Texnodes scheinen sehr nützlich zu sein, aber damit sind viele unnötige Daten enthalten, die Sie mit Ihrem Vektor hochladen, der nur Speicher und Leistung aufnimmt. Allein aus diesem Grund darf Llama_index nicht für den Komplikieren des Vektor -Upload -Prozesses verwendet werden. Die zusätzlichen Daten sind einfach zu viel, wenn Sie in einem Produktionsmaßstabendatensatz sind. Ich mag es auch nicht, wie ärgerlich es ist, manchmal Code mit ihm zu schreiben, so viele seltsame Regeln und unnötige Schritte. Texnodes können ein wertvolles leistungsstarkes Gut sein, wenn alles richtig verwaltet wird. Alle zusätzlichen Daten werden lokal gespeichert und behindert die Abrufgeschwindigkeiten oder den Speicher nicht.
LangChain erleichtert eine einfachere Möglichkeit, Daten mit weniger Regeln zu verknüpfen (hängt jedoch vom Kontext ab). Ich glaube definitiv nicht, dass Langchain Produktionsbereitschaft ist und stattdessen Grip Tape verwendet werden sollte. Die volle Kontrolle über den gesamten Prozess kann auch in einer Produktionsumgebung bevorzugt werden.
Insgesamt kann ich etwas nicht leicht finden, das genau so passt, wie ich es will. Hier ist mein Verständnis dafür, wie ich denke, dass dieser Prozess gehen sollte:
Während der Beendigung dieses Programms wurde mir klar, dass es sich nur um einen Ersatz für die beiden oben genannten Werkzeuge handelte. Die beiden oben genannten Tools sollen für alle Anwendungsfälle angewendet werden. Ich habe gerade einen spezifischen für meine codiert.
Einbettung / Transformatoren
Die Auswahl von Satztransformatoren war nicht allzu schwierig.
All-Minilm-V2 war gut und schnell, aber ich machte mir Sorgen um Skalierbarkeit mit massiven Datenmengen. Nicht die präzissten, aber immer noch gut, nur nicht für die Produktion.
E5-Large-V2 hat in meinen Tests die grundlegende Datenabnahme in kleinem Maßstab fehlgeschlagen. Aus diesem Grund werde ich es auch nicht in größerem Maßstab betrachten.
Mit Ausbettungseinbettungen dauert alles länger, aber sie werden wahrscheinlich eine viel bessere Datenpräzision bieten. Ich habe diese noch nicht richtig getestet.
All-MPNET-V2 ist in Bezug auf Geschwindigkeit und Leistung nur am besten, was möglicherweise nicht so präzise ist wie ein Einbettung von Ausbildern, aber Geschwindigkeit und Leistung können in einer Produktionsumgebung bevorzugt werden.
ADA (OpenAI) Einbettungen werden viel teurer sein als typische lokale Satztransformatoren. In der Vergangenheit hatte ich Probleme, massive Datensätze aufgrund von Ratengrenzen und anderen von ihrem Modell auferlegten Einschränkungen zu verarbeiten. Wenn Daten in Teilen gesendet werden, lösen Sie dieses Problem.
- Es ist wichtig zu berücksichtigen, dass ADA auch in eine Dimension von 1536 einbettet. Dies führt zu höheren semantischen Suchzeiten aufgrund der zusätzlichen Mathematik, die für so viele weitere Dimensionen erforderlich ist. Auch dies würde auch zu einer höheren Präzision führen, aber andere Modelle können auch eine hohe dimensionale Einbettung ohne die Verwendung einer teuren externen API durchführen.
- Wenn die Verwendung eines lokalen Satztransformators einschränkend oder unpraktisch ist, ist dies ein großer Ersatz.
Letzte Wahl: unbestimmt. Ich muss zuerst die Vorverarbeitung beenden, bevor ich mich zwischen Anweisungen oder MPNET entscheide
Vektordatenbanken
Ablehnte Datenbanken
- Chroma
- Fehlen Optionen für Serverbereitstellungen. Für kleine Projekte wird dies jedoch immer die beste Wahl sein, denke ich.
- PgVector
- Spielt aus irgendeinem Grund sehr schlecht in Benchmarks. Möglicherweise ist jedoch nicht real für die Leistung der realen Welt. Siehe hier
- Wenn die poststresql -Datenbank bereits verwendet wird oder für die angegebenen Daten praktisch ist, habe ich keinen Zweifel daran, dass PGVector die beste Option ist. Ich würde jedoch die PGVector -Bibliothek für sich selbst nicht verwenden oder für sie zu postresql wechseln.
- Elastisch
- Waviate
- Ich hatte zuvor geplant, dies zu bewerten, aber während ich versuchte, dies in diesem Programm umzusetzen, hatte ich im Vergleich zu allen anderen viel mehr Schwierigkeiten.
- Die Dokumentation für den Python -Kunden ist überhaupt nicht großartig, es war nicht verrückt schwierig, aber die mangelnde Dokumentation ist besorgniserregend.
- Mein Anwendungsfall plant, eine verwaltete Cloud zu verwenden, und die WCs haben mich wirklich Sorgen gemacht. Es scheint nicht viel Sicherheit zu geben, es gibt nicht einmal 2FA. Ich persönlich vertraue WCS nicht und es hatte die schlechteste Benutzeroberfläche im Vergleich zu anderen Datenbanken.
- Wenn Sie in einem Docker -Container verwendet werden sollen, sollte das Weaviate überdacht und eine faire Aufnahme erhalten werden, aber ich werde es vorerst nicht weiter bewerten.
Derzeit untersuchen
- Tannenzapfen
- Milvus
- Qdrant
Überlegungen aus dem gesamten Prozess
- PDFs haben so viel Müll und die meisten Lader essen das auf. Zum Striptext von PDFs gibt es viel Müll, insbesondere wenn sie eine Leselösung von Langchain oder llama_index verwenden. Die Nicht -Kontrolle über diesen Prozess machte es schwieriger, einen benutzerdefinierten Verzeichnis -PDF -Lader zu erstellen.
- Ich denke, fast jedes andere Format ist PDFS für das Lesen aus Massenmengen an Daten überlegen. So viele Probleme mit Codierung, Junk -Charakteren und unlesbarem ruinierenden Text von PDF und dem Jamming der Pipeline.
- Textdaten können bei Bedarf in allen Vektor -Datenbanken gespeichert werden. Dies vereinfacht den Speicherprozess drastisch. Viele Vektordatenbanken ermöglichen dies in Form von Metadaten, aber nicht die separate Speicherung von Text, die ein Problem sein kann. Der Text ist zu groß und speicherintensiv, um auch im Speicher gespeichert zu werden, und Metadaten können auf der Festplatte gespeichert werden, aber dann wird die Metadatenfilterung nicht verfügbar sein.
- Wenn die Vektor -Datenbank nicht ordnungsgemäß ordnungsgemäß behandelt wird, kann der Vektor -Upload -Prozess nur durch Hochladen der Vektoren und einer ID vereinfacht werden. Wenn semantische Suche durchgeführt wird, durchsuchen Sie eine lokale oder NoSQL -Datenbank aus der zugehörigen ID.