Tokenisierung im NLP verstehen: Ein Leitfaden für Anfänger zur Textverarbeitung
Veröffentlicht: 2024-11-26Die Tokenisierung ist ein wichtiger, aber oft übersehener Bestandteil der Verarbeitung natürlicher Sprache (NLP). In diesem Leitfaden erklären wir die Tokenisierung, ihre Anwendungsfälle, Vor- und Nachteile und warum sie in fast jedem großen Sprachmodell (LLM) eine Rolle spielt.
Inhaltsverzeichnis
- Was ist Tokenisierung im NLP?
- Arten der Tokenisierung
- So funktioniert die Tokenisierung
- Tokenisierungsanwendungen
- Vorteile der Tokenisierung
- Herausforderungen der Tokenisierung
Was ist Tokenisierung im NLP?
Tokenisierung ist eine NLP-Methode, die Text in numerische Formate umwandelt, die Modelle des maschinellen Lernens (ML) verwenden können. Wenn Sie Ihre Eingabeaufforderung an ein LLM wie Claude von Anthropic, Gemini von Google oder ein Mitglied der GPT-Serie von OpenAI senden, liest das Modell Ihren Text nicht direkt. Diese Modelle können nur Zahlen als Eingaben akzeptieren, daher muss der Text zunächst mithilfe eines Tokenizers in eine Zahlenfolge umgewandelt werden.
Eine Möglichkeit, wie ein Tokenizer Text tokenisieren kann, besteht darin, ihn in einzelne Wörter aufzuteilen und jedem eindeutigen Wort eine Nummer zuzuweisen:
„Grammarly liebt Grammatik, ML und Schreiben“ könnte lauten:
Jedes Wort (und die zugehörige Nummer) ist ein Token. Ein ML-Modell kann die Reihenfolge der Token – [7,102], [37], [564], [2], [9,763], [2], [231] – verwenden, um seine Operationen auszuführen und seine Ausgabe zu erzeugen. Bei dieser Ausgabe handelt es sich normalerweise um eine Zahl, die mithilfe der Umkehrung desselben Tokenisierungsprozesses wieder in Text umgewandelt wird. In der Praxis ist diese Wort-für-Wort-Tokenisierung ein großartiges Beispiel, wird jedoch aus Gründen, die wir später sehen werden, in der Industrie selten verwendet.
Abschließend ist noch zu beachten, dass Tokenizer über Vokabulare verfügen – den vollständigen Satz an Token, mit denen sie umgehen können. Ein Tokenizer, der grundlegende englische Wörter kennt, aber keine Firmennamen, hat „Grammarly“ möglicherweise nicht als Token in seinem Wortschatz, was zu einem Fehler bei der Tokenisierung führt.
Arten der Tokenisierung
Im Allgemeinen verwandelt die Tokenisierung einen Textblock in eine Zahlenfolge. Obwohl es selbstverständlich ist, an die Tokenisierung auf Wortebene zu denken, gibt es viele andere Tokenisierungsmethoden, von denen eine – die Unterwort-Tokenisierung – der Industriestandard ist.
Wort-Tokenisierung
Die Wort-Tokenisierung ist das zuvor gesehene Beispiel, bei dem der Text nach Wort und Satzzeichen aufgeteilt wird.
Der Hauptvorteil der Wort-Tokenisierung besteht darin, dass sie leicht zu verstehen und zu visualisieren ist. Allerdings weist es einige Mängel auf:
- Satzzeichen, sofern vorhanden, werden den Wörtern beigefügt, wie beim „Schreiben“.
- Neue oder ungewöhnliche Wörter (wie „Grammatik“) nehmen einen ganzen Token ein.
Infolgedessen kann die Wort-Tokenisierung Vokabulare mit Hunderttausenden von Token erstellen. Das Problem bei großen Vokabularien besteht darin, dass sie das Training und die Inferenz viel weniger effizient machen – die für die Konvertierung zwischen Text und Zahlen erforderliche Matrix müsste riesig sein.
Darüber hinaus gäbe es viele selten verwendete Wörter und die NLP-Modelle hätten nicht genügend relevante Trainingsdaten, um genaue Antworten für diese seltenen Wörter zu liefern. Wenn morgen ein neues Wort erfunden würde, müsste ein LLM, der Wort-Tokenisierung verwendet, umgeschult werden, um dieses Wort zu integrieren.
Unterwort-Tokenisierung
Bei der Unterwort-Tokenisierung wird Text in Abschnitte aufgeteilt, die kleiner oder gleich Wörtern sind. Es gibt keine feste Größe für jeden Token; Jeder Token (und seine Länge) wird durch den Trainingsprozess bestimmt. Die Subword-Tokenisierung ist der Industriestandard für LLMs. Unten sehen Sie ein Beispiel mit der Tokenisierung durch den GPT-4o-Tokenizer:
Hier wird das ungewöhnliche Wort „Grammarly“ in drei Zeichen zerlegt: „Gr“, „amm“ und „arly“. Mittlerweile kommen die anderen Wörter im Text so häufig vor, dass sie eigene Token bilden.
Die Subwort-Tokenisierung ermöglicht kleinere Vokabulare, was ein effizienteres und kostengünstigeres Training und Rückschluss bedeutet. Subword-Tokenizer können auch seltene oder neuartige Wörter in Kombinationen kleinerer, vorhandener Token zerlegen. Aus diesen Gründen verwenden viele NLP-Modelle die Subwort-Tokenisierung.
Charakter-Tokenisierung
Durch die Zeichen-Tokenisierung wird Text in einzelne Zeichen aufgeteilt. So würde unser Beispiel aussehen:
Jeder einzelneeinzigartigeCharakter wird zu seinem eigenen Token. Dies erfordert eigentlich den kleinsten Wortschatz, da das Alphabet nur aus 52 Buchstaben (Groß- und Kleinschreibung wird als unterschiedlich betrachtet) und mehreren Satzzeichen besteht. Da jedes englische Wort aus diesen Zeichen gebildet werden muss, kann die Zeichen-Tokenisierung mit jedem neuen oder seltenen Wort funktionieren.
Den standardmäßigen LLM-Benchmarks zufolge schneidet die Tokenisierung von Zeichen in der Praxis jedoch nicht so gut ab wie die Tokenisierung von Unterwörtern. Das Unterwort-Token „car“ enthält viel mehr Informationen als das Zeichen-Token „c“, sodass der Aufmerksamkeitsmechanismus in Transformatoren über mehr Informationen verfügt, auf denen er ausgeführt werden kann.
Satz-Tokenisierung
Durch die Satz-Tokenisierung wird jeder Satz im Text zu einem eigenen Token. Unser Beispiel würde so aussehen:
Der Vorteil besteht darin, dass jeder Token eine Menge Informationen enthält. Allerdings gibt es mehrere Nachteile. Es gibt unendlich viele Möglichkeiten, Wörter zu kombinieren, um Sätze zu schreiben. Der Wortschatz müsste also ebenfalls unendlich sein.
Darüber hinaus wäre jeder Satz selbst ziemlich selten, da selbst geringfügige Unterschiede (z. B. „sowie“ anstelle von „und“) trotz gleicher Bedeutung ein anderes Zeichen bedeuten würden. Training und Schlussfolgerung wären ein Albtraum. Die Satz-Tokenisierung wird in speziellen Anwendungsfällen wie der Satz-Sentiment-Analyse verwendet, ansonsten kommt sie jedoch nur selten vor.
Kompromiss zwischen Tokenisierung: Effizienz vs. Leistung
Die Wahl der richtigen Granularität der Tokenisierung für ein Modell ist eine komplexe Beziehung zwischen Effizienz und Leistung. Bei sehr großen Token (z. B. auf Satzebene) wird das Vokabular umfangreich. Die Trainingseffizienz des Modells sinkt, da die Matrix zur Aufnahme all dieser Token riesig ist. Die Leistung sinkt, da nicht genügend Trainingsdaten für alle eindeutigen Token vorhanden sind, um Beziehungen sinnvoll zu lernen.
Andererseits wird der Wortschatz mit kleinen Token kleiner. Das Training wird effizienter, die Leistung kann jedoch sinken, da nicht jedes Token genügend Informationen enthält, damit das Modell Token-Token-Beziehungen lernen kann.
Die Subword-Tokenisierung liegt genau in der Mitte. Jeder Token verfügt über genügend Informationen, damit Modelle Beziehungen lernen können, aber das Vokabular ist nicht so groß, dass das Training ineffizient wird.
So funktioniert die Tokenisierung
Bei der Tokenisierung geht es um die Schulung und Verwendung von Tokenisierern. Tokenizer wandeln Text in Token und Token wieder in Text um. Wir werden hier Subword-Tokenizer besprechen, da sie der beliebteste Typ sind.
Subword-Tokenizer müssen trainiert werden, um Text effektiv aufzuteilen.
Warum wird „Grammarly“ in „Gr“, „amm“ und „arly“ aufgeteilt? Könnten „Gram“, „mar“ und „ly“ nicht auch funktionieren? Für das menschliche Auge wäre das durchaus möglich, aber der Tokenizer, der vermutlich die effizienteste Darstellung gelernt hat, denkt anders. Ein üblicher Trainingsalgorithmus (obwohl in GPT-4o nicht verwendet), der zum Erlernen dieser Darstellung verwendet wird, ist die Bytepaarkodierung (BPE). Wir erklären BPE im nächsten Abschnitt.
Tokenizer-Schulung
Um einen guten Tokenizer zu trainieren, benötigen Sie einen riesigen Textkorpus, auf dem Sie trainieren können. Das Ausführen von BPE auf diesem Korpus funktioniert wie folgt:
- Teilen Sie den gesamten Text im Korpus in einzelne Zeichen auf. Legen Sie diese als Startmarken im Vokabular fest.
- Führen Sie die beiden am häufigsten benachbarten Token aus dem Text zu einem neuen Token zusammen und fügen Sie ihn dem Vokabular hinzu (ohne die alten Token zu löschen – das ist wichtig).
- Wiederholen Sie diesen Vorgang, bis keine häufig vorkommenden Paare benachbarter Token mehr vorhanden sind oder die maximale Vokabulargröße erreicht ist.
Nehmen wir als Beispiel an, dass unser gesamtes Trainingskorpus aus dem Text „abc abcd“ besteht:
- Der Text würde aufgeteilt in [„a“, „b“, „c“, „ “, „a“, „b“, „c“, „d“]. Beachten Sie, dass der vierte Eintrag in dieser Liste ein Leerzeichen ist. Unser Wortschatz wäre dann [„a“, „b“, „c“, „ “, „d“].
- „a“ und „b“ kommen im Text am häufigsten nebeneinander vor (verbunden mit „b“ und „c“, aber „a“ und „b“ gewinnen alphabetisch). Also kombinieren wir sie zu einem Token, „ab“. Das Vokabular sieht jetzt wie [„a“, „b“, „c“, „ “, „d“, „ab“] aus, und der aktualisierte Text (mit angewendeter „ab“-Token-Zusammenführung) sieht wie [„ab“ aus. , „c“, „ “, „ab“, „c“, „d“].
- Jetzt kommen „ab“ und „c“ im Text am häufigsten zusammen vor. Wir führen sie im Token „abc“ zusammen. Das Vokabular sieht dann wie folgt aus: [„a“, „b“, „c“, „ “, „d“, „ab“, „abc“] und der aktualisierte Text sieht wie [„abc“, „ “, „abc“ aus ", "D"].
- Wir beenden den Vorgang hier, da jedes benachbarte Token-Paar jetzt nur noch einmal vorkommt. Eine weitere Zusammenführung der Token würde die Leistung des resultierenden Modells bei anderen Texten verschlechtern. In der Praxis ist die Größenbeschränkung des Wortschatzes der begrenzende Faktor.
Mit unserem neuen Vokabularsatz können wir Text und Token zuordnen. Sogar Text, den wir vorher noch nicht gesehen haben, wie „Cab“, kann tokenisiert werden, da wir die Einzelzeichen-Tokens nicht verworfen haben. Wir können Token-Nummern auch zurückgeben, indem wir einfach die Position des Tokens im Vokabular sehen.
Eine gute Tokenizer-Schulung erfordert extrem große Datenmengen und viel Rechenleistung – mehr, als sich die meisten Unternehmen leisten können. Unternehmen umgehen dies, indem sie auf die Schulung ihres eigenen Tokenizers verzichten. Stattdessen verwenden sie einfach einen vorab trainierten Tokenizer (wie den oben verlinkten GPT-4o-Tokenizer), um Zeit und Geld zu sparen und dabei, wenn überhaupt, nur minimale Einbußen bei der Modellleistung zu verzeichnen.
Verwendung des Tokenizers
Wir haben diesen Subword-Tokenizer also mithilfe von BPE auf einem riesigen Korpus trainiert. Wie verwenden wir es nun für einen neuen Text?
Wir wenden die Zusammenführungsregeln an, die wir im Tokenizer-Trainingsprozess festgelegt haben. Wir teilen zunächst den Eingabetext in Zeichen auf. Dann führen wir Token-Zusammenführungen in der gleichen Reihenfolge wie im Training durch.
Zur Veranschaulichung verwenden wir einen etwas anderen Eingabetext von „dc abc“:
- Wir teilen es in Zeichen auf [„d“, „c“, „ “, „a“, „b“, „c“].
- Die erste Zusammenführung, die wir im Training durchgeführt haben, war „ab“, also machen wir das hier: [„d“, „c“, „ “, „ab“, „c“].
- Die zweite Zusammenführung, die wir durchgeführt haben, war „abc“, also machen wir Folgendes: [„d“, „c“, „ “, „abc“].
- Das sind die einzigen Zusammenführungsregeln, die wir haben. Wir sind also mit der Tokenisierung fertig und können die Token-IDs zurückgeben.
Wenn wir eine Reihe von Token-IDs haben und diese in Text umwandeln möchten, können wir einfach jede Token-ID in der Liste nachschlagen und den zugehörigen Text zurückgeben. LLMs tun dies, um die Einbettungen (Zahlenvektoren, die dieBedeutungvon Token durch Betrachtung der umgebenden Token erfassen), mit denen sie arbeiten, wieder in für Menschen lesbaren Text umzuwandeln.
Tokenisierungsanwendungen
Die Tokenisierung ist immer der erste Schritt in jedem NLP. Um Text in Formen umzuwandeln, mit denen ML-Modelle (und Computer) arbeiten können, ist eine Tokenisierung erforderlich.
Tokenisierung in LLMs
Die Tokenisierung ist normalerweise der erste und letzte Teil jedes LLM-Aufrufs. Der Text wird zuerst in Token umgewandelt, dann werden die Token in Einbettungen umgewandelt, um die Bedeutung jedes Tokens zu erfassen, und an die Hauptteile des Modells (die Transformatorblöcke) übergeben. Nachdem die Transformer-Blöcke ausgeführt wurden, werden die Einbettungen wieder in Token umgewandelt. Schließlich wird das gerade zurückgegebene Token zur Eingabe hinzugefügt und an das Modell zurückgeleitet, wobei der Vorgang erneut wiederholt wird. LLMs nutzen die Subword-Tokenisierung, um Leistung und Effizienz in Einklang zu bringen.
Tokenisierung in Suchmaschinen
Suchmaschinen tokenisieren Benutzeranfragen, um sie zu standardisieren und die Absichten der Benutzer besser zu verstehen. Die Suchmaschinen-Tokenisierung kann das Aufteilen von Text in Wörter, das Entfernen von Füllwörtern (z. B. „das“ oder „und“), die Umwandlung von Großbuchstaben in Kleinbuchstaben und den Umgang mit Zeichen wie Bindestrichen umfassen. Eine Unterwort-Tokenisierung ist hier normalerweise nicht erforderlich, da Leistung und Effizienz weniger von der Vokabulargröße abhängen.
Tokenisierung in der maschinellen Übersetzung
Die Tokenisierung maschineller Übersetzung ist interessant, da die Eingabe- und Ausgabesprachen unterschiedlich sind. Daher wird es zwei Tokenizer geben, einen für jede Sprache. Die Unterwort-Tokenisierung funktioniert normalerweise am besten, da sie den Kompromiss zwischen Modelleffizienz und Modellleistung ausgleicht. Aber einige Sprachen, wie zum Beispiel Chinesisch, haben keine sprachliche Komponente, die kleiner als ein Wort ist. Dort ist eine Wort-Tokenisierung gefragt.
Vorteile der Tokenisierung
Die Tokenisierung ist ein Muss für jedes NLP-Modell. Durch eine gute Tokenisierung können ML-Modelle effizient mit Text arbeiten und neue Wörter gut verarbeiten.
Durch die Tokenisierung können Modelle mit Text arbeiten
Intern funktionieren ML-Modelle nur mit Zahlen. Der Algorithmus hinter ML-Modellen basiert vollständig auf Berechnungen, für deren Berechnung wiederum Zahlen erforderlich sind. Daher muss Text in Zahlen umgewandelt werden, bevor ML-Modelle damit arbeiten können. Nach der Tokenisierung können Techniken wie Aufmerksamkeit oder Einbettung auf die Zahlen angewendet werden.
Die Tokenisierung verallgemeinert sich auf neuen und seltenen Text
Genauer gesagt lässt sich eineguteTokenisierung auf neuen und seltenen Text verallgemeinern. Mit der Tokenisierung von Unterwörtern und Zeichen können neue Texte in Sequenzen bestehender Token zerlegt werden. Das Einfügen eines Artikels mit Kauderwelschwörtern in ChatGPT führt also nicht dazu, dass er kaputt geht (obwohl es möglicherweise auch keine sehr kohärente Antwort liefert). Durch eine gute Verallgemeinerung können Modelle auch Beziehungen zwischen seltenen Wörtern lernen, basierend auf den Beziehungen in den Untertokens.
Herausforderungen der Tokenisierung
Die Tokenisierung hängt vom Trainingskorpus und dem Algorithmus ab, daher können die Ergebnisse variieren. Dies kann die Denkfähigkeit von LLMs und ihre Eingabe- und Ausgabelänge beeinträchtigen.
Die Tokenisierung beeinflusst die Denkfähigkeit von LLMs
Ein einfaches Problem, das LLMs oft aus dem Konzept bringt, ist das Zählen der Vorkommen des Buchstabens „r“ im Wort „Strawberry“. Das Modell würde fälschlicherweise sagen, dass es zwei waren, obwohl die Antwort in Wirklichkeit drei ist. Dieser Fehler kann teilweise auf die Tokenisierung zurückzuführen sein. Der Unterwort-Tokenizer teilte „Erdbeere“ in „St“, „Roh“ und „Beere“ auf. Daher war das Modell möglicherweise nicht in der Lage, das eine „r“ im mittleren Token mit den beiden „r“ im letzten Token zu verbinden. Der gewählte Tokenisierungsalgorithmus hat direkten Einfluss darauf, wie Wörter tokenisiert werden und wie sich die einzelnen Token auf die anderen beziehen.
Die Tokenisierung wirkt sich auf die LLM-Eingabe- und Ausgabelänge aus
LLMs basieren größtenteils auf der Transformer-Architektur, die auf dem Aufmerksamkeitsmechanismus zur Kontextualisierung jedes Tokens basiert. Mit zunehmender Anzahl an Token erhöht sich jedoch die Zeit, die für die Aufmerksamkeit benötigt wird, quadratisch. Ein Text mit vier Token benötigt also 16 Zeiteinheiten, ein Text mit acht Token hingegen 64 Zeiteinheiten. Dies beschränkt LLMs auf Ein- und Ausgabegrenzen von einigen hunderttausend Token. Bei kleineren Token kann dies die Menge an Text, die Sie in das Modell einspeisen können, erheblich einschränken, wodurch sich die Anzahl der Aufgaben verringert, für die Sie es verwenden können.