Optimierung von Transformatoren mit geräteinternen GPU-Ressourcen
von Ekaterina Butyugina
Die Bedeutung der Zusammenfassung in der NLP
Die Zusammenfassung in der Verarbeitung natürlicher Sprache (NLP) ist aufgrund ihrer Anwendung in Forschung und Geschäftsbereichen von grosser Bedeutung. Sie hilft dabei, die Informationsflut zu bewältigen und die Effizienz zu verbessern, indem lange Dokumente auf ihren Kerninhalt reduziert werden.
Transformer-Modelle: Das Rückgrat der Generativen KI
Transformer-Modelle sind eine Art von generativer künstlicher Intelligenz, die neue Inhalte basierend auf den erhaltenen Eingaben generieren. Diese Architektur treibt viele prominente KI-Modelle wie GPT (Generative Pretrained Transformer), BERT (Bidirectional Encoder Representations from Transformers) an und ermöglicht es ihnen, Aufgaben wie Textgenerierung, Beantwortung von Fragen und mehr, über die Zusammenfassung hinaus, zu erfüllen.
Warum lokale GPU?
Die Wahl zwischen einer lokalen GPU und Cloud-Diensten hängt von Leistungsanforderungen, Datenschutzbedenken, Kosten, Internetstabilität und der Art der Arbeit ab. Für viele sind die Vorteile einer lokalen GPU der bevorzugte Weg für rechenintensive Aufgaben.
Im Gegensatz zur extraktiven Zusammenfassungstechnik, die nur Schlüsselinhalte extrahiert, ohne neuen Text zu generieren, verwendet die abstraktive Zusammenfassung Techniken der Generierung natürlicher Sprache. Sie nutzt Wissensdatenbanken und semantische Darstellungen, um Zusammenfassungen zu generieren, wie es ein Mensch tun würde.
Einrichten der Umgebung
Wir beginnen mit der Installation notwendiger Bibliotheken für die Handhabung von Datensätzen und Transformern mit Befehlen wie !pip install datasets und !pip install transformers.
Für das Training unseres Modells wird der CNN/Daily Mail-Datensatz verwendet, der vollständige Artikel und Zusammenfassungen umfasst.
Wie du gesehen hast, haben wir auch die folgende Funktion load_metric importiert, die ich im folgenden Abschnitt erklären werde.
Bewertung mit dem ROUGE-Score
Zur Bewertung unseres Modells verwenden wir den ROUGE-Score, der KI-generierte Zusammenfassungen mit von Menschen erstellten vergleicht. Dies beinhaltet die Installation der Rouge-Score-Bibliothek und das Verständnis der Präzision, der Recall und des F-Masses zur Bewertung.
ROUGE (Recall-Oriented Understudy for Gisting Evaluation) ist eine Reihe von Metriken, die für die Bewertung automatischer Zusammenfassungen bei der Verarbeitung natürlicher Sprache verwendet werden.
Um dies zu präzisieren, nehmen wir an, wir wollen die folgenden zwei Zusammenfassungen vergleichen:
Konzentrieren wir uns auf ROUGE-1, das die Überlappung jedes einzelnen Wortes (1-Gramm) untersucht.
Zur Erinnerung: ROUGE-1 wird berechnet als die Anzahl der sich überschneidenden Wörter in der generierten Zusammenfassung, die auch in der Referenzzusammenfassung vorkommen, geteilt durch die Gesamtzahl der Wörter in der Referenzzusammenfassung. In diesem Fall sind Wörter wie "I", "loved", "reading", "the" und "Hunger Games" in beiden Zusammenfassungen enthalten. Die Referenzzusammenfassung hat 5 Wörter, und alle 5 sind in der generierten Zusammenfassung enthalten, so dass die Trefferquote 100 % beträgt.
Die Genauigkeit ist die Anzahl der sich überschneidenden Wörter in der erstellten Zusammenfassung, die auch in der Referenzzusammenfassung enthalten sind, geteilt durch die Gesamtzahl der Wörter in der erstellten Zusammenfassung. Die generierte Zusammenfassung enthält 6 Wörter, von denen 5 auch in der Referenzzusammenfassung vorkommen. Die Genauigkeit beträgt also 5/6 oder etwa 85,71 %.
F-Measure (F1 Score) kombiniert Präzision und Recall zu einem einzigen Ergebnis. Er wird als harmonisches Mittel von Precision und Recall berechnet. Für dieses Beispiel würde der F1-Wert 92,3 % betragen.
Der Wertebereich reicht von 0 bis 1, und in unserem Beispiel liegen alle Werte nahe bei 1, so dass unsere generierte Zusammenfassung wahrscheinlich die wichtigsten Punkte effektiv erfasst
Datenverarbeitung und Modellauswahl
Die Vorverarbeitung beinhaltet die Verwendung eines Tokenizers, um Text in ein numerisches Format umzuwandeln, das das Modell interpretieren kann. Wir wählen das T5-Modell wegen seiner Vielseitigkeit in verschiedenen Aufgaben, einschliesslich Zusammenfassung, Übersetzung und Fragebeantwortung.
Im Grunde genommen verwandeln wir die Wörter in Zahlen.
Dieser Code ist so aufgebaut, dass er mit jedem Modellprüfpunkt aus dem Model Hub ausgeführt werden kann, solange das Modell eine Sequenz-zu-Sequenz-Version in der Transformers-Bibliothek hat. Hier haben wir den Kontrollpunkt t5-small gewählt.
Das T5-Modell hat eine Vielzahl von Aufgaben: Übersetzung, Zusammenfassung, Qualitätssicherung usw.
Wenn du das T5-Modell verwendest, müssen wir den Eingaben das Präfix "summarize:" voranstellen (das Modell kann auch übersetzen und braucht das Präfix, um zu wissen, welche Aufgabe es zu erfüllen hat).
Feinabstimmung des Transformer-Modells
Nun, da unsere Daten fertig sind, können wir das vorab trainierte Modell herunterladen und eine Feinabstimmung vornehmen.
Das T5-Modell wurde für eine andere Art von Text trainiert, weshalb wir es an unseren Datensatz anpassen müssen.
Zunächst müssen wir Parameter wie Lernrate und Stapelgröße anpassen:
Hier,
legen wir fest, dass die Bewertung am Ende jeder Epoche erfolgt
die Lernrate anpassen
den Gewichtsabfall anpassen
Da der Seq2SeqTrainer das Modell regelmässig speichert und unser Datensatz recht gross ist, weisen wir ihn an, maximal drei Speicherungen vorzunehmen.
Schließlich verwenden wir die Option predict_with_generate (um Zusammenfassungen korrekt zu generieren) und aktivieren das Training mit gemischter Präzision (um etwas schneller zu werden).
Der letzte Punkt, der für unseren Seq2SeqTrainer definiert werden muss, ist die Berechnung der Metriken aus den Vorhersagen. Hierfür müssen wir eine Hilfsfunktion definieren, die Sie im Original-Notebook finden können.
Dann müssen wir nur noch all dies zusammen mit unseren Datensätzen an den Seq2SeqTrainer übergeben:
Das Modell lokal ausführen
Wir können nun unser Modell feinabstimmen, indem wir einfach die train-Methode aufrufen:
Um es lokal auszuführen, benötigen Sie eine Cuda-kompatible GPU in Ihrem Rechner.
Ich habe eine NVIDIA RTX A5000 auf meinem HP ZBook Fury, mit der ich das Modell mit dem folgenden Trainingsverlauf ausführen kann: 3 Epochen der Ausführung des Modells auf der lokalen GPU
Die Laufzeit schwankt zwischen 20 und 26 Minuten für drei Epochen, was für einen so grossen Datensatz recht schnell ist.
Ich war neugierig auf die GPU-Nutzung, also kannst du sie auch hier sehen.
Speichernutzung während des Trainings
Eine GPU-Auslastung von 100 % ist im Allgemeinen ein gutes Zeichen, wenn intensive Aufgaben wie das Trainieren von Modellen für maschinelles Lernen durchgeführt werden, da dies darauf hindeutet, dass die GPU für die Berechnungen vollständig genutzt wird. Eine konsequente, längere Nutzung von 100 % kann jedoch zu Überhitzungsproblemen führen, wenn das Kühlsystem nicht angemessen ist. Seien Sie also vorsichtig und lassen Sie Ihre Rechner nicht verbrennen!
Testen und Beobachten der Ergebnisse
Jetzt ist es an der Zeit, unser fein abgestimmtes Modell anhand aktueller Nachrichten zu testen, wie z. B. dem Start des Gemini-Modells von Google. Der vollständige Text ist hier zu finden.
Und das ist unser Ergebnis:
Fazit
Wir haben gerade den faszinierenden Weg der Anwendung generativer KI auf die Aufgabe der Textzusammenfassung erkundet, wobei der Schwerpunkt auf der lokalen Ausführung lag. Wie wir gesehen haben, weist der Prozess zwar Ähnlichkeiten mit der Cloud-basierten Modellierung auf, die lokale Ausführung bietet jedoch einzigartige Vorteile, die Ihre Arbeit verbessern. Wir haben nicht nur die Möglichkeiten der generativen KI erforscht, sondern auch die Effizienz und Effektivität der Nutzung lokaler Ressourcen für solch anspruchsvolle Aufgaben hervorgehoben.
Ich würde mich freuen, Ihre Meinung zu unseren Ergebnissen zu lesen. Bleiben Sie dran für weitere Einblicke in die spannende Welt der KI!
Diese Demo wurde in Zusammenarbeit mit Dipanjan Sarkar, unserem leitenden Datenwissenschaftler, erstellt;