Teilen über


Erweitern eines großen Sprachmodells mit Abruferweiterung und Feinabstimmung

In den Artikeln dieser Reihe werden die Wissensabrufmodelle erläutert, mit denen LLMs ihre Antworten generieren. Standardmäßig hat ein LLM (Large Language Model) nur Zugriff auf seine Schulungsdaten. Sie können das Modell jedoch erweitern, um Echtzeitdaten oder private Daten einzuschließen. In diesem Artikel wird eine von zwei Mechanismen zum Erweitern eines Modells erläutert.

Der erste Mechanismus ist die Retrieval-Augmented Generation (RAG), die eine Form der Vorverarbeitung ist, die semantische Suche mit kontextbezogener Primierung kombiniert (in einem anderen Artikel erläutert).

Der zweite Mechanismus ist feinabstimmung, was sich auf den Prozess der Weiterschulung des Modells auf ein bestimmtes Dataset nach seiner anfänglichen, breiten Schulung bezieht, mit dem Ziel, es anzupassen, um besser an Aufgaben zu arbeiten oder Konzepte im Zusammenhang mit diesem Dataset zu verstehen. Dieser Prozess hilft dem Modell, seine Genauigkeit und Effizienz bei der Behandlung bestimmter Eingabe- oder Domänentypen zu verbessern oder zu verbessern.

In den folgenden Abschnitten werden diese beiden Mechanismen ausführlicher beschrieben.

Grundlagen von RAG

RAG wird häufig verwendet, um das Szenario "Chat über meine Daten" zu ermöglichen, in dem Unternehmen, die einen großen Korpus an Textinhalten (interne Dokumente, Dokumentationen usw.) haben und diesen Korpus als Grundlage für Antworten auf Benutzeraufforderungen verwenden möchten.

Auf hoher Ebene erstellen Sie einen Datenbankeintrag für jedes Dokument (oder einen Teil eines Dokuments, der als "Block" bezeichnet wird). Der Block wird in der Einbettung indiziert, einem Vektor (Array) von Zahlen, die Facets des Dokuments darstellen. Wenn ein Benutzer eine Abfrage sendet, durchsuchen Sie die Datenbank nach ähnlichen Dokumenten und übermitteln dann die Abfrage und die Dokumente an die LLM, um eine Antwort zu verfassen.

Hinweis

Der Begriff Retrieval-Augmented Generation (RAG) akzeptativ. Der Prozess der Implementierung eines RAG-basierten Chatsystems, das in diesem Artikel beschrieben wird, kann angewendet werden, ob es einen Wunsch gibt, externe Daten in einer unterstützenden Kapazität (RAG) zu verwenden oder als Zentrale der Antwort (RCG) zu verwenden. Diese differenzierte Unterscheidung wird in den meisten Lesungen im Zusammenhang mit RAG nicht behandelt.

Erstellen eines Indexes von vektorisierten Dokumenten

Der erste Schritt zum Erstellen eines RAG-basierten Chatsystems besteht darin, einen Vektordatenspeicher zu erstellen, der die Vektoreinbettung des Dokuments (oder einen Teil des Dokuments) enthält. Betrachten Sie das folgende Diagramm, in dem die grundlegenden Schritte zum Erstellen eines vektorisierten Indexes von Dokumenten beschrieben werden.

Diagramm, das die verschiedenen Phasen der Aufnahme von Dokumenten darstellt, beginnend mit Blöcken, dann Schritte nach dem Blockieren und anschließend aufruft die Einbettungs-API und speichert dann die Dokumentblöcke als vektorisierte Einbettungen in die Vektordatenbank.

Dieses Diagramm stellt eine Datenpipeline dar, die für die Erfassung, Verarbeitung und Verwaltung der vom System verwendeten Daten verantwortlich ist. Dazu gehören vorverarbeitete Daten, die in der Vektordatenbank gespeichert werden sollen, und sicherzustellen, dass die in das LLM eingespeisten Daten im richtigen Format vorliegen.

Der gesamte Prozess wird durch den Begriff einer Einbettung gesteuert, bei der es sich um eine numerische Darstellung von Daten (in der Regel Wörter, Ausdrücke, Sätze oder sogar ganze Dokumente) handelt, die die semantischen Eigenschaften der Eingabe auf eine Weise erfasst, die von Machine Learning-Modellen verarbeitet werden kann.

Zum Erstellen einer Einbettung senden Sie den Teil des Inhalts (Sätze, Absätze oder ganze Dokumente) an die Azure OpenAI Embedding-API. Was von der Einbettungs-API zurückgegeben wird, ist ein Vektor. Jeder Wert im Vektor stellt einige Merkmale (Dimension) des Inhalts dar. Dimensionen können Themen, semantische Bedeutung, Syntax und Grammatik, Wort- und Ausdrucksverwendung, Kontextbeziehungen, Stil und Ton usw. umfassen. Zusammen stellen alle Werte des Vektors den dimensionalen Raum des Inhalts dar. Anders ausgedrückt: Wenn Sie sich eine 3D-Darstellung eines Vektors mit drei Werten vorstellen können, lebt ein Vektor in einem bestimmten Bereich der X-, Y-, Z-Ebene. Was geschieht, wenn Sie 1000 (oder mehr) Werte haben? Obwohl es für Menschen nicht möglich ist, ein 1000-Dimension-Diagramm auf einem Blatt Papier zu zeichnen, um es verständlicher zu machen, haben Computer kein Problem, diesen Grad des dimensionalen Raums zu verstehen.

Im nächsten Schritt des Diagramms wird das Speichern des Vektors zusammen mit dem Inhalt selbst (oder einem Zeiger auf die Position des Inhalts) und anderen Metadaten in einer Vektordatenbank dargestellt. Eine Vektordatenbank ist wie jede Datenbankart mit zwei Unterschieden:

  • Vektordatenbanken verwenden einen Vektor als Index, um nach Daten zu suchen.
  • Vektordatenbanken implementieren einen Algorithmus namens Kosinus ähnliche Suche, auch bekannt als nächster Nachbar, die Vektoren verwendet, die am ehesten den Suchkriterien entsprechen.

Mit dem Korpus von Dokumenten, die in einer Vektordatenbank gespeichert sind, können Entwickler eine Retriever-Komponente erstellen, die Dokumente abruft, die mit der Abfrage des Benutzers aus der Datenbank übereinstimmen, um die LLM mit den Anforderungen des Benutzers zu beantworten.

Beantworten von Abfragen mit Ihren Dokumenten

Ein RAG-System verwendet zuerst die semantische Suche, um Artikel zu finden, die bei der Erstellung einer Antwort hilfreich sein könnten. Der nächste Schritt besteht darin, die übereinstimmenden Artikel zusammen mit der ursprünglichen Eingabeaufforderung des Benutzers an die LLM zu senden, um eine Antwort zu verfassen.

Betrachten Sie das folgende Diagramm als einfache RAG-Implementierung (manchmal auch als "naive RAG" bezeichnet).

Diagramm, das einen einfachen RAG-Fluss darstellt, mit Feldern, die Schritte oder Prozesse und Pfeile darstellen, die jedes Feld verbinden. Der Fluss beginnt mit der Abfrage des Benutzers, die an die Einbettungs-API gesendet wird. Die Einbettungs-API gibt Ergebnisse in einer vektorisierten Abfrage zurück, die verwendet wird, um die nächstgelegenen Übereinstimmungen (Artikelblöcke) in der Vektordatenbank zu finden. Die Abfrage- und Artikelblöcke werden an die Vervollständigungs-API gesendet, und die Ergebnisse werden an den Benutzer gesendet.

Im Diagramm sendet ein Benutzer eine Abfrage. Der erste Schritt besteht darin, eine Einbettung für die Eingabeaufforderung des Benutzers zu erstellen, um einen Vektor zurückzuholen. Der nächste Schritt besteht darin, die Vektordatenbank für diese Dokumente (oder Teile von Dokumenten) zu durchsuchen, bei denen es sich um eine Übereinstimmung mit "nächstem Nachbarn" handelt.

Kosinusähnlichkeit ist ein Maß, das verwendet wird, um zu bestimmen, wie ähnlich zwei Vektoren sind, im Wesentlichen die Kosinus des Winkels zwischen ihnen zu bewerten. Eine Kosinusähnlichkeit in der Nähe von 1 zeigt einen hohen Grad an Ähnlichkeit (kleiner Winkel), während eine Ähnlichkeit in der Nähe von -1 unterschiedliche Neigung (Winkel nähert sich 180 Grad) angibt. Diese Metrik ist für Aufgaben wie Dokumentähnlichkeit von entscheidender Bedeutung, wobei das Ziel darin besteht, Dokumente mit ähnlichen Inhalten oder Bedeutungen zu finden.

"Nächster Nachbar" Algorithmen arbeiten, indem sie die nächstgelegenen Vektoren (Nachbarn) zu einem bestimmten Punkt im Vektorraum finden. Im K-nächstgelegenen Nachbaralgorithmus (KNN) bezieht sich "k" auf die Anzahl der nächsten Nachbarn, die berücksichtigt werden sollen. Dieser Ansatz wird häufig in Klassifizierung und Regression verwendet, wobei der Algorithmus die Beschriftung eines neuen Datenpunkts basierend auf der Mehrheitsbezeichnung seiner nächsten Nachbarn im Schulungssatz vorhersagt. KNN und Kosinusgleichheit werden häufig in Systemen wie Empfehlungsmodulen verwendet, wobei das Ziel darin besteht, Elemente zu finden, die den Einstellungen eines Benutzers am ähnlichsten sind, dargestellt als Vektoren im Einbettungsraum.

Sie nehmen die besten Ergebnisse aus dieser Suche und senden den übereinstimmenden Inhalt zusammen mit der Aufforderung des Benutzers, eine Antwort zu generieren, die (hoffentlich) durch übereinstimmende Inhalte informiert wird.

Herausforderungen und Überlegungen

Die Implementierung eines RAG-Systems bringt seine Herausforderungen mit sich. Der Datenschutz ist von größter Bedeutung, da das System Benutzerdaten verantwortungsbewusst verarbeiten muss, insbesondere beim Abrufen und Verarbeiten von Informationen aus externen Quellen. Rechenanforderungen können auch erheblich sein, da sowohl die Abruf- als auch die generativen Prozesse ressourcenintensiv sind. Die Sicherstellung der Genauigkeit und Relevanz von Antworten beim Verwalten von Verzerrungen, die in den Daten oder dem Modell vorhanden sind, ist eine weitere wichtige Betrachtung. Entwickler müssen diese Herausforderungen sorgfältig bewältigen, um effiziente, ethische und wertvolle RAG-Systeme zu schaffen.

Der nächste Artikel dieser Reihe, Building advanced Retrieval-Augmented Generation Systeme bietet mehr Details zu Gebäudedaten und Rückschlüssen Pipelines, um ein produktionsfähiges RAG-System zu ermöglichen.

Wenn Sie sofort mit dem Erstellen einer generativen KI-Lösung experimentieren möchten, empfehlen wir, einen Blick auf "Erste Schritte mit dem Chat" mit Ihrem eigenen Datenbeispiel für Python zu werfen. Es gibt versionen des Lernprogramms auch in .NET, Java und JavaScript.

Feinabstimmung eines Modells

Feinabstimmung bezieht sich im Kontext eines LLM auf den Prozess der Anpassung der Parameter des Modells auf ein domänenspezifisches Dataset, nachdem sie zunächst auf ein großes, vielfältiges Dataset trainiert wurde.

LLMs werden auf einem breiten Dataset geschult, die Sprachstruktur, den Kontext und eine breite Palette von Kenntnissen erfassen. In dieser Phase lernen Sie allgemeine Sprachmuster kennen. Feinabstimmungen fügen dem vorab trainierten Modell basierend auf einem kleineren, spezifischen Dataset weitere Schulungen hinzu. Diese sekundäre Schulungsphase zielt darauf ab, das Modell anzupassen, um bestimmte Aufgaben besser zu erledigen oder bestimmte Domänen zu verstehen, ihre Genauigkeit und Relevanz für diese spezialisierten Anwendungen zu verbessern. Bei der Feinabstimmung werden die Gewichtungen des Modells angepasst, um die Nuancen dieses kleineren Datasets besser vorherzusagen oder zu verstehen.

Ein paar Überlegungen:

  • Spezialisierung: Feinabstimmung passt das Modell auf bestimmte Aufgaben an, z. B. rechtliche Dokumentanalyse, medizinische Textinterpretation oder Kundendienstinteraktionen. Dadurch wird das Modell in diesen Bereichen effektiver.
  • Effizienz: Es ist effizienter, ein vortrainiertes Modell für einen bestimmten Vorgang zu optimieren, als ein Modell von Grund auf neu zu trainieren, da bei der Feinabstimmung weniger Daten und Rechenressourcen erforderlich sind.
  • Anpassungsfähigkeit: Feinabstimmung ermöglicht die Anpassung an neue Aufgaben oder Domänen, die nicht Teil der ursprünglichen Schulungsdaten waren, wodurch LLMs vielseitige Tools für verschiedene Anwendungen sind.
  • Verbesserte Leistung: Bei Aufgaben, die sich erheblich von den Daten unterscheiden, auf die das Modell ursprünglich trainiert wurde, kann die Feinabstimmung zu einer besseren Leistung führen, da es das Modell anpasst, um die spezifische Sprache, den Stil oder die Terminologie zu verstehen, die in der neuen Domäne verwendet wird.
  • Personalisierung: In einigen Anwendungen kann die Feinabstimmung dazu beitragen, die Antworten oder Vorhersagen des Modells so zu personalisieren, dass sie den spezifischen Anforderungen oder Vorlieben eines Benutzers oder einer Organisation entsprechen. Feinabstimmungen stellen jedoch auch bestimmte Nachteile und Einschränkungen dar. Dies kann bei der Entscheidung helfen, wann sie sich für Feinabstimmungen im Vergleich zu Alternativen wie der Generierung von Abruferweiterungen (Retrieval Augmented Generation, RAG) entscheiden.
  • Datenanforderung: Feinabstimmung erfordert ein ausreichend großes und qualitativ hochwertiges Dataset, das für die Zielaufgabe oder Domäne spezifisch ist. Das Sammeln und Zusammenstellen dieses Datasets kann schwierig und ressourcenintensiv sein.
  • Überlastungsrisiko: Es besteht das Risiko, dass ein Überfitting besteht, insbesondere bei einem kleinen Dataset. Das Überfitting macht das Modell gut für die Schulungsdaten, aber schlecht für neue, nicht angezeigte Daten, wodurch die Verallgemeinerbarkeit verringert wird.
  • Kosten und Ressourcen: Während weniger ressourcenintensiv als Schulungen von Grund auf neu entwickelt werden, erfordert Feinabstimmung dennoch Rechenressourcen, insbesondere für große Modelle und Datasets, die für einige Benutzer oder Projekte unertragbar sein könnten.
  • Wartung und Aktualisierung: Feinabstimmungen erfordern möglicherweise regelmäßige Updates, um wirksam zu bleiben, wenn sich die domänenspezifischen Informationen im Laufe der Zeit ändern. Für diese fortlaufende Wartung sind zusätzliche Ressourcen und Daten erforderlich.
  • Modellabweichung: Da das Modell für bestimmte Aufgaben fein abgestimmt ist, kann es einige seiner allgemeinen Sprachverständnis und Vielseitigkeit verlieren, was zu einem Phänomen führt, das als Modelldrift bezeichnet wird.

Durch das Anpassen eines Modells mit Feinabstimmung wird erläutert, wie sie ein Modell optimieren. Auf hoher Ebene stellen Sie einen JSON-Datensatz mit potenziellen Fragen und bevorzugten Antworten bereit. Die Dokumentation schlägt vor, dass es spürbare Verbesserungen gibt, indem 50 bis 100 Frage-/Antwortpaare bereitgestellt werden, aber die richtige Zahl variiert stark vom Anwendungsfall.

Feinabstimmung im Vergleich zur Generierung von Abruferweiterungen

Auf der Oberfläche mag es so aussehen, als ob es eine gewisse Überlappung zwischen Feinabstimmung und Abruferweiterungen gibt. Die Auswahl zwischen Feinabstimmung und Abruferweiterung hängt von den spezifischen Anforderungen Ihres Vorgangs ab, einschließlich Leistungserwartungen, Ressourcenverfügbarkeit und der Notwendigkeit der Domänenspezifität im Vergleich zur Generalisierbarkeit.

Gründe für die Feinabstimmung gegenüber der "Retrieval-Augmented Generation":

  • Aufgabenspezifische Leistung – Feinabstimmung ist vorzuziehen, wenn hohe Leistung für einen bestimmten Vorgang kritisch ist, und es gibt ausreichende domänenspezifische Daten, um das Modell effektiv zu trainieren, ohne erhebliche Überlastungsrisiken zu vermeiden.
  • Kontrolle über Daten – Wenn Sie proprietäre oder hochspezialisierte Daten haben, die sich erheblich von den Daten unterscheiden, auf die das Basismodell trainiert wurde, können Sie diese einzigartigen Kenntnisse in das Modell integrieren.
  • Eingeschränkter Bedarf an Echtzeitaktualisierungen – Wenn für die Aufgabe das Modell nicht ständig mit den neuesten Informationen aktualisiert werden muss, kann die Feinabstimmung effizienter sein, da RAG-Modelle in der Regel Zugriff auf aktuelle externe Datenbanken oder das Internet benötigen, um aktuelle Daten abzurufen.

Wann die Abruf-Augmented Generation vorzuziehen ist, gegenüber Feinabstimmung:

  • Dynamischer oder sich entwickelnder Inhalt – RAG eignet sich besser für Aufgaben, bei denen die aktuellsten Informationen kritisch sind. Da RAG-Modelle Daten aus externen Quellen in Echtzeit abrufen können, eignen sie sich besser für Anwendungen wie die Nachrichtengenerierung oder das Beantworten von Fragen zu aktuellen Ereignissen.
  • Generalisierung über Spezialisierung – Wenn das Ziel darin besteht, eine starke Leistung in einer breiten Palette von Themen aufrechtzuerhalten, anstatt in einer engen Domäne zu excelieren, ist RAG möglicherweise vorzuziehen. Es verwendet externe Wissensdatenbank, sodass er Antworten über verschiedene Domänen hinweg generieren kann, ohne dass das Risiko besteht, dass es zu einem bestimmten Dataset überpasst.
  • Ressourceneinschränkungen – Bei Organisationen mit begrenzten Ressourcen für die Datenerfassung und Modellschulung bietet die Verwendung eines RAG-Ansatzes möglicherweise eine kostengünstige Alternative zur Feinabstimmung, insbesondere, wenn das Basismodell bereits relativ gut für die gewünschten Aufgaben ausgeführt wird.

Abschließende Überlegungen, die Ihre Entscheidungen im Anwendungsentwurf beeinflussen können

Nachfolgend finden Sie eine kurze Liste der Punkte, die Sie berücksichtigen sollten, und andere Punkte aus diesem Artikel, die sich auf Ihre Entscheidungen im Anwendungsentwurf auswirken:

  • Entscheiden Sie basierend auf den spezifischen Anforderungen Ihrer Anwendung zwischen Feinabstimmung und Abruferweiterung. Feinabstimmungen bieten möglicherweise eine bessere Leistung für spezialisierte Aufgaben, während RAG Flexibilität und aktuelle Inhalte für dynamische Anwendungen bieten könnte.