Chemische Elemente erfinden mit Markov-Sprachmodell
Große Sprachmodelle sind ja gerade voll im Hype. Als kleines Spielmodell schauen wir uns hier ein recht einfaches Markov-Sprachmodell an und nutzen es um Namen für chemische Elemente zu finden.
Sprachen haben gewisse Muster. Das passt zu uns Menschen, schließlich sind wir verdammt gut darin Muster zu erkennen. Auch haben wir alle ein intuitives Sprachmodell. So haben wir ein Gefühl dafür, welche Wörter als nächstes kommen können. Bei »sehr geehrte Damen und« vervollständigt unser Kopf direkt »Herren«, so sehr ist klar, wie es weitergeht. Bei »im Großen und« halten wir die Wahrscheinlichkeit für »Ganzen« oder »Kleinen« ziemlich hoch.
Nicht bei allen Phrasen klappt das so gut. Häufig gibt es viel mehr Optionen. Ein Maß dafür ist die Perplexity, die grob angibt wie gut man das nächste Wort raten kann, wenn man das Textmaterial gut kennt.
Große Sprachmodelle (Large Language Models, LLMs) werden auf ganz viel Text trainiert und lernen so das nächste Wort vorherzusagen. So viel Rechenleistung habe ich privat nicht, außerdem sind viele Prinzipien analog.
Als Korpus nehme ich hier einfach nur die Namen der chemischen Elemente. Die Wörter kennt man zum Teil, es ist auch ziemlich überschaubar in der Anzahl und Länge.
Im ersten Schritt schaue ich mir an, wie viele Folgen es gibt. Nehmen wir das Wort »Wasserstoff«. Da haben wir ja diese Übergänge: w → a → s → s → e → r → s → t → o → f → f. Wenn man diese jetzt etwas gruppiert, dann kann man auch diese Übergänge finden:
- a zu s
- e zu r
- f zu f
- o zu f
- r zu s
- s zu s, e oder t
- t zu o
- w zu a
Hier in dem Wort kommt jeder Übergang nur einmal vor, und das einzig interessante ist der Übergang von »s«.
Was uns noch fehlt ist ein Anfang und ein Ende. Da kann man beliebige Namen für nehmen, ich nutze GO und EOS (end of sequence). Somit haben wir noch zwei weitere Übergänge:
- GO zu w
- f zu f oder EOS
Das können wir als gerichteten Graphen noch visualisieren:
Wir fangen also bei GO an und können dann beliebig abzweigen. Damit können wir jetzt Wörter erzeugen. Zum Beispiel können wir »Wastof« machen, oder »Wasssstoff«. Oder auch »Waserstoff«, »Waserserserstoffff«. Das sind zwar alle bescheuerte Wörter, aber sie folgen den Regeln, die wir anhand des Wortes gelernt haben.
Mit nur dem einen Wort ist das allerdings öde. Daher »trainieren« wir das Modell jetzt einmal auf den Namen von allen Elementen. Hier kommen dann viel mehr Buchstaben vor. Außerdem gibt es manche Übergänge viel häufiger als andere. Ich habe das hier mit der Dicke des Pfeils kenntlich gemacht. So sieht das Modell dann aus:
Und die fetteste Linie gibt uns »i«, »u«, »m«, EOS. Das ist die Endung »-ium«, die ganz viele Elemente haben. Da kann man jetzt gut sehen, dass unser Gefühl für Elementnamen direkt in diesem Modell widergespiegelt wird.
Nun kann man dieses Modell nutzen um neue Namen zu erzeugen. Wir fangen bei GO an und folgen den Pfeilen im Modell. Gehen vom aktuellen Zeichen mehrere Pfeile ab, wählen wir entsprechend der Pfeildicke gewichtet zufällig den nächsten Knoten aus. Das machen wir so lange, bis wie beim EOS angekommen sind (oder 1000 Zeichen haben). Solche Wörter kommen dabei raus:
- An
- Ssium
- Brum
- Arium
- Dytatistadinenium
- Kanerdion
- Bium
- Bodänckeseoberiurum
- Zilaneadium
- Xeranium
Man sieht hier die klare Häufung von »-ium« und »-um« in den Wörtern. Das gibt das Modell so her und damit klingt es auch nach Elementen.
Kontextlänge
Das ganze können wir noch ein bisschen verfeinern. Wir haben das Modell jetzt so gebaut, dass immer nur das letzte Zeichen berücksichtigt wird. Dadurch kommen aber ziemlich schwer aussprechbare Dinge bei raus.
Wir können das Modell nun so erweitern, dass die letzten zwei Zeichen berücksichtigt werden. Womit haben wir beim Beispiel »wasserstoff« dann Übergänge wie »wa« → »s«. Somit bleiben etwas mehr die Silben und Laute erhalten.
Das ganze kann man auch noch mit längeren Kontexten machen. Das Modell bekommt immer mehr Knoten, aber weniger ausgeprägte Verbindungen. Vor allem führt es hier bei dem beschränkten Korpus dazu, dass irgendwann nur noch die bekannten Elementnamen möglich sind. Das ist auch wieder langweilig.
Ich habe hier mal Kontextlängen von 1 bis 4 ausprobiert und dabei immer die bekannten Elemente aus dem Korpus rausgefilert. Es sind also alles nur Quatschnamen. Man kann gut sehen, dass bei Kontextlänge 1 die Namen noch sehr wirr sind. Bei 2 ist es schon besser, aber noch immer etwas merkwürdig. Die bei 3 gefallen wir am besten. Danach hat das Modell Probleme noch neue Dinge zu erzeugen.
- Auen, Bium, Boliumoffodtiumi, Ckef, Dorgaldtenon, Er, F, Fesen, Fffenen, Ganium, Icar, Laseruprstancherarol, Ndium, Nicalin, Onodobiumastelum, Pf, R, Siciumom, Tohickrbn, Xernaum
- Allat, Ameisminium, Antgendium, Asson, Beropium, Cal, Chrium, Coberom, Con, Dym, Erium, Gantithal, Kryptoff, Lanium, Non, Osprom, Pladmium, Queckeliforidium, Sium, Terium
- Calium, Copernickstoff, Darmstat, Germium, Germorium, Kohlen, Kryptonium, Kupfermorium, Mendelenstoff, Nicium, Phor, Platinium, Selevium, Thor, Titantimon, Urancium, Wassium, Wolfrancium
- Oganess, Tennesson
Das war jetzt ein lustiges Quatschprojekt um ein paar Quatschnamen zu erzeugen. Und vielleicht gab es so einen kleinen Einblick in Sprachmodelle, die im aktuellen »KI Hype« immer mehr kommen.