Mit der kontinuierlichen Weiterentwicklung der Applikationen Chat with multiple PDF files wurde mir schnell bewusst, dass die richtige Datenaufbereitung und effiziente Datenbereitstellung entscheidende Erfolgsfaktoren für die reibungslose Funktionsweise dieser Conversational Anwendungen sind. In diesem Zusammenhang entstand bei mir die Idee bzw. der Bedarf zur Entwicklung eines eigenständigen Programms mit dem Namen Create your local vector store database welches ausschließlich die Daten für die Verwendung zusammen mit Large Language Modellen (LLM) aufbereitet.
Die Hauptaufgabe dieses Programms Create your local vector store database besteht darin, Texte aus z. B. PDF-Dateien als Text-Embeddings in eine Vektor-Datenbank zu überführen. Im Fall meiner Applikation kommt die Vektor Datenbank FAISS (Facebook AI Similarity Search) zum Einsatz. Wichtig war für mich bei der Erstellung der Text Embeddings, dass der Anwender die Möglichkeit hat, aus verschiedenen Sprachmodellen auszuwählen die für die Erstellung der Embeddings verwendet werden sollen. Auch ist in diesem Zusammen der Aspekt wichtig die Texte in passende Teile also Chunks zu schneiden auf deren Basis die Text Embeddings erstellt werden. Alle diese Anforderungen können über das User Interface individuell passend zur Fachlichen Anforderung eingestellt werden.
Ich bin auf die Reaktionen von euch gespannt. Die Anwendung hat mittlerweile einen Stand erreicht, auf dem sie nicht nur in Bezug auf ihre Funktionen, sondern auch hinsichtlich ihrer Zuverlässigkeit und Leistungsfähigkeit für ein breiteres Publikum von Interesse sein könnte. Aus diesem Grund habe ich die Entscheidung getroffen, diese Lösung auf GitHub zu veröffentlichen. Noch muss ich den Quellcode etwas aufräumen aber dann werde ich alles auf Git Hub veröffentlichen.
Hinweis: Die hier vorgestellte Lösung läuft lokal und nutzt keine online Services von z. B. OpenAI über die die Daten geschickt werden. Daher ist die Anforderung an den Rechner mindestens eine NVIDIA Grafikkarte mit 24GB Ram bzw. 48GB Ram. Ich habe die Software zusammen mit einer NVIDIA A6000 entwickelt die hervorragende Dienste leistet.
Die beiden jetzt folgenden Bilder zeigen den aktuellen Stand dieser Anwendung, der bis Mitte September 2023 erreicht wurde.
Der erste Teil des User Interfaces bietet die Möglichkeit zur Verwaltung der Vektor-Datenbanken. Hier können diese geladen werden wenn z. B. weitere Texte ergänzt werden sollen aber es besteht auch die Möglichkeit Datenbanken wieder zu löschen die nicht mehr gebraucht werden.
Der untere Teil bzw. zweite Teil der Anwendung dient dazu Dateien, also PDF Dokumente, in eine Vektor Datenbank zu überführen. Die dafür notwendigen Einstellungen wie Chunk-Size, Chunk-Overlapping etc. können hier vorgenommen werden. Wichtig an dieser Stelle ist, dass zwei Methoden zur Aufbereitungen der Texte zur Verfügung stehen. Einmal können Texte mit der Funktion Recursive Character Text Splitter sowie mit der Funktion Character Text Splitter in Text-Chunks überführt werden.
Als Framework setze ich LangChain ein welches von mir als Klebstoff zwischen den Funktionen und aufrufen verstanden wird. LangChain hat es mir ermöglicht schnell ordentliche Ergebnisse zu erzielen.
Einführung in die Anwendung
Im jetzt folgenden Abschnitt gebe ich eine Einführung in die Funktionen und Möglichkeiten der Anwendung. Die Vielzahl der Optionen und Möglichkeiten ist jetzt schon groß und diese werden sich sicher auch wieder leicht verändern. Jetzt aber zu den aktuellen Funktionen und Konfigurationsmöglichkeiten im ersten Teil der Anwendung der Verwaltung der Vektor Datenbanken.
Jetzt zu den einzelnen Funktionen im oberen Bereich der Anwendung der Verwaltung der Vektor Store Datenbanken. Hier können bestehende Datenbanken geladen werden aber auch gelöscht werden.
- Hier wird der Pfad festgelegt unter dem die Vektor Datenbanken gespeichert werden sollen.
- Über dieses Drop-Down Menü besteht die Möglichkeit aus vorgegeben Large Language Modellen (LLM) für die Erstellung der Text-Embeddings auszuwählen.
- Dieses Drop-Down Menü zeigt alle bereits erstellen Datenbanken an.
- Mit dem Button “Load vectorestore DB” wird die ausgewählte Datenbank geladen.
- Mit dem Button “Delete vectorstore DB” kann eine bestehende Datenbank gelöscht werden.
- Hier wird die Länge der geladenen Vektor Datenbank angezeigt.
Damit sind die angezeigten Funktionen erläutert. Wird eine Vektor-Datenbank erstellt, so wird die vorgenommene Konfiguration in einer separaten Datei im Ordner der Datenbank abgespeichert. Wird die Datenbank dann geladen kann das Programm welches diese Lädt diese Konfiguration wieder einlesen.
Jetzt möchte ich den zweiten Teil der Anwendung vorstellen. Mit diesem wird eine neue Vektor Datenbank erstellt bzw. wenn im oberen Bereich eine Datenbank bereits geladen wurde kann diese um weitere Texte ergänzt werden. Wird eine bestehende Datenbank geladen so werden auch die Einstellungen geladen mit der diese erstellt wurde. Also Chunk-Size oder auch Chunk-Overlapping.
- Hier können Dateien wie PDF-Dateien hinzugefügt werden. Einmal via Drag&Drop oder eben über den Button “Brows files”.
- In dieser Zeile muss ein sprechender Name für die Vektor Datenbank angegeben werden.
- Über dieses Drop Down Menü könn das Vorgehen wie die Texte aufgeteilt werden sollen ausgewählt werden.
- Hier wird die Größe der Text-Chunks angegeben. Je nach fachlicher Anforderung und Eingangsdokument fällt die Länge unterschiedlich aus um das beste Ergebnis zu erzielen.
- Wichtig ist auch heraus zu finden wie groß das Overlapping der Texte sein soll. Am besten probiert man hier verschiedene Einstellungen aus.
- Hierbei handelt es sich um eine mehr oder weniger statische Funktion die “len” Funktion. Eventuell wird diese wieder entfernt.
- Hierbei handelt es sich um eine statische Funktion die aktuell im Default auf “False” steht bzw. noch keine Anwendung finde.
- Über den Button “Process” wird die Verarbeitung also die Erstellung der Vektor Datenbank angestoßen. Dieser Prozess kann je nach anzahl der Dokumente und Leistung des Rechners etwas dauern.
Zusammenfassung
In seinem aktuellen Stand erweist sich das von mir geschreibene Programm als äußerst zufriedenstellend. Es erfüllt seinen Zweck mit Bravour, indem es die schnelle Erstellung von Vektor-Datenbanken ermöglicht. Ein für mich wichtigerAspekt ist, dass dieses Programm ausschließlich lokal ausgeführt wird auf dem eigenen Rechner. Dies bedeutet, dass die Verantwortung für die Sicherheit und Verwaltung der Daten vollständig in den Händen des Nutzers liegt. Natürlich kann die Anwendung auch in einem eigenen Cloud Raum eingerichtet werden aber dann muss das Sprachenmodell auch dort ausgeführt werden. Hier stellt sich dann allerdings die Kostenfrage und Sinnhaftigkeit des Vorgehens. In solch einem Fall würde ich für die nutzung der Sprachenmodelle wieder auf Services wie jenen von OpenAI ausweichen.
Diese von mir bewusst gewählte Architektur alles lokal auszuführen gewährleistet, dass keinerlei Daten an Dritte übertragen also an externe Serviceanbieter weitergegeben werden. Diese datenschutzorientierte Herangehensweise unterstreicht die Anwendbarkeit dieses Programms für all jene, die sich intensiver mit großen Sprachmodellen beschäftigen und auf die Erstellung von Vektor-Datenbanken angewiesen sind ohne Services Dritte zu nutzen.
Die technische Umsetzung basiert auf Python und nutzt bewährte Frameworks wie LangChain. Darüber hinaus werden frei verfügbare Sprachmodelle für die Generierung der Text-Embeddings eingesetzt die Hugging Face online gestellt hat. Dies stellt sicher, dass Entwickler und Forscher von einer flexiblen und leistungsfähigen Lösung in Eigenverantworung profitieren können.
Die Entwicklung dieses Programms wird Schritt für Schritt vorangetrieben, um den sich wandelnden Anforderungen gerecht zu werden. Ich freue mich darauf von euch zu hören und euer Feedback aufzunehmen.
Artikelübersicht - Large Language Model Anwendungen:
Conversational Applikation - Arbeite mit Deinen Daten zusammen mit Large Language ModellenConversational Applikation - Erstelle Deine Text Embeddings und Vektor Datenbank
Hallo, ich habe ihre Anleitung befolgt und bekomme im letzten Schritt leider immer folgende Meldung im Terminal: bash <(wget -qO-…
Hi Dennis, vielen Dank für den Hinweis, ich habe die URLs angepasst so das diese wieder gehen. Ich bin gespannt…
Ich weiss, es ist noch im Aufbau. Aber hier ist ein Broken Link: https://www.ai-box.eu/smurf_training_data_small.zip Freue mich drauf, die ganze Serie…