Ein Bigramm-Modell
Jetzt baust du ein Bigramm-Modell in Java. Es trainiert auf einem kleinen Korpus und erzeugt dann neuen Text Token für Token.
Die Idee
- Training: Zähle alle Bigramme im Korpus.
- Erzeugung: Wähle das nächste Token zufällig nach Wahrscheinlichkeit.
- Wiederholung: Bis genügend Tokens erzeugt sind.
Bevor du das Programm ausführst: Lies den Korpus im Programm unten. Welche Wörter kommen nach „die"? Welches ist am häufigsten? Schreibe deine Vermutung auf.
a) Führe das Programm mehrmals aus. Kommt jedes Mal derselbe Text heraus? Warum?
b) Ändere das Startwort auf „Katze". Was passiert?
c) Erweitere den Korpus um weitere Sätze (z.B. „die Katze frisst die Maus"). Wie verändert sich der erzeugte Text?
Tipp zu a)
Das Modell wählt das nächste Token zufällig nach Wahrscheinlichkeit. Jeder Durchlauf kann einen anderen Text erzeugen, weil Random.randint unterschiedliche Werte liefert.
Tipp zu b)
Schau ins Vokabular: Es enthält genau fünf verschiedene Tokens. Welche davon können überhaupt auf „Katze" folgen — und was passiert, wenn du ein Startwort wählst, das im Korpus gar nicht vorkommt?
Das Bigramm-Modell ist ein generatives KI-System: Es erzeugt neuen Text, den es in genau dieser Form noch nicht gab.
Beim Trainieren hat niemand Labels vergeben — der Korpus ist einfach roher Text. Das Modell erzeugt sich seine „richtigen Antworten" selbst, indem es jedes Token als Vorhersageziel für das vorhergehende benutzt. Man nennt das selbstüberwachtes Lernen: Es sieht von innen aus wie überwachtes Lernen (es gibt für jede Eingabe eine richtige Antwort), aber die Beschriftung kostet keine Handarbeit, sondern steckt schon im Text. Genau deshalb lassen sich Sprachmodelle auf so gewaltigen Textmengen trainieren.
Der erzeugte Text ist nicht sinnvoll wie bei ChatGPT — aber das Prinzip ist dasselbe: das nächste Token nach Wahrscheinlichkeit wählen.
Token für Token erzeugen
Derselbe Korpus wie im Programm. Mit Nächstes Token siehst du bei jedem einzelnen Schritt, aus welcher Verteilung gewürfelt wurde.
a) Drücke fünfmal auf Neu und dann jeweils auf 10 Tokens. Kommt derselbe Text heraus? Vergleiche mit deiner Antwort zu a) von oben.
b) Nimm den Haken bei zufällig nach Wahrscheinlichkeit heraus. Jetzt wird immer das häufigste Wort gewählt. Was passiert mit dem Text nach wenigen Schritten?
c) Stelle das Startwort auf schläft. Warum endet der Text sofort?
d) Ergänze im Korpus den Satz „die Katze frisst die Maus" und erzeuge erneut Text. Welches neue Wort taucht auf, und wie wahrscheinlich ist es nach „Katze"?