LLM Practitioner’s Guide: Llama-2 mehrsprachig
Im Juli 2023 ver\u00F6ffentlichte Meta Llama-2, eine Reihe von Open-Access Large Language Models, die schnell zum Favoriten f\u00FCr diejenigen wurden, die sich um Datensicherheit sorgen und eigene ma\u00DFgeschneiderte Modelle erstellen m\u00F6chten. Im Gegensatz zur Abh\u00E4ngigkeit von generischen Drittanbietermodellen erm\u00F6glicht Llama-2 ein individuelles Design und war eine f\u00FChrende Wahl f\u00FCr Erweiterungen und spezialisierte Anwendungen, die oft Standard-Benchmarks \u00FCbertreffen.
\u00DCber Huggingface verf\u00FCgbar, bietet Llama-2 drei Gr\u00F6\u00DFen: 7B, 13B und 70B Parameter. Sie k\u00F6nnen es als Basismodell oder als Chat-Modell f\u00FCr Dialoge und Fragenbeantwortung verwenden. Meta stellte auch CodeLlama vor, eine speziell f\u00FCr Programmieraufgaben trainierte Variante von Llama-2.
Wenn Sie im Bereich KI tätig sind und ein maßgeschneidertes Large Language Model (LLM) benötigen, ist Llama-2 wahrscheinlich als potenzieller Ausgangspunkt auf Ihrem Radar. Wir waren intensiv an der Anpassung, dem Fine-Tuning und dem Deployment von Llama-2 beteiligt. In dieser Artikelserie möchten wir unsere Erkenntnisse darüber teilen, was Llama-2 kann und was nicht, zusammen mit detaillierten Anweisungen und Best Practices für das Fine-Tuning.
LLM Practitioner’s Guide:
- Wie mehrsprachig ist Llama-2 wirklich?
- Llama-2 Prompt-Struktur (in Kürze)
Im heutigen Beitrag werden wir die bedeutendste Einschränkung von Llama-2 untersuchen: seine begrenzte Sprachunterstützung. Trotz seiner Fähigkeiten ist die Erweiterung von Llama-2 auf Sprachen jenseits einiger der meistgesprochenen europäischen eine anspruchsvolle Aufgabe. Lassen Sie uns sehen, warum.
Die Wege, die es nicht beschreitet: Llama-2’s Sprachbeschränkungen verstehen

Im Kern von Llama-2’s Einschränkungen steht sein Tokenizer, eine entscheidende Komponente in der Art und Weise, wie es Sprache verarbeitet.
Large Language Models (LLMs) wie Llama-2 arbeiten mit Zahlen. Um Text zu verstehen, konvertieren diese Modelle ihn zunächst in ein numerisches Format. Die große Herausforderung bei der natürlichen Sprachverarbeitung besteht darin, den effektivsten Weg zu finden, Sprachen numerisch darzustellen.
Eine grundlegende Methode besteht darin, jedem Buchstaben oder Symbol eine eindeutige Zahl zuzuweisen — zum Beispiel wird „a“ zu 1, „b“ zu 2 und so weiter. Dann sagt das Modell die nächste Zahl in einer Sequenz voraus. Diese Methode macht jedoch selbst einen kurzen Satz zu einer langen Folge von 61 Zahlen. Jeder Fehler bei der Vorhersage eines Buchstabens wirkt sich auf alle folgenden aus, was diesen Ansatz komplex und fehleranfällig macht.
Eine andere Methode besteht darin, jedes Wort mit einer Zahl darzustellen. In diesem System wird der Satz zu einer Reihe von 11 Zahlen, deutlich kürzer als die Buchstabe-für-Buchstabe-Sequenz. Dies ist für das Modell einfacher, stellt aber immer noch ein Problem dar. Angesichts der großen Anzahl von Wörtern — über 200.000 allein in der englischen Sprache — müsste das Modell für mehrere Sprachen möglicherweise aus Millionen von Zahlen wählen, was die Fehlerwahrscheinlichkeit erhöht.
Um diese Probleme zu l\u00F6sen, entwickelten Forscher einen Kompromiss namens Tokenisierung. Die Tokenisierung teilt W\u00F6rter in kleinere Teile, sogenannte Token, auf, die in verschiedenen W\u00F6rtern vorkommen. Zum Beispiel k\u00F6nnte \u201Epredicting\u201C in \u201Epred\u201C, \u201Eict\u201C und \u201Eing\u201C aufgeteilt werden. Das bedeutet, anstatt jeden Buchstaben oder jedes ganze Wort zu erraten, sagt das Modell kleinere, handlichere Sequenzen voraus. Diese Token reduzieren die Anzahl der Optionen drastisch \u2014 von einem ganzen W\u00F6rterbuch auf etwa 2.000 Token f\u00FCr die englische Sprache, was den Prozess effizienter und genauer macht.
Schauen wir uns den Llama-2-Tokenizer an.
Zunächst importieren wir ihn aus der Huggingface Transformers-Bibliothek:
> from transformers import AutoTokenizer
> tokenizer = AutoTokenizer.from_pretrained('meta-llama/Llama-2-7b-hf', use_fast=True)Der Llama-2-Tokenizer unterstützt beeindruckende 32.000 Token:
> print(tokenizer.vocab_size)
32000Nun sehen wir ihn in Aktion. Betrachten Sie diesen Satz:
> print(tokenizer.tokenize('Call me Ishmael. Some years ago...'))
['▁Call', '▁me', '▁I', 'sh', 'ma', 'el', '.', '▁Some', '▁years', '▁ago', ...]Die Ausgabe demonstriert eine effiziente Tokenisierung: Häufige Wörter werden zu einzelnen Token und komplexe Wörter in verständliche Teile zerlegt. Zum Beispiel wird „watery“ sauber zerlegt, während „Ishmael“ silbenweise dargestellt wird.
Testen wir nun mit einem deutschen Satz. Selbst wenn Sie die anderen erwähnten Sprachen nicht sprechen: Verstehen Sie, dass effektive Tokenisierung Text in eine kleinere Anzahl längerer Token aufteilt, während schwache Tokenisierung zu einer größeren Anzahl kürzerer Token führt.
> print(tokenizer.tokenize('Da steh ich nun, ich armer Tor! Und bin so klug als wie zuvor.'))
['▁Da', '▁ste', 'h', '▁ich', '▁nun', ',', '▁ich', '▁ar', 'mer', '▁Tor', '!', ...]Der Tokenizer zeigt eine bewundernswerte Leistung und spiegelt die Feinheiten der Sprache wider, insbesondere angesichts der Tatsache, dass Deutsch rechnerisch komplexer als Englisch ist.
Schauen wir, wie Llama-2 mit Französisch umgeht.
> print(tokenizer.tokenize("On ne voit bien qu'avec le cœur..."))
['▁On', '▁ne', '▁voit', '▁bien', '▁qu', "'", 'ave', 'c', '▁le', '▁c', 'œur', ...]Auch hier sehen wir eine sehr gute Sprachrepräsentation.
Wenn wir mit romanischen und germanischen Sprachen fortfahren, werden wir sehen, dass Llama-2 damit recht gut zurechtkommt. Kommen wir also zu den slawischen Sprachen und beginnen mit Polnisch.
> print(tokenizer.tokenize('Litwo, ojczyzno moja! Ty jesteś jak zdrowie...'))
['▁Lit', 'wo', ',', '▁o', 'j', 'czy', 'z', 'no', '▁mo', 'ja', '!', ...]Polnisch ist eine notorisch rechnerisch komplexe Sprache, und man kann sofort den Qualitätsverlust bei der Tokenisierung erkennen: Die Token werden viel kleiner und ihre Anzahl steigt.
Schauen wir uns nun Ukrainisch an.
> print(tokenizer.tokenize('Як умру, то поховайте мене на могилі...'))
['▁Я', 'к', '▁у', 'м', 'ру', ',', '▁то', '▁по', 'х', 'ова', 'й', 'те', ...]Hier sehen wir einen ähnlichen Fall: Selbst wenn Sie kein Ukrainisch lesen, werden Sie viele kurze Token bemerken. Nicht gut.
Dennoch ist es immerhin etwas. Schauen wir uns nun Griechisch an.
> print(tokenizer.tokenize('ἄνδρα μοι ἔννεπε, Μοῦσα, πολύτροπον...'))
['▁', 'ἄ', 'ν', 'δ', 'ρ', 'α', '▁', 'μ', 'ο', 'ι', '▁', 'ἔ', 'ν', 'ν', 'ε', 'π', 'ε', ...]Hier sehen wir das Worst-Case-Szenario: Der Tokenizer fällt auf den ersten naiven Fall zurück und stellt die Sprache zeichenweise dar.
Wie liest es nun Hebräisch?
> print(tokenizer.tokenize('בְּרֵאשִׁית בָּרָא אֱלֹהִים...'))
['▁', 'ב', 'ְ', 'ּ', 'ר', 'ֵ', 'א', 'ש', 'ִ', 'ׁ', 'י', 'ת', ...]Auch hier zeichenweise.
Wie sieht es mit Chinesisch aus?
> print(tokenizer.tokenize("道可道,非常道。名可名,非常名。"))
['▁', '道', '可', '道', ',', '非', '常', '道', '。', '名', '可', '名', ',', '非', '常', '名', '。']Auch hier eine zeichenweise Darstellung.
Wenn wir dies mit anderen Sprachen fortsetzen, sehen wir dasselbe Muster: Der Llama-2-Tokenizer funktioniert gut mit romanischen und germanischen Sprachen, verschlechtert sich aber schnell zu einer zeichenweisen Darstellung für den Rest.
Zugegebenermaßen hat Meta darauf hingewiesen, dass Llama-2 hauptsächlich mit einem Textkorpus trainiert wurde, der zu 90 % aus Englisch besteht, was darauf hindeutet, dass das Modell mit anderen Sprachen möglicherweise nicht so effektiv ist. Diese Warnung ist wichtig, kann aber irreführend sein. Es wurde nicht nur trainiert — es wurde mit hauptsächlich Englisch im Sinn entworfen.
Beim Lesen der Modellbeschreibung könnten einige glauben, dass das Training von Llama-2 mit nicht-englischen Daten seine Leistung bei anderen Sprachen erheblich verbessern könnte. Während Fine-Tuning bis zu einem gewissen Grad helfen kann, behebt es nicht die inhärenten Einschränkungen des Tokenizer-Designs. Folglich schneidet Llama-2 natürlicherweise bei einigen Sprachen wie Englisch, Deutsch, Spanisch oder Französisch besser ab als bei anderen wie Polnisch oder Ukrainisch. Der Versuch, seine Fähigkeiten auf Griechisch, Hebräisch, Chinesisch und viele andere Sprachen auszuweiten, ist eine noch größere Herausforderung. Und da der Tokenizer eng mit dem Modell gekoppelt ist und nicht ersetzt werden kann, gibt es keinen Weg um dieses Problem herum.
Aus unserer Erfahrung haben wir versucht, Llama-2 mit einem enormen Satz sorgfältig kuratierter überwacht trainierter Daten von mehr als einer Milliarde Token für mehrsprachige Aufgaben zu fine-tunen, nur um mitten im Projekt auf ein anderes Modell umzusteigen.
Für diejenigen, die ein Sprachmodell in einer dieser anspruchsvolleren Sprachen fine-tunen müssen, ist Llama-2 möglicherweise nicht die optimale Wahl. Stattdessen könnte die Auswahl eines kleineren Modells mit einem geeigneteren Tokenizer zu besseren Ergebnissen führen. Unsere Erfahrung bei der Entwicklung mehrsprachiger Modelle zeigt, dass die Entscheidung für kleinere und ältere Modelle mit besseren Tokenizern und deren Anpassung an spezifische Aufgaben und Sprachen weitaus effektiver sein könnte als die Verwendung von Llama-2.
Der Aufbau eines eigenen LLM k\u00F6nnte die Datensicherheit und Compliance verbessern und einen KI-Wettbewerbsvorteil f\u00FCr Ihr Produkt erm\u00F6glichen. Schauen Sie sich unsere anderen Beitr\u00E4ge an, um eine ausf\u00FChrliche Erkl\u00E4rung zu erhalten, was der Netzwerkeffekt ist und wie KI ihn erm\u00F6glicht, wie man einen KI-Wettbewerbsvorteil aufbaut, welche Kultur Ihnen hilft, die richtigen KI-Produkte zu bauen, was Sie in Ihrer KI-Strategie vermeiden sollten und mehr.
Brauchen Sie ein wirklich mehrsprachiges Sprachmodell?
Die richtige Modellwahl hängt von Ihren Zielsprachen und Ihrem Anwendungsfall ab. Lassen Sie uns den optimalen Ansatz für Ihr mehrsprachiges KI-Produkt finden.