Natural Language Processing mit Transformern - Lewis Tunstall - E-Book

Natural Language Processing mit Transformern E-Book

Lewis Tunstall

0,0

Beschreibung

Leistungsfähige State-of-the-Art-Sprachanwendungen mit vortrainierten Transformer-Modellen

  • Transformer haben die NLP-Welt im Sturm erobert
  • Von den Gründern von Hugging Face, der Plattform für vortrainierte Transformer-Modelle für TensorFlow und PyTorch
  • Bietet einen fundierten und praxisnahen Überblick über die wichtigsten Methoden und Anwendungen im aktuellen NLP
  • Hands-On: Jeder Programmierschritt kann in Jupyter Notebooks nachvollzogen werden

Transformer haben sich seit ihrer Einführung nahezu über Nacht zur vorherrschenden Architektur im Natural Language Processing entwickelt. Sie liefern die besten Ergebnisse für eine Vielzahl von Aufgaben bei der maschinellen Sprachverarbeitung. Wenn Sie Data Scientist oder Programmierer sind, zeigt Ihnen dieses praktische Buch, wie Sie NLP-Modelle mit Hugging Face Transformers, einer Python-basierten Deep-Learning-Bibliothek, trainieren und skalieren können.
Transformer kommen beispielsweise beim maschinellen Schreiben von Nachrichtenartikeln zum Einsatz, bei der Verbesserung von Google-Suchanfragen oder bei Chatbots. In diesem Handbuch zeigen Ihnen Lewis Tunstall, Leandro von Werra und Thomas Wolf, die auch die Transformers-Bibliothek von Hugging Face mitentwickelt haben, anhand eines praktischen Ansatzes, wie Transformer-basierte Modelle funktionieren und wie Sie sie in Ihre Anwendungen integrieren können. Sie werden schnell eine Vielzahl von Aufgaben wie Textklassifikation, Named Entity Recognition oder Question Answering kennenlernen, die Sie mit ihnen lösen können.

Sie lesen das E-Book in den Legimi-Apps auf:

Android
iOS
von Legimi
zertifizierten E-Readern

Seitenzahl: 591

Das E-Book (TTS) können Sie hören im Abo „Legimi Premium” in Legimi-Apps auf:

Android
iOS
Bewertungen
0,0
0
0
0
0
0
Mehr Informationen
Mehr Informationen
Legimi prüft nicht, ob Rezensionen von Nutzern stammen, die den betreffenden Titel tatsächlich gekauft oder gelesen/gehört haben. Wir entfernen aber gefälschte Rezensionen.



Copyright und Urheberrechte:Die durch die dpunkt.verlag GmbH vertriebenen digitalen Inhalte sind urheberrechtlich geschützt. Der Nutzer verpflichtet sich, die Urheberrechte anzuerkennen und einzuhalten. Es werden keine Urheber-, Nutzungs- und sonstigen Schutzrechte an den Inhalten auf den Nutzer übertragen. Der Nutzer ist nur berechtigt, den abgerufenen Inhalt zu eigenen Zwecken zu nutzen. Er ist nicht berechtigt, den Inhalt im Internet, in Intranets, in Extranets oder sonst wie Dritten zur Verwertung zur Verfügung zu stellen. Eine öffentliche Wiedergabe oder sonstige Weiterveröffentlichung und eine gewerbliche Vervielfältigung der Inhalte wird ausdrücklich ausgeschlossen. Der Nutzer darf Urheberrechtsvermerke, Markenzeichen und andere Rechtsvorbehalte im abgerufenen Inhalt nicht entfernen.

Natural Language Processingmit Transformern

Sprachanwendungen mitHugging Face erstellen

Lewis Tunstall, Leandro von Werra, Thomas WolfVorwort von Aurélien Géron

Deutsche Übersetzung vonMarcus Fraaß

Lewis Tunstall, Leandro von Werra, Thomas Wolf

Lektorat: Alexandra Follenius

Übersetzung: Marcus Fraaß

Copy-Editing: Claudia Lötschert, www.richtiger-text.de

Satz: III-satz, www.drei-satz.de

Herstellung: Stefanie Weidner

Umschlaggestaltung: Karen Montgomery, Michael Oréal, www.oreal.de

Bibliografische Information der Deutschen Nationalbibliothek

Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.d-nb.de abrufbar.

ISBN:

Print   978-3-96009-202-5

PDF    978-3-96010-712-5

ePub   978-3-96010-713-2

mobi   978-3-96010-714-9

1. Auflage 2023

Translation Copyright für die deutschsprachige Ausgabe © 2023 dpunkt.verlag GmbH

Wieblinger Weg 17

69123 Heidelberg

Authorized German translation of the English edition of Natural Language Processing with Transformers, Revised Edition ISBN 9781098136796 © 2022 by Lewis Tunstall, Leandro von Werra, and Thomas Wolf. This translation is published and sold by permission of O’Reilly Media, Inc., which owns or controls all rights to publish and sell the same.

Dieses Buch erscheint in Kooperation mit O’Reilly Media, Inc. unter dem Imprint »O’REILLY«.

O’REILLY ist ein Markenzeichen und eine eingetragene Marke von O’Reilly Media, Inc. und wird mit Einwilligung des Eigentümers verwendet.

Hinweis:

Dieses Buch wurde auf PEFC-zertifiziertem Papier aus nachhaltiger Waldwirtschaft gedruckt. Der Umwelt zuliebe verzichten wir zusätzlich auf die Einschweißfolie.

Schreiben Sie uns:

Falls Sie Anregungen, Wünsche und Kommentare haben, lassen Sie es uns wissen: [email protected].

Die vorliegende Publikation ist urheberrechtlich geschützt. Alle Rechte vorbehalten. Die Verwendung der Texte und Abbildungen, auch auszugsweise, ist ohne die schriftliche Zustimmung des Verlags urheberrechtswidrig und daher strafbar. Dies gilt insbesondere für die Vervielfältigung, Übersetzung oder die Verwendung in elektronischen Systemen.

Es wird darauf hingewiesen, dass die im Buch verwendeten Soft- und Hardware-Bezeichnungen sowie Markennamen und Produktbezeichnungen der jeweiligen Firmen im Allgemeinen warenzeichen-, marken- oder patentrechtlichem Schutz unterliegen.

Alle Angaben und Programme in diesem Buch wurden mit größter Sorgfalt kontrolliert. Weder Autoren noch Verlag noch Übersetzer können jedoch für Schäden haftbar gemacht werden, die in Zusammenhang mit der Verwendung dieses Buches stehen.

5 4 3 2 1 0

Inhalt

Vorwort

Einführung

1Hallo Transformer

Das Encoder-Decoder-Framework

Der Attention-Mechanismus

Einsatz von Transfer Learning im NLP

Die Transformers-Bibliothek von Hugging Face: die Lücke schließen

Die Anwendungsmöglichkeiten von Transformern im Überblick

Textklassifizierung

Named Entity Recognition

Question Answering

Automatische Textzusammenfassung (Summarization)

Maschinelle Übersetzung (Translation)

Textgenerierung

Das Ökosystem von Hugging Face

Der Hugging Face Hub

Die Tokenizers-Bibliothek von Hugging Face

Die Datasets-Bibliothek von Hugging Face

Die Accelerate-Bibliothek von Hugging Face

Die größten Herausforderungen im Zusammenhang mit Transformer-Modellen

Zusammenfassung

2Textklassifizierung

Der Datensatz

Ein erster Blick auf die Datasets-Bibliothek von Hugging Face

Dataset-Objekte in DataFrames überführen

Ein Blick auf die Verteilung der Kategorien

Wie lang sind unsere Tweets?

Vom Text zu Tokens

Tokenisierung auf der Ebene von Zeichen (Character Tokenization)

Tokenisierung auf der Ebene von Wörtern (Word Tokenization)

Tokenisierung auf der Ebene von Teilwörtern (Subword Tokenization)

Den gesamten Datensatz tokenisieren

Trainieren eines Textklassifikators

Transformer-Modelle als Feature-Extraktoren

Feintuning von Transformer-Modellen

Zusammenfassung

3Die Anatomie von Transformer-Modellen

Die Transformer-Architektur

Der Encoder

Self-Attention

Die Feed-Forward-Schicht

Layer Normalization integrieren

Positional-Embeddings

Einen Head zur Klassifizierung hinzufügen

Der Decoder

Transformer-Modelle im Überblick

Die drei Entwicklungsstränge von Transformer-Modellen

Rein Encoder-basierte Transformer-Modelle

Rein Decoder-basierte Transformer-Modelle

Encoder-Decoder-basierte Transformer-Modelle

Zusammenfassung

4Multilinguale Named Entity Recognition

Der Datensatz

Multilinguale Transformer-Modelle

Ein genauerer Blick auf die Tokenisierung

Die Tokenizer-Pipeline

Der SentencePiece-Tokenizer

Transformer-Modelle für die Named Entity Recognition

Der Aufbau der Model-Klasse der Transformers-Bibliothek

Bodies und Heads

Ein selbst definiertes Modell zur Klassifizierung von Tokens erstellen

Ein selbst definiertes Modell laden

Tokenisierung von Texten für die Named Entity Recognition

Qualitätsmaße

Feintuning eines XLM-RoBERTa-Modells

Fehleranalyse

Sprachenübergreifender Transfer

Wann ist ein Zero-Shot-Transfer sinnvoll?

Modelle für mehrere Sprachen gleichzeitig feintunen

Interaktion mit den Modell-Widgets

Zusammenfassung

5Textgenerierung

Die Herausforderungen bei der Generierung von kohärenten Texten

Greedy-Search-Decodierung

Beam-Search-Decodierung

Sampling-Verfahren

Top-k- und Nucleus-Sampling

Welcher Ansatz zur Decodierung ist der beste?

Zusammenfassung

6Automatische Textzusammenfassung (Summarization)

Der CNN/DailyMail-Datensatz

Pipelines für die automatische Textzusammenfassung

Ein einfacher Ansatz zur Textzusammenfassung

GPT-2

T5

BART

PEGASUS

Verschiedene Zusammenfassungen vergleichen

Evaluierung der Qualität von generierten Texten

BLEU

ROUGE

Evaluierung des PEGASUS-Modells auf dem CNN/DailyMail-Datensatz

Trainieren eines Modells zur Generierung von Zusammenfassungen

Das PEGASUS-Modell auf dem SAMSum-Datensatz evaluieren

Das PEGASUS-Modell feintunen

Zusammenfassungen von Dialogen erstellen

Zusammenfassung

7Question Answering

Aufbau eines rezensionsbasierten QA-Systems

Der Datensatz

Antworten aus einem Text extrahieren

Die Haystack-Bibliothek zum Aufbau einer QA-Pipeline verwenden

Verbesserung unserer QA-Pipeline

Den Retriever evaluieren

Den Reader evaluieren

Domain Adaptation

Die gesamte QA-Pipeline evaluieren

Jenseits des extraktiven QA

Zusammenfassung

8Effizientere Transformer-Modelle für die Produktion

Die Intentionserkennung als Fallstudie

Eine Benchmark-Klasse zur Beurteilung der Performance erstellen

Verkleinerung von Modellen mithilfe der Knowledge Distillation

Knowledge Distillation im Rahmen des Feintunings

Knowledge Distillation im Rahmen des Pretrainings

Eine Trainer-Klasse für die Knowledge Distillation erstellen

Ein geeignetes Modell als Ausgangspunkt für das Schüler-Modell wählen

Geeignete Hyperparameter mit Optuna finden

Unser destilliertes Modell im Vergleich

Beschleunigung von Modellen mithilfe der Quantisierung

Das quantisierte Modell im Vergleich

Optimierung der Inferenz mit ONNX und der ONNX Runtime

Erhöhung der Sparsität von Modellen mithilfe von Weight Pruning

Sparsität tiefer neuronaler Netze

Weight-Pruning-Methoden

Zusammenfassung

9Ansätze bei wenigen bis keinen Labels

Erstellung eines GitHub-Issues-Tagger

Die Daten beschaffen

Die Daten vorbereiten

Trainingsdatensätze erstellen

Unterschiedlich große Trainingsdatensätze erstellen

Implementierung eines naiven Bayes-Klassifikators als Baseline

Ansätze, wenn keine gelabelten Daten vorliegen

Ansätze, wenn nur wenige gelabelte Daten zur Verfügung stehen

Datenaugmentierung

Embeddings als Nachschlagetabelle verwenden

Ein standardmäßiges Transformer-Modell feintunen

In-Context- und Few-Shot-Learning auf Basis von Prompts

Ungelabelte Daten nutzbar machen

Ein Sprachmodell feintunen

Einen Klassifikator feintunen

Fortgeschrittene Methoden

Zusammenfassung

10Transformer-Modelle von Grund auf trainieren

Große Datensätze und wie sie beschafft werden können

Herausforderungen beim Aufbau eines großen Korpus

Einen eigenen Codedatensatz erstellen

Mit großen Datensätzen arbeiten

Datensätze zum Hugging Face Hub hinzufügen

Erstellung eines Tokenizers

Das Tokenizer-Modell

Die Leistung eines Tokenizers beurteilen

Ein Tokenizer für die Programmiersprache Python

Einen Tokenizer trainieren

Einen selbst erstellten Tokenizer auf dem Hub speichern

Ein Modell von Grund auf trainieren

Verschiedene Pretraining-Objectives im Überblick

Das Modell initialisieren

Den Dataloader implementieren

Die Trainingsschleife einrichten

Der Trainingslauf

Ergebnisse und Analyse

Zusammenfassung

11Künftige Herausforderungen

Skalierung von Transformer-Modellen

Skalierungsgesetze

Herausforderungen bei der Skalierung

Attention Please! – Den Attention-Mechanismus effizienter gestalten

Sparse-Attention

Linearisierte Attention

Jenseits von Textdaten

Computer Vision

Tabellen

Multimodale Transformer

Speech-to-Text

Computer Vision und Text

Wie geht es weiter?

Index

Vorwort

Während Sie diese Zeilen lesen, geschieht ein Wunder: Die Schnörkel auf dieser Seite formen sich zu Wörtern, Konzepten und Emotionen, während sie sich ihren Weg durch Ihren Kortex bahnen. Meine Gedanken vom November 2021 sind nun erfolgreich in Ihr Gehirn eingedrungen. Sollte es ihnen gelingen, Ihre Aufmerksamkeit zu erregen und lange genug in dieser rauen und hart umkämpften Umgebung zu überleben, haben sie vielleicht sogar die Chance, sich weiter zu verbreiten, wenn Sie diese Gedanken mit anderen teilen. Dank der Sprache sind Gedanken zu übertragbaren und hochansteckenden Gehirnbakterien geworden – und ein Impfstoff ist nicht in Sicht.

Glücklicherweise sind die meisten Gehirnbakterien harmlos,1 und einige sind sogar überaus nützlich. Tatsächlich formen diese menschlichen Gehirnbakterien zwei unserer wertvollsten Schätze: Wissen und Kultur. So wie wir ohne gesunde Darmbakterien nicht richtig verdauen können, können wir ohne gesunde Gehirnbakterien nicht richtig denken. Die meisten Ihrer Gedanken stammen gar nicht von Ihnen: Sie sind in vielen anderen Gehirnen entstanden, gewachsen und haben sich entwickelt, bevor sie Sie infiziert haben. Wenn wir also intelligente Maschinen erschaffen möchten, müssen wir einen Weg finden, auch sie zu infizieren.

Die gute Nachricht ist, dass sich in den letzten Jahren ein weiteres Wunder ereignet hat: Dank mehrerer Durchbrüche auf dem Gebiet des Deep Learning wurden leistungsfähige Sprachmodelle hervorgebracht. Da Sie dieses Buch lesen, sind Ihnen wahrscheinlich schon einige erstaunliche Ausführungen dieser Sprachmodelle begegnet. So z.B. GPT-3, das nach einer kurzen Texteingabe (einem sogenannten Prompt) wie »ein Frosch trifft ein Krokodil« eine ganze Geschichte niederschreiben kann. Obwohl es noch nicht ganz Shakespeare ist, ist es manchmal schwer zu glauben, dass diese Texte von einem künstlichen neuronalen Netz geschrieben wurden. Tatsächlich hilft mir das Copilot-System von GitHub beim Schreiben dieser Zeilen: Sie werden nie erfahren, wie viel ich davon wirklich selbst verfasst habe.

Die Revolution geht weit über die Generierung von Texten hinaus. Sie umfasst den gesamten Bereich der maschinellen Verarbeitung natürlicher Sprache (engl. Natural Language Pocessing, NLP) – im Deutschen auch als Maschinelle Sprachverarbeitung oder Computerlinguistik (CL) bezeichnet –, von der Textklassifizierung bis zur automatischen Zusammenfassung von Texten, maschinellen Übersetzung, Beantwortung von Fragen, Chatbots, dem Verstehen natürlicher Sprache (engl. Natural Language Understanding, NLU) und mehr. Wo immer Sprache, gesprochener oder geschriebener Text vorkommt, gibt es eine Anwendung im NLP. Sie können bereits Ihr Telefon nach dem morgigen Wetter fragen, mit einem virtuellen Helpdesk-Assistenten chatten, um ein Problem zu beheben, oder aussagekräftige Ergebnisse von Suchmaschinen erhalten, die Ihre Anfrage wirklich zu verstehen scheinen. Doch diese Technologie ist so neu, dass uns das Beste wahrscheinlich erst noch bevorsteht.

Wie die meisten Fortschritte in der Wissenschaft beruht auch die jüngste Revolution im Bereich des NLP auf der harten Arbeit von Hunderten von unbesungenen Helden. Für den Erfolg sind allerdings drei wesentliche Faktoren ausschlaggebend:

Der

Transformer

ist eine Architektur für neuronale Netze, die im Jahr 2017 in einer bahnbrechenden Arbeit mit dem Titel »Attention Is All You Need« (

https://arxiv.org/abs/1706.03762

) von einem Team von Forschern von Google vorgeschlagen wurde. In nur wenigen Jahren hat sie sich durchgesetzt und die vorherigen Architekturen, die in der Regel auf rekurrenten neuronalen Netzen (engl. Recurrent Neural Networks, RNNs) basieren, verdrängt. Die Transformer-Architektur eignet sich hervorragend zur Erfassung von Mustern in langen Datensequenzen und zur Bewältigung riesiger Datensätze – so gut, dass ihr Einsatz inzwischen weit über den Bereich des NLP hinausgeht und beispielsweise auch in der Verarbeitung von Bildern (engl. Image Processing) Anwendung findet.

Im Rahmen der meisten Projekte können Sie auf keinen großen Datensatz, mit dem Sie ein Modell von Grund auf trainieren können, zugreifen. Glücklicherweise ist es oftmals möglich, ein Modell herunterzuladen, das bereits auf einem generischen Datensatz

vortrainiert

wurde: Sie müssen es dann nur noch auf Ihrem eigenen (bedeutend kleineren) Datensatz feintunen. Modelle vorzutrainieren, ist seit Anfang der 2010er-Jahre in der Bildverarbeitung gang und gäbe, im NLP beschränkte es sich jedoch auf kontextlose Worteinbettungen (d.h. dichtbesetzte [engl. dense] Vektordarstellungen einzelner Wörter). So hatte zum Beispiel das englische Wort »bear« die gleiche vortrainierte Einbettung (engl. Embedding) im Zusammenhang mit der Nutzung von »teddy bear«, also dem Plüschbären, und »to bear«, was so viel wie aushalten bzw. ertragen bedeutet. Im Jahr 2018 wurden dann in mehreren Veröffentlichungen vollwertige Sprachmodelle vorgeschlagen, die für eine Vielzahl von NLP-Aufgaben vortrainiert und feingetunt werden können. Dadurch änderte sich das gesamte Vorgehen grundlegend.

Sogenannte

Model Hubs

wie der von Hugging Face sind ebenfalls »Game-Changer«. Anfangs wurden fertig vortrainierte Modelle einfach irgendwo veröffentlicht, sodass es nicht einfach war, das geeignete Modell zu finden, das man benötigte. Murphys Gesetz sorgte dafür, dass PyTorch-Benutzer nur TensorFlow-Modelle ausfindig machen konnten, und umgekehrt. Und wenn man ein Modell gefunden hatte, war es nicht immer einfach, herauszufinden, wie man es feintunen konnte. Hier kommt die Transformers-Bibliothek von Hugging Face ins Spiel: Sie ist quelloffen, unterstützt sowohl TensorFlow als auch PyTorch und erlaubt es, ein hochmodernes, vortrainiertes Modell vom Hugging Face Hub herunterzuladen, es für Ihre Aufgabe zu konfigurieren, es auf Ihrem Datensatz feinzutunen und es zu evaluieren. Die Bibliothek findet zunehmend mehr Verwendung: Im vierten Quartal 2021 wurde sie von mehr als fünftausend Unternehmen und Einrichtungen genutzt und über vier Millionen Mal pro Monat mit dem Paketverwaltungsprogramm

pip

installiert. Darüber hinaus erweitern sich die Bibliothek und ihr Ökosystem über NLP hinaus, sodass inzwischen auch Bildverarbeitungsmodelle (engl. Image Processing) verfügbar sind. Ebenso können Sie zahlreiche Datensätze vom Hub herunterladen, mit denen Sie Ihre Modelle trainieren oder evaluieren können.

Was kann man sich also noch wünschen? Nun, dieses Buch! Es wurde von den Open-Source-Entwicklern von Hugging Face verfasst – einschließlich des Begründers der Transformers-Bibliothek – und das merkt man: Die Breite und Tiefe der Informationen, die Sie auf diesen Seiten finden, ist erstaunlich. Es deckt von der Transformer-Architektur selbst bis hin zur Transformers-Bibliothek und dem gesamten Ökosystem, das sie umgibt, alles ab. Besonders gut gefallen hat mir der praxisnahe Ansatz: Während Sie das Buch durcharbeiten, können Sie gleichzeitig den gesamten Code, der in Jupyter Notebooks vorliegt, direkt nachvollziehen und ausführen. Alle Codebeispiele sind direkt auf den Punkt gebracht und einfach zu verstehen. Die Autoren bringen langjährige Erfahrung im Trainieren sehr großer Transformer-Modelle mit und liefern eine Fülle von Tipps und Tricks, mit denen Sie alles effizient zum Laufen bringen. Und nicht zuletzt ist ihr Schreibstil geradlinig und lebendig: Es liest sich wie ein Roman.

Kurzum, ich habe dieses Buch sehr gerne gelesen und ich bin sicher, Sie werden ebenfalls Gefallen daran finden. Jeder, der an der Entwicklung von Produkten mit modernsten Sprachverarbeitungsfunktionen interessiert ist, sollte es lesen. Es ist randvoll mit all den nützlichen Gehirnbakterien!

Aurélien Géron

November 2021, Auckland (Neuseeland)

Einführung

Seit ihrer Einführung im Jahr 2017 haben sich Transformer-Modelle zum De-facto-Standard für die Bewältigung einer Vielzahl von Aufgaben im Bereich der natürlichen Sprachverarbeitung (engl. Natural Language Processing, NLP) sowohl in der Wissenschaft als auch in der Industrie entwickelt. Ohne dass Sie es bemerkt haben, haben Sie heute wahrscheinlich bereits mit einem Transformer interagiert: Google verwendet heutzutage das BERT-Modell, um die Suchanfragen der Nutzer besser zu verstehen und so die Suchmaschine zu verbessern. Auch die Modelle der GPT-Familie von OpenAI haben in den Mainstream-Medien wiederholt für Schlagzeilen gesorgt, weil sie in der Lage sind, wie von Menschen hervorgebrachte Texte und Bilder zu generieren.1 Mithilfe dieser Transformer-basierten Modelle werden Anwendungen wie GitHub’s Copilot (https://copilot.github.com) betrieben, die, wie in Abbildung 1-1 gezeigt, einen bloßen Kommentar in Quellcode umwandeln können, mit dem automatisch ein neuronales Netz (engl. Neural Network) für Sie erstellt wird!

Weshalb also haben Transformer das Gebiet fast über Nacht verändert? Wie bei vielen großen wissenschaftlichen Durchbrüchen handelte es sich um die Synthese mehrerer Ideen, wie Attention, Transfer Learning und der Skalierung neuronaler Netze, die zu dieser Zeit in der Forschungsgemeinschaft kursierten.

Aber wie nützlich sie auch sein mögen – um in der Industrie Fuß zu fassen, braucht jede ausgefallene neue Methode Werkzeuge, die sie zugänglich machen. Die 2 Transformers-Bibliothek (https://oreil.ly/Z79jF) und das sie umgebende Ökosystem sind genau darauf ausgerichtet und erleichtern Praktikern, Modelle zu verwenden, zu trainieren und sie mit anderen zu teilen. Dies hat die Verbreitung von Transformer-Modellen stark begünstigt, und die Bibliothek wird heute von über fünftausend Unternehmen und Einrichtungen genutzt. In diesem Buch zeigen wir Ihnen, wie Sie diese Modelle für praktische Anwendungen trainieren und optimieren können.

Abbildung 1-1: Ein Beispiel für GitHub’s Copilot-System, das infolge einer kurzen Beschreibung der Aufgabe einen Vorschlag für die gesamte Klasse liefert (alles, was auf class folgt, wurde automatisch generiert)

An wen richtet sich dieses Buch?

Dieses Buch richtet sich an Data Scientists und Machine Learning Engineers, die vielleicht schon von den jüngsten Durchbrüchen mit Transformern gehört haben, denen aber ein detaillierter Leitfaden fehlt, um diese Modelle an ihre eigenen Anwendungsfälle anzupassen. Das Buch ist nicht als Einführung in das Machine Learning zu verstehen. Wir gehen davon aus, dass Sie mit der Programmierung in Python vertraut sind und ein grundlegendes Verständnis von Deep-Learning-Frameworks wie PyTorch (https://pytorch.org) oder TensorFlow (https://www.tensorflow.org) haben. Wir gehen auch davon aus, dass Sie einige praktische Erfahrungen mit dem Trainieren von Modellen auf GPUs besitzen. Obwohl sich das Buch auf die PyTorch-API der Transformers-Bibliothek konzentriert, zeigen wir Ihnen in Kapitel 2, wie Sie alle Beispiele in TensorFlow überführen können.

Die folgenden Ressourcen bieten Ihnen eine gute Grundlage für die in diesem Buch behandelten Themen. Wir gehen davon aus, dass Ihr Kenntnisstand in etwa auf deren Niveau liegt:

Praxiseinstieg Machine Learning mit Scikit-Learn, Keras und TensorFlow

von Aurélien Géron (O’Reilly)

Deep Learning for Coders with fastai and PyTorch

von Jeremy Howard und Sylvain Gugger (O’Reilly)

Natural Language Processing mit PyTorch

von Delip Rao und Brian McMahan (O’Reilly)

Der Onlinekurs von Hugging Face (

https://oreil.ly/n3MaR

) des Open-Source-Teams von Hugging Face, auch auf Deutsch unter

https://huggingface.co/course/de/

Was Sie lernen werden

Das Ziel dieses Buchs ist es, Sie in die Lage zu versetzen, Ihre eigenen Sprachanwendungen zu erstellen. Zu diesem Zweck konzentriert es sich auf praktische Anwendungsfälle und geht nur dort auf die theoretischen Aspekte ein, wo es notwendig ist. Der Ansatz des Buchs ist praxisorientiert, und wir empfehlen Ihnen dringend, die Codebeispiele selbst auszuprobieren.

Das Buch deckt alle wichtigen Anwendungen von Transformern im NLP ab, wobei jedes Kapitel (mit wenigen Ausnahmen) einer bestimmten Aufgabenstellung, verbunden mit einem realistischen Anwendungsfall und Datensatz, gewidmet ist. In jedem Kapitel werden außerdem einige zusätzliche Konzepte vorgestellt. Hier ist ein Überblick über die behandelten Aufgabenstellungen (engl. Tasks) und Themen:

Kapitel 1

,

Hallo Transformer

, stellt Transformer vor und ordnet sie in den Kontext ein. Außerdem wird eine Einführung in das Hugging-Face-Ökosystem gegeben.

Kapitel 2

,

Textklassifizierung

, konzentriert sich auf die Sentiment- bzw. Stimmungsanalyse – engl. Sentiment Analysis – (ein gängiges Textklassifizierungsproblem) und stellt die

Trainer

-Klasse vor.

Kapitel 3

,

Die Anatomie von Transformer-Modellen

, geht näher auf die Transformer-Architektur ein, um Sie auf die folgenden Kapitel vorzubereiten.

Kapitel 4

,

Multilinguale Named Entity Recognition

, konzentriert sich auf die Identifizierung von Entitäten bzw. Eigennamen in verschiedensprachigen Texten (eine Problemstellung im Rahmen der Klassifizierung von Tokens).

Kapitel 5

,

Textgenerierung

, untersucht die Fähigkeit von Transformer-Modellen, Text zu generieren, und stellt Decodierungsstrategien und Maße zur Beurteilung der Qualität vor.

Kapitel 6

,

Automatische Textzusammenfassung (Summarization)

, befasst sich mit der komplexen Sequence-to-Sequence-Aufgabe der Textzusammenfassung und erläutert die für diese Aufgabe verwendeten Maße.

Kapitel 7

,

Question Answering

, konzentriert sich auf den Aufbau eines rezensionsbasierten Fragebeantwortungssystems und stellt das Retrieval mit Haystack vor.

Kapitel 8

,

Effizientere Transformer-Modelle für die Produktion

, befasst sich mit der Leistungsfähigkeit der Modelle. Wir werden die Aufgabe der Intentionserkennung – engl. Intent Detection – (eine Art von Sequenzklassifzierungsproblem) betrachten und Techniken wie Knowledge Distillation, Quantisierung und Pruning untersuchen.

Kapitel 9

,

Ansätze bei wenig bis gar keinen zur Verfügung stehenden gelabelten Daten

, zeigt Möglichkeiten zur Verbesserung der Modellleistung auf, wenn keine großen Mengen an gelabelten Daten zur Verfügung stehen. Wir werden einen GitHub Issues Tagger erstellen und Techniken wie Zero-Shot-Klassifikation und Datenerweiterung (engl. Data Augmentation) untersuchen.

Kapitel 10

,

Transformer-Modelle von Grund auf trainieren

, zeigt Ihnen, wie Sie ein Modell für die automatische Vervollständigung von Python-Quellcode von Grund auf erstellen und trainieren können. Wir befassen uns mit dem Streaming von Datensätzen und dem Training von Modellen in großem Maßstab und erstellen unseren eigenen Tokenizer.

Kapitel 11

,

Künftige Herausforderungen

, untersucht die Herausforderungen, mit denen Transformer konfrontiert sind, und einige der spannenden neuen Richtungen, die die Forschung in diesem Bereich einschlägt.

Die Transformers-Bibliothek bietet mehrere Abstraktionsebenen für die Verwendung und das Training von Transformer-Modellen. Wir beginnen mit den benutzerfreundlichen Pipelines, die es uns ermöglichen, Textbeispiele durch die Modelle zu leiten und die Vorhersagen mit nur wenigen Codezeilen zu ermitteln. Anschließend befassen wir uns mit Tokenizern, Modellklassen und der Trainer-Klasse, mit der wir Modelle für unsere eigenen Anwendungsfälle trainieren können. Später werden wir Ihnen zeigen, wie Sie die Trainer-Klasse durch die Accelerate-Bibliothek ersetzen können, die uns die volle Kontrolle über die Trainingsschleife gibt und es uns ermöglicht, große Transformer-Modelle komplett von Grund auf zu trainieren! Jedes Kapitel ist weitgehend in sich abgeschlossen, wobei der Schwierigkeitsgrad der Aufgaben in den späteren Kapiteln zunimmt. Aus diesem Grund empfehlen wir, mit den Kapiteln 1 und 2 zu beginnen, bevor Sie sich dem Thema zuwenden, das Sie am meisten interessiert.

Neben der Transformers- und der Accelerate-Bibliothek werden wir auch ausgiebig von der Datasets-Bibliothek Gebrauch machen, die sich nahtlos in andere Bibliotheken integrieren lässt. Die Datasets-Bibliothek bietet ähnliche Funktionen für die Datenverarbeitung wie Pandas, ist jedoch von Grund auf für die Verarbeitung großer Datenmengen und Machine Learning (bzw. maschinelles Lernen) konzipiert.

Mit diesen Tools haben Sie alles, was Sie benötigen, um fast jede Herausforderung im Bereich des NLP zu meistern!

Software- und Hardwareanforderungen

Aufgrund des praxisorientierten Ansatzes dieses Buchs empfehlen wir Ihnen dringend, die Codebeispiele auszuführen, während Sie die einzelnen Kapitel lesen. Da wir es mit Transformern zu tun haben, benötigen Sie Zugang zu einem Computer mit einer NVIDIA-GPU, um diese Modelle trainieren zu können. Glücklicherweise gibt es online mehrere kostenlose Optionen, die Sie nutzen können, u. a.:

Google Colaboratory (

https://oreil.ly/jyXgA

)

Kaggle Notebooks (

https://oreil.ly/RnMP3

)

Paperspace Gradient Notebooks (

https://oreil.ly/mZEKy

)

Um die Beispiele ausführen zu können, müssen Sie die Installationsanleitung befolgen, die wir im GitHub-Repository des Buchs bereitstellen. Sie finden die Anleitung und die Codebeispiele unter https://github.com/nlp-with-transformers/notebooks.

Wir haben die meisten Kapitel mit NVIDIA Tesla P100 GPUs entwickelt, die über 16 GB an Speicher verfügen. Einige der freien Plattformen bieten GPUs mit einem geringeren Speicher an, sodass Sie beim Trainieren der Modelle möglicherweise die Batchgröße verringern müssen.

In diesem Buch verwendete Konventionen

Die folgenden typografischen Konventionen werden in diesem Buch verwendet:

Kursiv

Kennzeichnet neue Begriffe, URLs, E-Mail-Adressen, Dateinamen und Dateiendungen.

Konstante Zeichenbreite

Wird für Programmlistings und für Programmelemente in Textabschnitten wie Namen von Variablen und Funktionen, Datenbanken, Datentypen, Umgebungsvariablen, Anweisungen und Schlüsselwörter verwendet.

Konstante Zeichenbreite, fett

Kennzeichnet Befehle oder anderen Text, den der Nutzer wörtlich eingeben sollte.

Konstante Zeichenbreite, kursiv

Kennzeichnet Text, den der Nutzer je nach Kontext durch entsprechende Werte ersetzen sollte.

Tipp

Dieses Symbol steht für einen Tipp oder eine Empfehlung.

Hinweis

Dieses Symbol steht für einen allgemeinen Hinweis.

Warnung

Dieses Symbol warnt oder mahnt zur Vorsicht.

Verwenden von Codebeispielen

Zusätzliche Materialien (Codebeispiele, Übungen usw.) können Sie unter https://github.com/nlp-with-transformers/notebooks herunterladen.

Wir haben eine Webseite für dieses Buch, auf der wir Errata, Beispiele und zusätzliche Informationen veröffentlichen. Sie können diese Seite unter https://www.oreilly.com/library/view/natural-language-processing/9781098136789/ aufrufen.

Dieses Buch dient dazu, Ihnen bei der Erledigung Ihrer Arbeit zu helfen. Im Allgemeinen dürfen Sie die Codebeispiele aus diesem Buch in Ihren eigenen Programmen und der dazugehörigen Dokumentation verwenden. Sie müssen uns dazu nicht um Erlaubnis bitten, solange Sie nicht einen beträchtlichen Teil des Codes reproduzieren. Beispielsweise benötigen Sie keine Erlaubnis, um ein Programm zu schreiben, in dem mehrere Codefragmente aus diesem Buch vorkommen. Wollen Sie dagegen eine CD-ROM mit Beispielen aus Büchern von O’Reilly verkaufen oder verbreiten, benötigen Sie eine Erlaubnis. Eine Frage zu beantworten, indem Sie aus diesem Buch zitieren und ein Codebeispiel wiedergeben, benötigt keine Erlaubnis. Eine beträchtliche Menge Beispielcode aus diesem Buch in die Dokumentation Ihres Produkts aufzunehmen, bedarf hingegen unserer ausdrücklichen Zustimmung.

Wir freuen uns über Zitate, verlangen diese aber nicht. Ein Zitat enthält Titel, Autor, Verlag und ISBN. Beispiel: » Natural Language Processing mit Transformern von Lewis Tunstall, Leandro von Werra und Thomas Wolf (O’Reilly). Copyright 2023 dpunkt.verlag, ISBN 978-3-96009-202-5.«

Wenn Sie glauben, dass Ihre Verwendung von Codebeispielen über die übliche Nutzung hinausgeht oder außerhalb der oben vorgestellten Nutzungsbedingungen liegt, kontaktieren Sie uns bitte unter [email protected].

Danksagungen

Das Schreiben eines Buchs über einen der sich am schnellsten entwickelnden Bereiche des maschinellen Lernens wäre ohne die Hilfe vieler Menschen nicht möglich gewesen. Wir danken dem wunderbaren O’Reilly-Team und insbesondere Melissa Potter, Rebecca Novack und Katherine Tozer für ihre Unterstützung und Beratung. Das Buch hat auch von großartigen Fachgutachtern profitiert, die unzählige Stunden damit verbracht haben, uns unschätzbares Feedback zu geben. Besonders dankbar sind wir Luca Perozzi, Hamel Husain, Shabie Iqbal, Umberto Lupo, Malte Pietsch, Timo Möller und Aurélien Géron für ihre ausführlichen Rezensionen. Wir danken Branden Chan von deepset (https://www.deepset.ai) für seine Hilfe bei der Erweiterung der Haystack-Bibliothek zur Unterstützung des Anwendungsfalls in Kapitel 7. Die wunderschönen Illustrationen in diesem Buch verdanken wir der fantastischen Christa Lanz (https://christalanz.ch) – vielen Dank, dass Sie dieses Buch zu etwas ganz Besonderem gemacht haben. Wir hatten auch das Glück, die Unterstützung des gesamten Hugging-Face-Teams zu erhalten. Vielen Dank an Quentin Lhoest für die Beantwortung zahlloser Fragen zur Datasets-Bibliothek, an Lysandre Debut für seine Hilfe bei allem, was mit dem Hugging Face Hub zu tun hat, an Sylvain Gugger für seine Hilfe im Zusammenhang mit der Accelerate-Bibliothek und an Joe Davison für seine Inspiration zu Kapitel 9 in Bezug auf Zero-Shot-Learning. Wir danken auch Sidd Karamcheti und dem gesamten Mistral-Team (https://oreil.ly/aOYLt) für die Stabilitätsverbesserungen für GPT-2, die Kapitel 10 möglich machten. Dieses Buch wurde vollständig in Jupyter Notebooks verfasst, und wir danken Jeremy Howard und Sylvain Gugger für die Entwicklung von wunderbaren Tools wie fastdoc (https://oreil.ly/yVCfT), die dies ermöglicht haben.

Lewis

Sofia, ich danke dir für deine ständige Unterstützung und Ermutigung – sonst würde es dieses Buch nicht geben. Nach der langen Zeit des Schreibens können wir endlich wieder unsere Wochenenden genießen!

Leandro

Janine, ich danke dir für deine Geduld und deine ermutigende Unterstützung während dieses langen Jahrs mit vielen langen Nächten und arbeitsreichen Wochenenden.

Thomas

Ich möchte vor allem Lewis und Leandro dafür danken, dass sie die Idee zu diesem Buch hatten und sich dafür stark gemacht haben, es in einem so schönen und zugänglichen Format zu veröffentlichen. Ich möchte auch dem gesamten Team von Hugging Face dafür danken, dass es an die Mission von KI als gemeinschaftliche Leistung glaubt, und der gesamten NLP-/KI-Community dafür, dass sie die Bibliotheken und die Forschung, die wir in diesem Buch beschreiben, gemeinsam mit uns aufgebaut und genutzt hat.

Mehr als das, was wir aufbauen, ist die Reise selbst, die wir unternehmen, was wirklich zählt. Wir haben das Privileg, heute diesen Weg mit Tausenden von Community-Mitgliedern und Lesern wie Ihnen zu gehen. Wir danken Ihnen allen aus tiefstem Herzen.

KAPITEL 1

Hallo Transformer

Im Jahr 2017 veröffentlichten Forscher von Google einen Artikel, der eine neuartige neuronale Netzwerkarchitektur für die Modellierung von Sequenzen vorschlug.1 Diese als Transformer bezeichnete Architektur übertraf rekurrente neuronale Netze (engl. Recurrent Neural Networks, RNNs) bei maschinellen Übersetzungsaufgaben sowohl in Bezug auf die Übersetzungsqualität als auch auf die Trainingskosten.

Gleichzeitig wurde mit einem effektiven Transfer-Learning-Verfahren namens ULMFiT gezeigt, dass durch das Training von LSTM-Netzwerken (Long Short-Term Memory) auf einem sehr großen und vielfältigen Korpus hochmoderne Textklassifikatoren erstellt werden können, die nur wenige gelabelte Daten erfordern.2

Diese Fortschritte bildeten die Grundlage für zwei der heute bekanntesten Transformer-Modelle: zum einen dem Generative Pretrained Transformer (GPT)3 und zum anderen Bidirectional Encoder Representations from Transformers (BERT)4. Durch die Kombination der Transformer-Architektur mit unüberwachtem Lernen (engl. Unsupervised Learning) machten diese Modelle das Training aufgabenspezifischer Architekturen, die von Grund auf trainiert werden müssen, überflüssig und brachen fast jede Benchmark im NLP-Bereich mit deutlichem Abstand. Seit der Veröffentlichung von GPT und BERT ist eine beträchtliche Sammlung (im Englischen als Model Zoo bezeichnet) von Transformer-Modellen entwickelt worden. Die chronologische Entwicklung mit den wichtigsten Fortschritten können Sie in Abbildung 1-1 nachvollziehen.

Abbildung 1-1: Chronologische Entwicklung von Transformer-Modellen

Doch greifen wir nicht zu weit vor. Um zu verstehen, was das Neue an Transformer-Modellen ist, müssen wir zunächst einige Begrifflichkeiten erläutern:

das Encoder-Decoder-Framework

den Attention-Mechanismus

Transfer Learning

In diesem Kapitel stellen wir Ihnen die grundlegenden Konzepte vor, die für die weite Verbreitung von Transformern verantwortlich sind, und werfen einen Blick auf die Aufgaben, für die sich diese besonders eignen.

Lassen Sie uns zunächst das Encoder-Decoder-Framework und die Architekturen erkunden, die der Entwicklung von Transformer-Modellen vorausgingen.

Das Encoder-Decoder-Framework

Im Bereich des Natural Language Processing (NLP) galten vor den Transformern rekurrente Architekturen wie LSTMs als State of the Art. Diese Architekturen enthalten eine Rückkopplungsschleife in den Netzwerkverbindungen, die es ermöglicht, Informationen von einem Schritt zum nächsten weiterzugeben – dadurch eignen sie sich ideal für die Modellierung sequenzieller Daten wie Texte. Wie auf der linken Seite von Abbildung 1-2 dargestellt, empfängt ein RNN eine Eingabe bzw. einen Input (z.B. ein Wort oder ein Zeichen), leitet sie durch das Netzwerk und gibt einen Vektor aus, den sogenannten Hidden State bzw. verborgenen Zustand (auch verdeckter Zustand genannt). Gleichzeitig gibt das Modell über die Rückkopplungsschleife einige Informationen an sich selbst zurück, die es dann im nächsten Schritt verwenden kann. Das wird noch deutlicher, wenn wir die Schleife weiter »aufdröseln« bzw. in zeitlicher Hinsicht desaggregieren, wie auf der rechten Seite von Abbildung 1-2 gezeigt: Das RNN gibt in jedem Schritt Informationen über seinen Zustand an die nächste Operation in der Sequenz weiter. Auf diese Weise kann ein RNN die Informationen aus den vorangegangenen Schritten berücksichtigen und sie für seine Vorhersagen nutzen.

Abbildung 1-2: Zeitliche Desaggregation eines RNN

Diese Architekturen wurden (und werden) häufig für Aufgaben im Bereich des NLP, der Sprachverarbeitung (engl. Speech Processing) und für Zeitreihenanalysen verwendet. Eine wunderbare Übersicht, die Ihnen ein Bild davon vermittelt, wozu sie in der Lage sind, finden Sie in dem von Andrej Karpathy verfassten Blogbeitrag »The Unreasonable Effectiveness of Recurrent Neural Networks« (https://oreil.ly/Q55o0).

Ein Bereich, in dem RNNs eine wichtige Rolle spielten, war die Entwicklung von maschinellen Übersetzungssystemen. Bei diesen geht es darum, eine Folge von Wörtern aus einer Sprache in eine andere zu überführen. Diese Art von Aufgabe wird normalerweise mit einer Encoder-Decoder- bzw. einer Sequence-to-Sequence-Architektur5 bewältigt, die sich gut für Situationen eignet, in denen sowohl die Eingabe (engl. Input) als auch die Ausgabe (engl. Output) Sequenzen beliebiger Länge darstellen. Die Aufgabe des Encoders ist es, die Informationen aus der Eingabesequenz in eine numerische Darstellung zu codieren, die oft als letzter verborgener Zustand (engl. Last Hidden State) bezeichnet wird. Dieser Zustand wird anschließend an den Decoder weitergegeben, der die Ausgabesequenz erzeugt.

Im Allgemeinen können die Encoder- und Decoder-Komponenten jede Art von neuronaler Netzwerkarchitektur sein, mit der sich Sequenzen modellieren lassen. In dem Beispiel in Abbildung Abbildung 1-3 werden z.B. mehrere RNNs verwendet, um für den englischen Satz »Transformers are great!« (der als verborgener Zustandsvektor codiert und dann decodiert wird) die deutsche Übersetzung »Transformer sind grossartig!« zu erzeugen. Die eingegebenen Wörter werden nacheinander durch den Encoder geleitet und die ausgegebenen Wörter – jeweils eines nach dem anderen, d.h. von oben nach unten – erzeugt.

Abbildung 1-3: Eine Encoder-Decoder-Architektur mit mehreren RNNs (in der Regel gibt es bedeutend mehr rekurrente Schichten bzw. Layer als hier dargestellt)

Obwohl sie in ihrer Einfachheit elegant ist, besteht eine Schwäche dieser Architektur darin, dass der verborgene Endzustand des Encoders einen Informationsengpass darstellt: Er muss die Bedeutung der gesamten Eingabesequenz repräsentieren bzw. abbilden, da dies alles ist, worauf der Decoder bei der Erzeugung der Ausgabe zugreifen kann. Das ist vor allem bei langen Sequenzen eine Herausforderung, da Informationen, die am Anfang der Sequenz enthalten sind, bei der Komprimierung auf eine einzelne, starre Darstellung verloren gehen können.

Glücklicherweise gibt es einen Weg, diesen Engpass zu umgehen, indem der Decoder Zugriff auf alle verborgenen Zustände des Encoders erhält. Der grundlegende Ansatz für diese Lösung heißt Attention6, der eine Schlüsselkomponente in vielen modernen neuronalen Netzwerkarchitekturen darstellt. Wenn wir nachvollziehen, wie der Attention-Mechanismus in RNNs implementiert wurde, können wir einen der wichtigsten Bausteine der Transformer-Architektur besser verstehen. Werfen wir einen genaueren Blick darauf.

Der Attention-Mechanismus

Die Hauptidee hinter Attention ist, dass der Encoder nicht nur einen einzigen verborgenen Zustand für die Eingabesequenz erzeugt, sondern bei jedem Schritt einen verborgenen Zustand (engl. Hidden State) ausgibt, auf den der Decoder zugreifen kann. Würden jedoch alle Zustände gleichzeitig verwendet, würde der Decoder eine sehr große Eingabe erhalten, sodass ein Mechanismus erforderlich ist, um Prioritäten bei der Verwendung der Zustände zu setzen. Hier kommt Attention ins Spiel: Der Decoder kann jedem der Encoderzustände bei jedem Decodierschritt eine andere Gewichtung zuweisen bzw. »Aufmerksamkeit« schenken. Dieser Prozess wird in Abbildung 1-4 veranschaulicht, wo gezeigt wird, welche Rolle die Attention für die Vorhersage des zweiten Tokens in der Ausgabesequenz einnimmt.

Abbildung 1-4: Eine Encoder-Decoder-Architektur mit Attention-Mechanismus für mehrere RNNs

Indem sie sich darauf konzentrieren, welche der eingegebenen Tokens zu jedem Zeitpunkt (also Schritt) am relevantesten sind, sind diese auf Attention basierenden Modelle in der Lage, nicht-triviale Zuordnungen zwischen den Wörtern in einer generierten Übersetzung und denen in einem Ausgangssatz zu lernen. In Abbildung 1-5 werden zum Beispiel die Attention-Gewichte für ein Modell, das Übersetzungen vom Englischen ins Französische vornimmt, dargestellt, wobei jedes Pixel einem Gewicht entspricht. Die Abbildung zeigt, wie der Decoder in der Lage ist, die Wörter »zone« und »Area«, die in den beiden Sprachen unterschiedlich angeordnet sind, korrekt zuzuordnen.

Abbildung 1-5: Zuordnung der Wörter zwischen einem englischen Ausgangstext und der generierten Übersetzung ins Französische eines Encoder-Decoder-Modells auf Basis von RNNs (mit freundlicher Genehmigung von Dzmitry Bahdanau)

Obwohl infolge der Verwendung von Attention bedeutend bessere Übersetzungen erzielt werden konnten, gab es bei der Verwendung von rekurrenten Modellen als Encoder und Decoder einen großen Nachteil: Die Berechnungen sind von Natur aus sequenziell und können nicht für die gesamte Eingabesequenz parallelisiert werden.

Mit dem Transformer wurde ein neues Modellierungsparadigma eingeführt: Bei dieser Architektur wird auf die Rekursion verzichtet und stattdessen vollständig auf eine besondere Form von Attention, der sogenannten Self-Attention, zurückgegriffen. Was Self-Attention genau ist, werden wir noch in Kapitel 3 erläutern. Die Grundidee hierbei ist, dass die Attention auf alle Zustände derselben Schicht des neuronalen Netzes operieren kann. Dies können Sie in Abbildung 1-6 nachvollziehen, wo sowohl der Encoder als auch der Decoder ihre eigenen Self-Attention-Mechanismen haben, deren Ausgaben in neuronale Feed-Forward-Netze (engl. Feed-Forward Neural Networks) eingespeist werden. Diese Architektur kann bedeutend schneller trainiert werden als rekurrente Modelle und ebnete vielen der jüngsten Durchbrüche im NLP den Weg.

Abbildung 1-6: Encoder-Decoder-Architektur des ursprünglichen Transformers

In dem ursprünglichen Artikel zu Transformer-Modellen wurde das Übersetzungsmodell anhand eines großen Korpus von Satzpaaren, die in verschiedenen Sprachen vorliegen, von Grund auf trainiert. In vielen Fällen, in denen NLP in der Praxis zum Einsatz kommt, gibt es jedoch keine große Menge an gelabelten Textdaten, mit denen wir unsere Modelle trainieren könnten. Um die Transformer-Revolution vollends in Gang zu setzen, fehlte daher noch ein letzter Baustein: Transfer Learning.

Einsatz von Transfer Learning im NLP

Im Bereich der Computer Vision (computerbasiertes Sehen) ist es heutzutage üblich, ein Convolutional Neural Network (CNN, auch neuronales Konvolutionsnetz genannt) wie ResNet mithilfe von Transfer Learning für eine Aufgabe zu trainieren und es dann an eine neue Aufgabe anzupassen bzw. es für diese feinzutunen (engl. fine-tune). Auf diese Weise kann das Netz das Wissen nutzen, das es bei der ursprünglichen Aufgabe gelernt hat. Architektonisch bedeutet dies, dass das Modell in einen Body (bzw. Körper) und einen Head (bzw. Kopf) aufgeteilt wird, wobei der Head ein aufgabenspezifisches Netz darstellt. Während des Trainings lernt der Body mittels seiner Gewichte allgemeine Merkmale (engl. Features) der Ausgangsdomäne. Diese Gewichte werden verwendet, um ein neues Modell, das für die neue Aufgabe bestimmt ist, zu initialisieren.7 Im Vergleich zum traditionellen überwachten Lernen (engl. Supervised Learning) führt dieser Ansatz in der Regel zu qualitativ hochwertigen Modellen, die bedeutend effizienter für eine Vielzahl von nachgelagerten Aufgaben (engl. Downstream Tasks) und mit weit weniger gelabelten Daten trainiert werden können. Einen Vergleich der beiden Ansätze finden Sie in Abbildung 1-7.

Abbildung 1-7: Vergleich von traditionellem Supervised Learning (links) und Transfer Learning (rechts)

In der Computer Vision werden die Modelle zunächst auf großen Datensätzen wie ImageNet (https://image-net.org) trainiert, die Millionen von Bildern enthalten. Dieser Vorgang wird als Pretraining (bzw. Vortraining) bezeichnet und dient vor allem dazu, den Modellen die grundlegenden Merkmale von Bildern, wie Kanten oder Farben, beizubringen. Diese vortrainierten Modelle können dann für eine nachgelagerte Aufgabe, wie z.B. die Klassifizierung von Blumenarten, mit einer relativ kleinen Anzahl von gelabelten Beispielen (in der Regel einige Hundert pro Kategorie) feingetunt werden. Solche (im Rahmen des Feintunings) optimierten Modelle erreichen in der Regel eine höhere Treffergenauigkeit (engl. Accuracy) als überwachte Modelle, die mit der gleichen Menge an gelabelten Daten von Grund auf trainiert wurden.

Obwohl sich das Transfer Learning in der Computer Vision durchgesetzt hat, war lange Zeit nicht klar, wie das entsprechende Pretraining beim NLP gestaltet sein sollte. Dementsprechend benötigten NLP-Anwendungen in der Regel große Mengen an gelabelten Daten, um eine hohe Leistungsfähigkeit zu erreichen. Allerdings war selbst dann die Leistung nicht vergleichbar mit dem, was im Bereich Computer Vision erreicht werden konnte.

In den Jahren 2017 und 2018 wurden neue Ansätze von verschiedenen Forschungsgruppen vorgeschlagen, die schließlich dazu führten, dass Transfer Learning auch für das NLP nutzbar gemacht werden konnte. Es begann damit, dass Forscher bei OpenAI erkannten, dass eine starke Leistung bei einer Sentiment-Klassifizierungsaufgabe erzielt wurde, indem sie Features verwendeten, die im Rahmen eines unüberwachten Pretrainings gewonnen wurden.8 Im Anschluss folgte ULMFiT, mit dem ein allgemeiner Rahmen für die Verwendung vortrainierter LSTM-Modelle für verschiedene Aufgaben geschaffen wurde.9

Wie in Abbildung 1-8 dargestellt, umfasst ULMFiT drei Hauptschritte:

Pretraining

Das anfängliche Ziel des Trainings ist ganz einfach: das nächste Wort auf der Grundlage der vorherigen Wörter vorherzusagen. Diese Aufgabe wird als Sprachmodellierung (engl. Language Modeling) bezeichnet. Die Eleganz dieses Ansatzes liegt darin, dass keine gelabelten Daten benötigt werden und auf reichlich vorhandenen Text aus Quellen wie Wikipedia zurückgegriffen werden kann.10

Domänenadaption (engl. Domain Adaptation)

Sobald das Sprachmodell auf ein großes Korpus vortrainiert wurde, wird es im nächsten Schritt auf ein domänenspezifisches Korpus übertragen (z.B. von Wikipedia auf das IMDb-Korpus, das Filmrezensionen enthält, wie in Abbildung 1-8 dargestellt). Zwar wird auch in diesem Schritt auf die Sprachmodellierung zurückgegriffen, allerdings muss das Modell in diesem Zusammenhang das nächste Wort im Zielkorpus vorhersagen.

Feintuning (engl. Fine-tuning)

In diesem Schritt wird das Sprachmodell mit einer (zusätzlichen) Klassifizierungsschicht bzw. einem Klassifizierungslayer für die Zielaufgabe (engl. Target Task) feingetunt (z.B. zur Klassifizierung des Sentiments bzw. der Polarität von Filmrezensionen in Abbildung 1-8).

Abbildung 1-8: Das Vorgehen bei ULMFiT (mit freundlicher Genehmigung von Jeremy Howard)

Die Einführung von ULMFiT bot somit einen praktikablen Rahmen für das Pretraining und die Anwendung von Transfer Learning im Bereich des NLP und lieferte damit das fehlende Puzzleteil, um Transformern zum Durchbruch zu verhelfen. Im Jahr 2018 wurden zwei Transformer-Modelle veröffentlicht, bei denen Self-Attention mit Transfer Learning kombiniert wurde:

GPT

Verwendet nur den Decoder-Teil der Transformer-Architektur und denselben Sprachmodellierungsansatz wie ULMFiT. GPT wurde mithilfe des BookCorpus-Datensatzes11 vortrainiert, der aus 7.000 unveröffentlichten Büchern aus verschiedenen Genres wie Abenteuer, Fantasy und Romantik besteht.

BERT

Verwendet den Encoder-Teil der Transformer-Architektur und eine spezielle Form der Sprachmodellierung, die als Masked Language Modeling bezeichnet wird. Das Ziel dieses Ansatzes besteht darin, in einem Text Wörter vorherzusagen, die zufällig maskiert bzw. verdeckt wurden. Bei einem Satz wie »Ich habe auf meine [MASK] geschaut und gesehen, dass sich [MASK] verspätet hat.« muss das Modell jeweils die wahrscheinlichsten Kandidaten für die maskierten Wörter, die durch [MASK] gekennzeichnet sind, vorhersagen. BERT wurde auf dem BookCorpus-Datensatz und der englischsprachigen Wikipedia vortrainiert.

Sowohl GPT als auch BERT haben den Stand der Technik (State of the Art) in einer Reihe von NLP-Benchmarks neu gesetzt und das Zeitalter der Transformer-Modelle eingeläutet.

Da jedoch verschiedene Forschungseinrichtungen ihre Modelle in inkompatiblen Frameworks (PyTorch oder TensorFlow) veröffentlichten, war es für NLP-Praktikerinnen und -Praktiker nicht immer einfach, diese Modelle auf ihre eigenen Anwendungen zu übertragen. Mit der Veröffentlichung der Transformers-Bibliothek (https://oreil.ly/Z79jF) wurde nach und nach eine einheitliche Programmierschnittstelle (API) für mehr als 50 Architekturen entwickelt. Dank dieser Bibliothek wurde die Forschung im Bereich von Transformer-Modellen explosionsartig vorangetrieben, und die Praktikerinnen und Praktiker im Bereich NLP konnten diese Modelle innerhalb kurzer Zeit auf einfache Weise in viele reale Anwendungen integrieren. Lassen Sie uns einen Blick darauf werfen!

Die Transformers-Bibliothek von Hugging Face: die Lücke schließen

Eine neue Machine-Learning-Architektur auf eine neue Aufgabe anzuwenden, kann ein komplexes Unterfangen sein und umfasst in der Regel die folgenden Schritte:

Die Modellarchitektur als Code zu implementieren, typischerweise auf Basis von PyTorch oder TensorFlow.

Die vortrainierten Gewichte (falls verfügbar) von einem Server zu laden.

Die Eingaben (engl. Inputs) vorzuverarbeiten (engl. Preprocessing), sie durch das Modell laufen zu lassen und je nach Aufgabe, die verfolgt wird, nachzuverarbeiten (engl. Postprocessing).

Die Objekte, mit denen sich die Daten laden lassen, sogenannte Dataloader, zu implementieren und die Verlustfunktionen und den Optimizer bzw. den Optimierungsalgorithmus, die zum Trainieren des Modells verwendet werden, zu bestimmen.

Je nach Modell und Aufgabe sind jeweils verschiedenartige Schritte erforderlich. Wenn Forschungsgruppen einen neuen Artikel veröffentlichen, geben sie üblicherweise (aber nicht immer!) auch den Code zusammen mit der Modellgewichtung frei. Der Code ist jedoch selten standardisiert, und es erfordert oft tagelange Entwicklungsarbeit, ehe er so angepasst ist, dass er für neue Anwendungsfälle verwendet werden kann.

Genau an diesem Punkt kommt die Transformers-Bibliothek den NLP-Anwenderinnen und -Anwendern zu Hilfe! Sie bietet eine standardisierte Schnittstelle zu einer breiten Palette von Transformer-Modellen sowie Code und Tools, mit denen sich die Modelle auf neue Anwendungsfälle übertragen lassen. Die Bibliothek unterstützt derzeit drei wichtige Deep-Learning-Frameworks (PyTorch, TensorFlow und JAX) und ermöglicht es Ihnen, ohne Weiteres zwischen ihnen zu wechseln. Darüber hinaus bietet sie aufgabenspezifische Heads, sodass Sie Transformer für nachgelagerte Aufgaben wie die Textklassifizierung, die Eigennamenerkennung (engl. Named Entity Recognition, NER) oder die Beantwortung von Fragen (engl. Question Answering) problemlos feintunen können.12 Dadurch verkürzt sich die Zeit, die Sie zum Trainieren und Testen einer Handvoll von Modellen benötigen, von einer Woche auf einen einzigen Nachmittag!

Im nächsten Abschnitt werden wir Ihnen zeigen, dass Sie einige der häufigsten NLP-Anwendungsfälle, die Ihnen in der Praxis begegnen werden, mithilfe der Transformers-Bibliothek mit nur wenigen Zeilen Code angehen können.

Die Anwendungsmöglichkeiten von Transformern im Überblick

Am Anfang einer jeden NLP-Aufgabe liegt ein Text vor, wie z.B. das folgende, frei erfundene Kundenfeedback zu einer bestimmten Onlinebestellung:

Je nach Ihrer Anwendung kann der Text, mit dem Sie arbeiten, ein juristischer Vertrag, eine Produktbeschreibung oder etwas ganz anderes sein. Im Falle von Kundenfeedback möchten Sie wahrscheinlich wissen, ob das Feedback positiv oder negativ ist. Diese Aufgabe wird Sentimentanalyse bzw. Stimmungsanalyse genannt und ist Teil des umfassenderen Bereichs der Textklassifizierung (engl. Text Classification), den wir in Kapitel 2 beleuchten werden. Schauen wir uns zunächst einmal an, was nötig ist, um die Stimmungslage bzw. das Sentiment unseres Texts mithilfe der Transformers-Bibliothek zu ermitteln.

Textklassifizierung

Wie wir in den folgenden Kapiteln sehen werden, verfügt die Transformers-Bibliothek über eine abgestufte API, die es Ihnen ermöglicht, mit der Bibliothek auf verschiedenen Abstraktionsebenen zu interagieren. In diesem Kapitel beginnen wir mit Pipelines, mit denen alle Schritte abstrahiert werden, die notwendig sind, um einen Rohtext in eine Reihe von Vorhersagen auf Basis eines feingetunten Modells umzuwandeln.

In der Transformers-Bibliothek instanziieren wir eine Pipeline, indem wir die Funktion pipeline() aufrufen und den Namen der Aufgabe angeben, die für uns von Interesse ist:

Wenn Sie diesen Code zum ersten Mal ausführen, werden einige Fortschrittsbalken angezeigt, da die Pipeline die Modellgewichtung automatisch vom Hugging Face Hub (https://oreil.ly/zLK11) herunterlädt. Wenn Sie die Pipeline ein zweites Mal instanziieren, stellt die Bibliothek fest, dass Sie die Gewichtung bereits heruntergeladen haben, und verwendet stattdessen die im Cache gespeicherte Version. Die text-classification-Pipeline verwendet standardmäßig ein Modell, das für die Sentimentanalyse entwickelt wurde, unterstützt aber auch Multiklassen- (bzw. mehrkategoriale) und Multilabel-Klassifizierung.

Nachdem wir unsere Pipeline erstellt haben, können wir nun einige Vorhersagen treffen! Jede Pipeline nimmt eine Textzeichenkette bzw. Strings (oder eine Liste von Strings) als Eingabe entgegen und gibt eine Liste von Vorhersagen zurück. Jede Vorhersage entspricht einem Python-Dictionary, weshalb wir auf Pandas zurückgreifen können, um sie als DataFrame darzustellen:

Label

Score

0

NEGATIVE

0.901546

In diesem Fall geht das Modell mit hoher Wahrscheinlichkeit davon aus, dass der Text ein negatives Stimmungsbild vermittelt. Wenn Sie sich vor Augen führen, dass es sich um eine Beschwerde eines verärgerten Kunden handelt, erscheint dies durchaus eine plausible Einschätzung zu sein! Beachten Sie, dass die Pipeline im Rahmen von Aufgaben der Sentimentanalyse nur eines der beiden verwendeten Labels, POSITIVE oder NEGATIVE, zurückgibt, da beide Scores bzw. Werte in Summe eins ergeben und der jeweils andere Wert dementsprechend durch die Berechnung von 1-Score ermittelt werden kann.

Werfen wir nun einen Blick auf eine andere häufig anzutreffende Aufgabenstellung: die Identifizierung von Eigennamen bzw. benannten Entitäten in Texten.

Named Entity Recognition

Die Vorhersage des Stimmungsbilds des Kundenfeedbacks ist ein guter erster Schritt. Oft möchten Sie jedoch erfahren, ob sich das Feedback auf einen bestimmten Artikel oder eine bestimmte Dienstleistung bezieht. Im NLP werden Objekte der realen Welt wie Produkte, Orte und Personen als Named Entities, also Eigennamen bzw. benannte Entitäten, bezeichnet, und das Extrahieren dieser Objekte aus Text wird Eigennamenerkennung bzw. Named Entity Recognition (NER) genannt. Um eine NER durchführen zu können, müssen wir die entsprechende Pipeline laden und sie mit unserer Kundenrezension füttern:

Wie Sie sehen, hat die Pipeline alle Entitäten erkannt und jeder von ihnen eine Kategorie wie ORG (Organisation), LOC (Ort, engl. Location) oder PER (Person) zugewiesen. Hier haben wir das Argument aggregation_strategy verwendet, um die Wörter entsprechend den Vorhersagen des Modells zu gruppieren. Die Entität »Optimus Prime« besteht zum Beispiel aus zwei Wörtern, wird aber einer einzigen Kategorie zugeordnet: MISC (Verschiedenes, engl. Miscellaneous). Anhand der Scores können wir beurteilen, mit welcher Konfidenz das Modell die identifizierten Entitäten bzw. Eigennamen einschätzt. Wir sehen, dass es bei »Decepticons« und dem ersten Vorkommen von »Megatron« am unsichersten war, da es beide nicht als eine einzelne Entität zusammenfassen konnte.

Sehen Sie in der vorherigen Tabelle diese seltsamen Hash-Symbole (#) in der Spalte word? Diese werden vom Tokenizer des Modells erzeugt, der Wörter in einzelne Einheiten, sogenannte Tokens, zerlegt. In Kapitel 2 werden Sie noch mehr über die Tokenisierung erfahren.

Alle Eigennamen (bzw. benannte Entitäten) in einem Text zu identifizieren, ist hilfreich, doch manchmal würden wir gerne gezieltere Fragen stellen. Hierfür können wir auf das Question Answering (QA) bzw. die automatische Fragenbeantwortung zurückgreifen.

Question Answering

Beim Question Answering übermitteln wir dem Modell eine Textpassage, die wir als Kontext (engl. Context) bezeichnen, zusammen mit einer Frage, deren Antwort wir gerne extrahieren möchten. Das Modell gibt dann die Passage des Texts zurück, die der Antwort entspricht. Sehen wir uns einmal an, was wir erhalten, wenn wir eine konkrete Frage bezüglich unseres Kundenfeedbacks stellen:

Wie wir sehen, hat die Pipeline neben der Antwort auch die Ganzzahlen start und end zurückgegeben, die den Indexen der Zeichen entsprechen, in denen die Antwort gefunden wurde (genau wie beim NER-Tagging). Dieser eingegrenzte Bereich wird als Antwortspanne (engl. Answer Span) bezeichnet, die den Beginn und das Ende der Textpassage, in der die Antwort enthalten ist, kennzeichnet. Es gibt verschiedene Arten des Question Answering, auf die wir noch in Kapitel 7 eingehen werden. Diese spezielle Art wird als extraktives Question Answering bezeichnet, da die Antwort direkt aus dem Text extrahiert wird.

Mit diesem Ansatz können Sie schnell relevante Informationen aus dem Feedback eines Kunden erkennen und extrahieren. Aber was ist, wenn Sie einen Berg von langatmigen Beschwerden erhalten und nicht die Zeit haben, sie alle zu lesen? Mal sehen, ob ein Modell, das Zusammenfassungen generiert, helfen kann!

Automatische Textzusammenfassung (Summarization)

Das Ziel der automatischen Textzusammenfassung (engl. Summarization) ist es, aus einem langen Text eine Kurzfassung zu erstellen, die alle relevanten Fakten enthält. Dies ist eine wesentlich kompliziertere Aufgabe als die vorherigen, da das Modell einen zusammenhängenden Text generieren muss. Wie Sie es bereits von den vorherigen Aufgaben kennen, können wir eine Zusammenfassungspipeline wie folgt instanziieren:

Die ausgegebene Zusammenfassung ist gar nicht mal so schlecht! Obwohl Teile des ursprünglichen Texts lediglich kopiert wurden, war das Modell in der Lage, das Wesentliche des Problems zu erfassen und korrekt zu erkennen, dass »Bumblebee« (der am Ende des Texts vorkam) der Verfasser der Beschwerde ist. In diesem Beispiel können Sie auch sehen, dass wir einige Schlüsselwortargumente wie max_length und clean_up_tokenization_spaces an die Pipeline übergeben haben. Diese ermöglichen es uns, die Ergebnisse weiter zu optimieren.

Was aber, wenn Sie Feedback in einer Sprache erhalten, die Sie nicht verstehen? Dann können Sie Google Translate verwenden oder auch Ihr eigenes Transformer-Modell, das Ihnen die Übersetzung abnimmt!

Maschinelle Übersetzung (Translation)

Wie die automatische Textzusammenfassung ist auch die maschinelle Übersetzung (engl. Translation) eine Aufgabe, bei der die Ausgabe einem generierten Text entspricht. Verwenden wir nun eine Übersetzungspipeline, um einen englischen Text ins Deutsche zu übersetzen:

Das Modell hat auch hier eine sehr gute Übersetzung hervorgebracht, bei der die förmlichen Pronomen der deutschen Sprache – wie »Ihrem« und »Sie« – korrekt verwendet werden. Außerdem haben wir hierdurch gezeigt, wie Sie das standardmäßig vorgegebene (engl. default) Modell in der Pipeline ersetzen, um das für Ihre Anwendung am besten geeignete Modell auswählen zu können – und auf dem Hugging Face Hub können Sie Modelle für Tausende von Sprachpaaren finden. Nehmen wir noch eine letzte Anwendung unter die Lupe, bevor wir wieder einen Schritt zurücktreten, um uns das gesamte Ökosystem von Hugging Face anzusehen.

Textgenerierung

Nehmen wir an, Sie möchten in der Lage sein, schneller auf Kundenfeedback zu antworten und dazu auf eine Autovervollständigungsfunktion zurückgreifen. Mit einem Textgenerierungsmodell (engl. Text Generation Model) könnten Sie dies wie folgt umsetzen:

Nun gut. Die generierte Vervollständigung würden wir wahrscheinlich nicht dazu verwenden, Bumblebee zu beruhigen. Die Idee dahinter sollte jedoch klar geworden sein.

Nachdem Sie nun ein paar spannende Anwendungen von Transformer-Modellen kennengelernt haben, fragen Sie sich vielleicht, wo diese trainiert werden. Alle Modelle, die wir in diesem Kapitel verwendet haben, sind frei verfügbar und bereits für die jeweilige Aufgabe feingetunt. Normalerweise möchten Sie die Modelle jedoch für Ihre eigenen Daten feintunen. In den folgenden Kapiteln werden Sie lernen, wie Sie das anstellen können.

Doch ein Modell zu trainieren, macht nur einen kleinen Teil eines jeden NLP-Projekts aus. Die Daten effizient zu verarbeiten, Ergebnisse mit Kollegen zu teilen und Ihre Arbeit reproduzierbar zu machen, sind ebenfalls wichtige Komponenten. Glücklicherweise ist die Transformers-Bibliothek von einem großen Ökosystem nützlicher Tools umgeben, die einen Großteil des modernen Machine-Learning-Workflows unterstützen. Sehen wir uns dieses Ökosystem etwas genauer an.

Das Ökosystem von Hugging Face

Was mit der Transformers-Bibliothek begann, hat sich schnell zu einem ganzen Ökosystem entwickelt, das aus vielen Bibliotheken und Tools besteht, mit denen Sie Ihre NLP- und Machine-Learning-Projekte schneller umsetzen können. Das Ökosystem von Hugging Face besteht hauptsächlich aus zwei Teilen: einer ganzen Reihe von Bibliotheken und dem Hub, wie in Abbildung 1-9 gezeigt. Die Bibliotheken stellen den Code zur Verfügung, während der Hub die Pretraining-Modellgewichte, Datensätze, Skripte für die Berechnung der Maße zur Evaluierung und mehr bereitstellt. In diesem Abschnitt werfen wir einen kurzen Blick auf die verschiedenen Komponenten. Wir überspringen die Transformers-Bibliothek, da wir sie bereits vorgestellt haben und im Laufe des Buchs noch sehr viel mehr über sie erfahren werden.

Abbildung 1-9: Ein Überblick über das Ökosystem von Hugging Face

Der Hugging Face Hub

Wie bereits erwähnt, ist Transfer Learning einer der Schlüsselfaktoren für den Erfolg von Transformer-Modellen, da es dadurch möglich ist, vortrainierte Modelle für neue Aufgaben wiederzuverwenden. Daher ist es von entscheidender Bedeutung, dass Sie vortrainierte Modelle schnell laden und Experimente mit ihnen durchführen können.

Der Hugging Face Hub enthält über 20.000 frei verfügbare Modelle. Wie Sie in Abbildung 1-10 sehen, gibt es Filter für Aufgaben (»Tasks«), Frameworks, Datensätze (»Datasets«) und vieles mehr. Diese sollen Ihnen helfen, sich im Hub zurechtzufinden und schnell vielversprechende Modellkandidaten zu finden. Wie Sie bereits bei der Verwendung von Pipelines feststellen konnten, ist das Laden eines vielversprechenden Modells dann buchstäblich nur eine Zeile Code entfernt. Das erleichtert es Ihnen, mit einer Vielzahl von Modellen zu experimentieren, und gibt Ihnen die Möglichkeit, sich auf die domänenspezifischen Aspekte Ihres Projekts zu konzentrieren.

Abbildung 1-10: Die »Models«-Seite des Hugging Face Hub, mit Filterfunktionen auf der linken Seite und einer Liste von Modellen auf der rechten Seite

Zusätzlich zu den Modellgewichtungen bzw. -gewichten enthält der Hub auch Datensätze und Skripte zur Berechnung der Maße zur Evaluierung, mit denen Sie die veröffentlichten Ergebnisse reproduzieren oder zusätzliche Daten für Ihre Anwendung nutzen können.

Der Hub bietet auch sogenannte Model-Cards und Dataset-Cards, in denen allgemeine Aspekte zu den Modellen und Datensätzen dokumentiert sind und die Ihnen eine fundierte Entscheidung darüber ermöglichen sollen, ob sie die richtige Wahl für Sie darstellen. Eines der besten Features des Hub ist, dass Sie jedes Modell direkt über die verschiedenen aufgabenspezifischen interaktiven Widgets ausprobieren können (siehe Abbildung 1-11).

Abbildung 1-11: Ein Beispiel für eine Model-Card aus dem Hugging Face Hub: Das Inference-Widget, mit dem Sie mit dem Modell interagieren können, sehen Sie rechts.

Kommen wir nun zur Tokenizers-Bibliothek.

PyTorch (https://oreil.ly/AyTYC) und TensorFlow (https://oreil.ly/JOKgq) bieten auch eigene Hubs, deren Nutzung sich insbesondere dann anbietet, wenn ein bestimmtes Modell oder ein bestimmter Datensatz nicht über den Hugging Face Hub verfügbar ist.

Die Tokenizers-Bibliothek von Hugging Face

Bei jedem der bisher gezeigten Pipeline-Beispiele wurde im Hintergrund ein Schritt zur Tokenisierung durchgeführt, bei dem der Rohtext in kleinere Teile bzw. Einheiten, sogenannte Tokens, zerlegt worden ist. Wie das im Einzelnen funktioniert, werden wir in Kapitel 2 erfahren. Für den Moment reicht es, zu wissen, dass Tokens Wörter, Teile von Wörtern oder einfach Zeichen wie Satzzeichen sein können. Transformer-Modelle werden auf Basis numerischer Darstellungen bzw. Repräsentationen dieser Tokens trainiert. Daher ist es für das gesamte NLP-Projekt von großer Bedeutung, diesen Schritt erfolgreich zu meistern!

Die Tokenizers-Bibliothek (https://oreil.ly/Z79jF) bietet viele verschiedene Strategien zur Tokenisierung und kann Text dank ihres Rust-Backends extrem schnell in Tokens überführen.13 Sie übernimmt auch alle Vor- und Nachverarbeitungsschritte (engl. Pre/Postprocessing), wie die Normalisierung (engl. Normalization) der Eingaben (engl. Inputs) und die Umwandlung der Ausgaben (engl. Outputs) des Modells in das gewünschte Format. Die Tokenizer der Tokenizers-Bibliothek können Sie auf die gleiche Weise laden wie die Modellgewichte vortrainierter Modelle mit der Transformers-Bibliothek.

Um Modelle trainieren und auch evaluieren zu können, benötigen wir einen Datensatz und Maße, mit denen wir die Güte- bzw. Qualität des Modells beurteilen können.14 Werfen wir also einen Blick auf die Datasets-Bibliothek, die hierfür vorgesehen ist.

Die Datasets-Bibliothek von Hugging Face

Datensätze zu laden, zu verarbeiten und zu speichern, kann recht mühsam sein, vor allem wenn die Datensätze so groß werden, dass sie nicht mehr in den Arbeitsspeicher Ihres Notebooks passen. Darüber hinaus müssen Sie in der Regel verschiedene Skripte implementieren, mit denen Sie die Daten herunterladen und in ein Standardformat überführen können.

Die Datasets-Bibliothek (https://oreil.ly/959YT) vereinfacht diesen Prozess, indem sie eine Standardschnittstelle für Tausende von Datensätzen bietet, die auf dem Hub (https://oreil.ly/Rdhcu) zu finden sind. Außerdem bietet sie eine intelligente Zwischenspeicherung (engl. Caching), sodass die Vorverarbeitung nicht jedes Mal, wenn Sie Ihren Code erneut ausführen, durchgeführt werden muss. Ferner hilft sie dabei, die mit einem begrenzten Arbeitsspeicher verbundenen Einschränkungen zu überwinden, indem sie einen speziellen Mechanismus namens Memory Mapping nutzt, bei dem der Inhalt einer Datei im virtuellen Speicher gespeichert und es mehreren Prozessen ermöglicht wird, Dateien auf effizientere Weise zu modifizieren. Die Bibliothek ist außerdem mit gängigen Frameworks wie Pandas und NumPy kompatibel, sodass Sie nicht auf Ihre bevorzugten Tools zur Datenverarbeitung verzichten müssen.

Allerdings sind hochwertige Datensätze und leistungsstarke Modelle wertlos, wenn Sie deren Leistung nicht zuverlässig beurteilen können. Leider gibt es bei den klassischen NLP-Maßen bzw. -Metriken viele verschiedene Implementierungen, die leicht variieren und irreführende Ergebnissen erzielen können. Indem es die Skripte für viele Maße bereitstellt, trägt die Datasets-Bibliothek dazu bei, dass Experimente besser reproduzierbar und die Ergebnisse vertrauenswürdiger sind.

Mit der Transformers-, der Tokenizers- und der Datasets-Bibliothek haben wir nun alle notwendigen Voraussetzungen, um unsere eigenen Transformer-Modelle trainieren zu können! Wie wir jedoch noch in Kapitel 10 sehen werden, gibt es Situationen, in denen wir die Trainingsschleife noch stärker modifizieren müssen, als dies die Trainer-Klasse zulässt. Hier kommt die letzte Bibliothek des Ökosystems ins Spiel: Accelerate.

Die Accelerate-Bibliothek von Hugging Face

Wenn Sie jemals Ihr eigenes Trainingsskript in PyTorch schreiben mussten, dann haben Sie sich wahrscheinlich schon einmal den Kopf darüber zerbrochen, wie Sie den Code, der auf Ihrem Laptop läuft, auf das Cluster Ihres Unternehmens bringen. Die Accelerate-Bibliothek (https://oreil.ly/iRfDe) fügt Ihren normalen Trainingsschleifen eine zusätzliche Abstraktionsebene hinzu, die sich um die gesamte benutzerdefinierte Logik kümmert, die für die Trainingsinfrastruktur erforderlich ist. Dies vereinfacht eine gegebenenfalls erforderliche Änderung der Infrastruktur und beschleunigt (»accelerates«) somit Ihre Arbeitsabläufe.

Soweit zu den wesentlichen Komponenten des Open-Source-Ökosystems von Hugging Face. Doch bevor wir dieses Kapitel abschließen, werfen wir noch einen Blick auf einige der typischen Herausforderungen, die beim Deployment von Transformer-Modellen in der Praxis auftreten.

Die größten Herausforderungen im Zusammenhang mit Transformer-Modellen

In diesem Kapitel haben Sie einen ersten Eindruck davon bekommen, wie vielfältig die NLP-Aufgaben sind, die mit Transformer-Modellen bewältigt werden können. Wenn man die Schlagzeilen in den Medien liest, klingt es manchmal so, als seien sie zu allem fähig. Doch so nützlich sie auch sein mögen, Transformer sind keineswegs der Weisheit letzter Schluss. Im Folgenden finden Sie einige mit ihnen einhergehende Herausforderungen, die wir im Laufe des Buchs noch genauer beleuchten werden:

Sprache

Die Forschung im Bereich des NLP wird überwiegend in englischer Sprache betrieben. Zwar gibt es einige Modelle für andere Sprachen, doch insbesondere für Sprachen, die selten sind oder für die nur wenige Ressourcen zur Verfügung stehen, ist es schwieriger, vortrainierte Modelle zu finden. In Kapitel 4 untersuchen wir mehrsprachige Transformer-Modelle und ihre Fähigkeit, einen sprachübergreifenden Zero-Shot-Transfer durchzuführen.

Datenverfügbarkeit

Obwohl wir Transfer Learning anwenden können und so die Menge an gelabelten Trainingsdaten, die unsere Modelle benötigen, drastisch verringern können, sind dies im Vergleich zu der Menge, die ein Mensch benötigt, um die Aufgabe zu bewältigen, nach wie vor viele. Wie Sie Situationen meistern können, bei denen Sie nur auf wenige oder gar keine gelabelten Daten zurückgreifen können, erfahren Sie in Kapitel 9.

Mit langen Texten bzw. Dokumenten arbeiten

Der Self-Attention-Mechanismus funktioniert sehr gut bei Texten, die nur aus einem Absatz bestehen. Bei längeren Texten, z.B. ganzen Dokumenten, ist er jedoch sehr rechenintensiv. Ansätze, die diesem Problem entgegenwirken, finden Sie in Kapitel 11.

Intransparenz (engl. Opacity)

Wie andere Deep-Learning-Modelle auch, sind Transformer weitgehend intransparent. Es ist schwer oder gar unmöglich, herauszufinden, »warum« ein Modell eine bestimmte Vorhersage getroffen hat. Dies ist eine besonders große Herausforderung, wenn Modelle dazu eingesetzt werden, schwerwiegende Entscheidungen zu treffen. In den Kapiteln Kapitel 2 und Kapitel 4 werden wir einige Möglichkeiten erkunden, wie sich Fehler (engl. Errors) bei Vorhersagen von Transformer-Modellen untersuchen lassen.

Bias bzw. Voreingenommenheit