Warum kann eine KI nicht zählen?

Eigentlich wäre es ja sehr einfach: Ein Wort hat Zeichen, so und so viele. Aber trotzdem scheitert ChatGPT und Co immer wieder? Warum ist das so? Nun die schnelle Erklärung ist: KI-Modelle wie ChatGPT arbeiten auf der Ebene von Tokens, nicht auf der von Wörtern oder Zeichen. Ein Token kann ein einzelnes Zeichen, ein Wort oder sogar nur ein Teil eines Wortes sein. Diese tokenbasierte Verarbeitung führt zu folgenden Konsequenzen:

  • Keine direkte Wort- oder Zeichenzählung: Das Modell hat kein inhärentes Verständnis von Wörtern oder Zeichen im traditionellen Sinne.
  • Kontextabhängige Tokenisierung: Die Aufteilung in Tokens hängt vom Kontext ab und kann variieren.

ChatGPT funktioniert, indem es den nächsten wahrscheinlichsten Token basierend auf dem vorherigen Kontext vorhersagt. Dies bedeutet:

  • Keine interne Zählung: Das Modell zählt nicht aktiv mit, sondern generiert Inhalte basierend auf Wahrscheinlichkeiten.
  • Kein Gesamtüberblick: ChatGPT hat keinen Überblick über den gesamten generierten Text, sondern arbeitet schrittweise.

Es ist nicht nur Statistik – es ist “Wahrscheinlichtkeits-Kontext”

Zugegeben, das Wort “Wahrscheinlichkeits-Kontext” ist von mir aus Einfacheit erfunden, aber es soll folgendes aussagen. LLM sind eben nicht nur einfache statistische Vorraussagen (wenn,dann), sondern im Kern sind LLMs prädikative Modelle, die nicht nur Muster in Sprache erkennen und reproduzieren, sondern auch kontextuelle Zusammenhänge verstehen und verarbeiten können. Was sie nicht können ist einzelne Zeichen zählen.

Der Fachbegriff für diese besondere Funktionsweise von Large Language Models das versucht das nächste Zeichen bzw den Kontext vorauszusagen lautet “kontextbasierte Wahrscheinlichkeitsmodellierung” oder eben auf Englisch “contextual probability modeling”.

Der Fachbegriff für die Funktionsweise von LLMs lautet “kontextbasierte Wahrscheinlichkeitsmodellierung” oder auf Englisch “contextual probability modeling”.

LLM’s nutzen dabei das Konzept der “Selbstaufmerksamkeit” (self-attention), um Beziehungen zwischen verschiedenen Teilen eines Textes zu erfassen. Geben wir dem LLM einen bestimmten Textkontext, versucht das Modell nicht nur vorherzusagen, welche Wörter oder Zeichen als nächstes am wahrscheinlichsten folgen werden, sondern es berücksichtigt dabei auch den gesamten Kontext und die Bedeutung des Textes. Aber: es “weiss” dabei nicht, was es wirklich tut.

Der Fachbegriff ist “Kontextbasierte Wahrscheinlichkeitsmodellierung”: die Wahrscheinlichkeit für das Auftreten eines bestimmten Wortes oder einer Wortsequenz. Dabei berücksichtigt das LLM den Kontext und den Zusammenhang des gesamten Textes.

Hier eine etwas ausführlichere Erklärung versucht: Die kontextbasierte Wahrscheinlichkeitsmodellierung beschreibt den Prozess, bei dem ein LLM die Wahrscheinlichkeit für das Auftreten eines bestimmten Wortes oder einer Wortsequenz basierend auf dem umgebenden Kontext berechnet. Dabei berücksichtigt das Modell nicht nur die unmittelbar vorangehenden Wörter, sondern auch den breiteren Zusammenhang des gesamten Textes. Dazu gehören unter anderem:

  1. Kontextuelle Einbettung: Das Modell erfasst die Bedeutung von Wörtern in Abhängigkeit von ihrem Kontext.

  2. Aufmerksamkeitsmechanismen: Diese ermöglichen es dem Modell, relevante Teile des Eingabetextes für die Vorhersage zu gewichten.

  3. Sequenzielle Verarbeitung: Das Modell berücksichtigt die Reihenfolge der Wörter und deren Beziehungen zueinander.

  4. Mehrdeutigkeitsauflösung: Durch den Kontext kann das Modell die wahrscheinlichste Bedeutung mehrdeutiger Wörter oder Phrasen bestimmen.

Diese Methode ermöglicht es LLMs, kohärente und kontextuell angemessene Texte zu generieren, die über einfache statistische Vorhersagen hinausgehen. Heisst einfach gesagt: Nicht zählen, keine Voraussage gemäss Vergangenheit, sondern eine Vernetzung von diversen komplexen Faktoren. Darum reicht auch ein Prompt nicht, denn die Grundlage wie ein LLM arbeitet darunter ist eben auch noch eine andere. Also im Code. Das Ganze basiert nämlich auf Tokens, nicht auf Zeichen. Und Tokens sind eine Art Verbrauch, kein 1:1 Instrument.

Die Grundlage ist immer eine andere “Messeinheit”: Tokens statt Zeichen

LLM-Modelle wie ChatGPTs GPT4o oder Mistral 2 Large etc arbeiten auf der Ebene von Tokens, nicht auf der von Wörtern oder Zeichen. Ein Token kann ein einzelnes Zeichen, ein Wort oder sogar nur ein Teil eines Wortes sein (siehe mein Titelbild).

Aber ein Token entspricht nicht immer genau einem Wort oder einer bestimmten Anzahl von Zeichen: (Achtung es gibt Unterschiede je LLM!)

  • Satzzeichen benötigen in der Regel 1 Token

  • Sonderzeichen können 1 bis 3 Tokens erfordern

  • Emojis benötigen meist 2 bis 3 Tokens

Gewichtheben und Kalorienverbrauch vs Tokens – eine Analogie

Nehmen wir doch als Beispiel einmal Gewichtheben von 1kg. Ich gebe Dir 1KG und wir beide heben es auf. Was dabei im Körper passiert: Wir alle haben einen individuellen Kalorien Verbrauch: Jeder Mensch verbrennt beim Heben eines Kilogramms Gewicht unterschiedlich viele Kalorien, abhängig von diversen Faktoren wie unter anderem Körperbau, Stoffwechsel und Trainingsstand aber auch Umgebung, Schlaf, etc. Das heisst, das Heben von einem Kilogramm verbraucht “eine bestimmte Menge an Energie”, aber nicht unbedingt genau “eine Einheit an Kalorien”.

Jedes Sprachmodell hat sozusagen einen eigenen “Körperbau” — das bedeutet, dass es darauf ausgelegt ist, Text auf eine bestimmte Weise in Tokens zu zerlegen. Dieser „Körperbau“ bestimmt, wie effizient oder aufwendig das Modell Text verarbeiten kann, genauso wie der Körperbau eines Menschen beeinflusst, wie viele Kalorien beim Heben eines Gewichts verbraucht werden.

Ich habe das mal aufgeschlüsselt, denn es gibt nicht ein 1:X Verhältnis:

  1. Modellspezifische Verarbeitung: Verschiedene LLMs verarbeiten Tokens unterschiedlich effizient, ähnlich wie Menschen Gewichte unterschiedlich effizient heben.

  2. Aufwand pro Token: Die Verarbeitung eines Tokens erfordert Rechenleistung, aber nicht jeder Token benötigt exakt die gleiche Menge an Ressourcen.

  3. Kontextabhängigkeit: Der Rechenaufwand hängt vom Kontext und der Komplexität der Aufgabe ab

  4. Effizienzunterschiede: Optimierte Modelle können Tokens effizienter verarbeiten.

  5. Nicht-lineare Skalierung: Die Verdoppelung der Tokenzahl führt nicht zwangsläufig zu einer Verdoppelung der Rechenzeit

Diese tokenbasierte Verarbeitung führt übrigens zu folgenden Konsequenzen:

  • Keine direkte Wort- oder Zeichenzählung: Das Modell selbst hat kein inhärentes Verständnis von Wörtern oder Zeichen im traditionellen Sinne.

  • Kontextabhängige Tokenisierung: Die Aufteilung in Tokens hängt vom Kontext ab und kann darum variieren. Es ist also “eher” ein Aufwand-Verbrauch, ähnlich wie Menschen auch unterschiedliche Kalorien verbrennen je nach Grundlage und Umgebung.

LLMs arbeiten auf Token-Ebene und haben kein inhärentes Verständnis von Wort- oder Zeichenzählungen

Wenn Du wissen möchtest, wie viele Tokens eine Eingabeaufforderung (ein Prompt) hat, gibt es mehrere Möglichkeiten. Dabei ist aber wichtig zu beachten, Tokens sind nicht allgemein gleich. Jedes Modell “rechnet” anders:

Screenshot von https://www.prompttokencounter.com/

Screenshot von

Das liegt daran, dass jeder Aufbau von einem LLM anders ist. Vergleich es wie mit Kalorien verbrennen. Ein Token ist eine Messeinheit für einen Verbrauch, basierend auf der Trainingsgrundlage (deine Fitness), deiner phyisischen Begebenheit (Grösse und Gewicht, analog Server Power bzw GPU/LPU Power) und den Umständen (Wetter oder eben Kontext).

Wenn Du mal in live nachsehen willst, wie andere Modelle rechnen empfehle ich Dir diese Seite hier: https://labs.perplexity.ai/ – unten am Bildschirmrand siehst Du es dann jeweils:

Warum Prompts und Python keine “echte Lösung” sind aber trotzdem funktionieren

Oft wird argumentiert, mit dem richtigen “Prompt Engineering” lässt sich das schon umgehen und besser machen. Wenn es denn ein “Engineering” wäre. Ich denke jede:r Ingenieur:In würde sich zweimal am Kopf kratzen, wenn jemand mit “Sprache” versucht Genauigkeit auf einem hohen Präzisions-Level zu erreichen.

Zahlen, Berechnungen oder eben Code, sind präzise, Sprache ist es nicht denn Sprache kann intepretiert werden (Betonung, Kontext, Verständlichkeiten). Ich möchte darum nochmals eine Lanze brechen für alle Engineers da draussen und “echte Prompting Engineers” die auf Code Level Präzision schaffen. Alle anderen die mit “Mega Prompts” und “Prompt Frameworks” arbeiten: Als Faustregel gilt: wenn Du 100x mit demselben Prompt dasselbe (exakt selbe) Resultat erreichst, dann bist Du ein Engineer ok?

Und hier kannst Du dich austoben, ohne teure Kurse – in den Kursen bekommst Du dann hoffentlich praxisnahe Tipps und vor allem Befähigung, keine “Wunderrezepte” – an alle die sich jetzt wieder aufregen, dass Kurse nicht gut seien – es gibt solche und solche. Und das hier ist free: https://learnprompting.org/docs/tooling/tools

Und Dank Python kann ein LLM nun zählen?

Nun du kannst in (Web-) oder anderen LLM verbauten Konsolen wie ChatGPT.com ein Python Script laufen lassen und dann läuft ein Script, welches dann in der Lage ist, das eigene Script zu erkennen bzw zu zählen (Von Code zu Code sozusagen, statt es zuerst in Tokens runterzubrechen). Die Ausgabe die dann bereits erfolgt ist, wird dann 1:1 via LLM wieder gegeben. Aber die Berechnung fand im Code statt. Es funktioniert also, aber es ist nicht das LLM das hier arbeitet. Es ist Python Code.

Offizielle Empfehlung von OpenAI

OpenAI empfiehlt übrigens für eine programmatische Schnittstelle zur Tokenisierung von Text das tiktoken-Paket für Python. Für JavaScript wird das von der Community unterstützte @dbdq/tiktoken-Paket empfohlen, das mit den meisten GPT-Modellen funktioniert. Wichtig ist hier zu wissen, dass der genaue Tokenisierungsprozess zwischen den Modellen variieren kann. Neuere Modelle wie GPT-3.5 und GPT-4 verwenden einen anderen Tokenizer als frühere Modelle und produzieren für denselben Eingabetext unterschiedliche Tokens.

Eine hilfreiche Faustregel galt lange, dass ein Token im Allgemeinen etwa 4 Zeichen Text für gängigen englischen Text entspricht. Dies entsprach ungefähr ¾ eines Wortes (also 100 Tokens ≈ 75 Wörter).


Disclaimer: dieser Artikel wurde nach meinem eigenen Wissen und dann mit Recherchen mit KI (Perplexity.Ai und Gemini.Google.com) manuell zusammen gestellt und mit Deepl.com/write vereinfacht. Der Text wird dann nochmals von zwei Personen meiner Wahl gelesen und kritisch hinterfragt. Das Bild stammt von einem Screenhot und ist selbst erstellt. Dieser Artikel ist rein edukativ und erhebt keinen Anspruch auf Vollständigkeit. Bitte melde dich, wenn Du Ungenauigkeiten feststellst, danke.


Wöchentliche Live Updates

Willst Du informiert bleiben? Dann melde dich an für unsere wöchentlichen Update Calls – immer Montags, auf Zoom, ab 18:30 für 30 Minuten. Hier gehts zur Anmeldung

SKOOL Community

Willst Du mehr erfahren zur künstlichen Intelligenz und von spannenden Vorlagen, Kurse und monatlichen Co-Workings profitieren? Für nur EUR 29,-/Mt bist Du dabei auf SKOOL. Jetzt Vorzugspreis auf Lebenszeit sichern.


Fragen zu KI und Digitalen Geschäftsmodellen? #fragRoger

Willst du mehr wissen? Sehr gerne komme ich auch bei Dir, bei deiner Firma, deiner ERFA Gruppe oder deinem Verband vorbei und helfe mit einem Workshop oder Input Referat.

Lass uns gerne mal unverbindlich sprechen. Also wenn ich helfen kann, wende dich gerne an mich #fragRoger und abonnier meinen offiziellen Newsletter.


Quellen:

[…] https://www.linkedin.com/posts/rogerbasler_fragroger-activity-7236241044609077248-h5_H

[…] https://www.iese.fraunhofer.de/blog/large-language-models-ki-sprachmodelle/

[…] https://community.openai.com/t/chatgpt-cant-count-characters/67231

[…] https://arxiv.org/html/2405.11357v1

[…] https://tokencounter.org/de

[…] https://www.prompttokencounter.com

[…] https://pypi.org/project/token-count/

[…] https://platform.openai.com/tokenizer

[…] https://learnprompting.org/docs/tooling/tools