Ich lese in verschiedenen Blogs immer wieder gerne über Fortschritte in der KI, und in letzter Zeit dominiert die Anwendung großer Sprachmodelle wie ChatGPT. In letzter Zeit gab es unglaubliche Fortschritte bei großen Sprachmodellen, bei der Erstellung eigener large language model (LLM) und bei der Verankerung großer Sprachmodelle in externen Wissensdatenbanken. Titel wie "How to fine-tune ChatGPT with your own data" und "How to set up document question answering with LLMs in a couple of hours" erwecken den Eindruck, dass jeder ein vorgefertigtes ChatGPT-Plugin verwenden oder ein Open-Source-LLM hosten und sein eigenes wissensbasiertes Chatsystem ganz einfach einrichten kann.
Und ich habe gelernt, dass das sowohl wahr als auch ziemlich weit von der Wahrheit entfernt ist. Es war recht einfach, ein System einzurichten, das Informationen an ChatGPT (oder ein anderes LLM) weitergibt und meine Fragen auf der Grundlage des von mir bereitgestellten Kontexts beantwortet. Open-Source-Bibliotheken bieten eine Vielzahl von Funktionen, und wenn man sie mit einem Vektorspeicher kombiniert, kann man die Codestruktur leicht einrichten.
Was in diesen Blogs jedoch nie erwähnt wird, ist, dass dies bei kleinen, gut strukturierten Informationssammlungen (Dokumente von ein paar Seiten) recht einfach zu bewerkstelligen ist, bei größeren Wissensdatenbanken (Hunderte von Seiten an Informationen, die es zu sichten gilt) jedoch zunehmend schwieriger wird. Wenn man dies auf unser Produkt anwendet, bei dem wir Fragen auf der Grundlage von Hunderten von Seiten an Ausschreibungsunterlagen beantworten müssen, die oft nicht so liebevoll strukturiert sind, wie wir es gerne hätten, stellt dies eine ziemliche Herausforderung dar.
Es scheint mehrere Ansätze zu geben:
- Weitergabe aller Informationen an Ihr LLM
- Verwendung von dichten Retrievalmodellen in einer Vektordatenbank
Überlassen Sie Ihrem LLM die Entscheidung, welche Informationen verwendet werden sollen
Um große Sprachmodelle auf externem Wissen zu gründen, muss dieses Wissen in das prompt integriert werden. Wenn wir nicht genau wissen, welche Informationen unsere Frage beantworten werden, können wir dann nicht einfach alle Informationen in das LLM einspeisen und es herausfinden lassen? Nun... Dies funktioniert, wenn man sich auf eine relativ kleine Wissensbasis stützt, wie z.B. ein 1-seitiges Dokument, aber dies wird durch die Kontextgröße des Modells grundlegend eingeschränkt. Während diese Kontextgrößen zunehmen (32k Token mit GPT-4), sind sie nicht annähernd so groß wie eine Wissensbasis, die für reale Probleme relevant ist.
Ein Ansatz besteht darin, die large language model mehrfach aufzurufen, damit sie die Wissensbasis zusammenfassen oder dichtere Darstellungen erstellen kann. Dies funktioniert, erhöht aber die Anzahl der Aufrufe, die Anzahl der verarbeiteten Token, die Berechnungskosten und die benötigte Zeit um einen beträchtlichen Faktor und skaliert nicht gut mit der Größe der Wissensbasis (Dokumente).
Verwendung von dichten Retrievalmodellen in einer Vektordatenbank
Dense Retrieval-Modelle, insbesondere Bi-Codierer, die einen Text in einen n-dimensionalen Vektor kodieren und eine einfache Berechnung des Abstands zwischen Vektoren (Einbettungen) ermöglichen. Dieser Abstand ist ein Näherungswert für die Ähnlichkeit zwischen Texten und kann für die "semantische Suche" verwendet werden. Dies hat sich als erster Durchgang zur Ermittlung relevanter Texte für eine bestimmte Suchanfrage als recht gut erwiesen. In vielen Blogs wird vorgeschlagen, jede Seite zu kodieren und die Ähnlichkeit zwischen den Seiten und der Suchanfrage zu berechnen, um ein Ergebnis zu erhalten. Dies führt zwar theoretisch zu guten Ergebnissen bei bestimmten (bereichsspezifischen) Benchmarks, ist aber für eine reale Anwendung oft nicht ausreichend.
Einige Herausforderungen sind jedoch leicht zu bewältigen.
- Vorgefertigte Modelle zur Satzeinbettung wurden oft auf kurzen Textpassagen trainiert und sind nicht in der Lage, ganze Seiten zu kodieren. Sie funktionieren besser auf Satzebene. Dies gilt insbesondere für mehrsprachige Modelle.
- Viele vortrainierte Modelle werden auf eine symmetrische Ähnlichkeitsaufgabe trainiert, um die Ähnlichkeit zwischen zwei Sätzen zu berechnen. Dies funktioniert nicht so gut für kürzere Abfragesätze und längere Referenztexte (Dokumentseiten oder Absätze).
- Vorgefertigte Modelle für die Satzeinbettung wurden häufig für allgemeine Texte (wie Tweets oder Internetforen) trainiert und erbrachten bei domänenspezifischen Texten, wie sie im beruflichen Umfeld häufig vorkommen, nur mäßige Leistungen.
- Die Daten in Dokumenten sind oft nicht so gut strukturiert wie die Schulungstexte. Automatisch extrahierte Dokumente können stark verrauscht sein (Kopf- und Fußzeilen, schlechte OCR und viele andere Probleme).
Mitbringsel
Natürlich gibt es Lösungen für all diese Probleme, und es ist definitiv möglich, einen guten, informationsbasierten Chat-Assistenten zu entwickeln. Aber es klafft eine große Lücke zwischen den eingängigen Blogbeiträgen, die ein Spielzeugproblem demonstrieren, und der Anwendung dieser Technologie auf einen realen Anwendungsfall.
Unter Brainial arbeiten wir derzeit an der Lösung dieser Herausforderungen, um die Leistungsfähigkeit von Large Language Models in unsere Tender Assist zu integrieren. Unser Ziel ist es, Funktionen für die Beantwortung von Freiformfragen und das (Neu-)Schreiben von Angebote bereitzustellen. Kontaktieren Sie uns für weitere Informationen.