Ich versuche mich im Auftrage eines befreundeten Dozenten an einem Tool, welches von Studenten erstellte sog. "Concept Maps" automatisiert mit einer Vorgabe vergleichen und bewerten soll. Die ConceptMaps werden einheitlich mit der Freeware CMapTools erstellt und liegen als XML vor.
Wem das nichts sagt: ConceptMaps sehen ähnlich aus wie Status-Diagramme oder Aktionsdiagramme. Sie bestehen aus "Knoten" (Zustände, Objekte) und dazwischen verlaufenden "Kanten" (Vorgänge, Beziehungen), siehe Bild.
Rein "mechanisch" lassen sich die Bestandteile dank XML gut isolieren in "concepts" (die Knoten), in "labels" (die Beschriftung/Benennung der Verbindungen) und "connections", mit welcher Verbindung welche Knoten verbunden sind.
Das Problem: Während die Beschriftung der Knoten in der Aufgabenstellung vorgegeben wird und damit auch bei den Studenten immer gleich ist, werden die Verbindungen von diesen frei benannt. Um nun festzustellen, dass z.B. die Beschriftung "umwandeln" und "konvertieren" in einem Falle als synonym (und damit richtig) gewertet werden sollen, will ich ein lokales LLM (z.B. gemma3 oder llama3.2) unter der Ausführung von Ollama benutzen.
Langer Rede kurzer Sinn: Trotz vielfältiger Bemühungen bei der Formulierung des Prompt, sind alle getesteten Modelle (die auf meinem Laptop M2 16GB laufen), extrem kleinkariert, geradezu Krümel kackend. Beispiel:
Frage: "Sind die Begriffe „umwandeln“ und „konvertieren“ umgangssprachlich auf dem Niveau von Grundschülern als gleichwertig zu betrachten? Antworte mit Ja“ oder „Nein“ und einer kurzen Begründung."
Antwort: "Nein. 'Konvertieren' impliziert oft eine explizite Umwandlung von einer Darstellung in eine andere, beispielsweise von einer Zahlensystem in ein anderes. 'Umwandeln' ist allgemeiner und kann sich auf eine Veränderung in Form, Struktur oder Funktion beziehen."
Nimm ein anderes, ggf. größeres Modell. Möglicherweise ist deine Hardware zu klein um bessere Antworten zu bekommen.
Oder verwende chatgpt et.al. um den Prompt zu optimieren.
Test bei https://gemma3.cc/chat mit Gemma 3n
System: Du bist ein Sprachassistent für Grundschüler.
Du darfst ausschließlich mit “Ja” oder “Nein” antworten und musst immer eine kurze,
einfache Begründung geben.
Keine anderen Antworten sind erlaubt.
User: Sind die Begriffe „umwandeln“ und „konvertieren“ umgangssprachlich
auf dem Niveau von Grundschülern als gleichwertig zu betrachten?
Antwort:
Ja, weil beide Wörter bedeuten, etwas in eine andere Form zu bringen.
Gemma 3 12B : Nein, weil “konvertieren” ein schwieriges Wort ist
Gemma 3 27B : Nein, weil “konvertieren” nicht jeder kennt.
manchmal passen die Antworten von 27b auch
System: Du bist ein Sprachassistent
Du darfst ausschließlich mit “Ja” oder “Nein” antworten und musst immer eine kurze,
einfache Begründung geben.
Keine anderen Antworten sind erlaubt.
User: Ist die Bedeutung der Begriffe „umwandeln“ und „konvertieren“ umgangssprachlich als gleichwertig zu betrachten? Es geht um eine ungefähre Aussage.
System: Du bist ein Sprachassistent
Du darfst ausschließlich mit “Ja” oder “Nein” antworten und musst immer
eine kurze,
einfache Begründung geben.
Keine anderen Antworten sind erlaubt.
User: Ist die Bedeutung der Begriffe „umwandeln“ und „konvertieren“
umgangssprachlich als gleichwertig zu betrachten? Es geht um eine
ungefähre Aussage.
Danke für den Versuch. Das Ergebnis:
Nein.
Es gibt subtile Unterschiede in der Bedeutung.
Für ein einzelnes Wort sind die Ergebnisse tatsächlich beeindruckend.
In den ConceptMaps kommen für die Connections aber auch Ausdrücke wie "lesen von", "gehen zu", "kann nicht" usw. vor - da bleibt Openthesaurus stumm. Das ist dann doch wohl eher für eine KI ...
Manchmal sind zunächst sehr einfach aussehende Dinge deutlich komplizierter als erwartet.
Nächster Versuch, verschieben der Randbedingungen in den System Prompt
System: Du bist ein Sprachassistent
Du darfst ausschließlich mit “Ja” oder “Nein” antworten und musst immer
eine kurze,
einfache Begründung geben.
Keine anderen Antworten sind erlaubt. Es geht um eine ungefähre Aussage, subtile Unterschiede sollen ignoriert werden.
User: Ist die Bedeutung der Begriffe „umwandeln“ und „konvertieren“
umgangssprachlich als gleichwertig zu betrachten?
Antwort
Ja, weil beide Wörter eine Veränderung von etwas in etwas anderes beschreiben.
Mit dem System Prompt kommt sogar sowas raus:
User: Ist die Bedeutung der Begriffe „laufen“ und „gehen“
umgangssprachlich als gleichwertig zu betrachten?
Antwort: Ja, weil beide Wörter eine Fortbewegung beschreiben.
In den ConceptMaps kommen für die Connections aber auch Ausdrücke wie
"lesen von", "gehen zu", "kann nicht" usw. vor - da bleibt Openthesaurus
stumm. Das ist dann doch wohl eher für eine KI ...
Ok, das war mir nicht bewusst. Deswegen ein neuer Ansatz (diesmal mit KI
;-)).
Antwort: "Nein. 'Konvertieren' impliziert oft eine explizite Umwandlung
von einer Darstellung in eine andere, beispielsweise von einer
Zahlensystem in ein anderes. 'Umwandeln' ist allgemeiner und kann sich
auf eine Veränderung in Form, Struktur oder Funktion beziehen."
Da hat die KI ja völlig recht.
Ob zwei Ausdrücke synonym sind oder nicht, hängt sehr oft vom Kontext
ab. Du musst also in dem Prompt neben den beiden auf Synonymität
abzufragenden Labels auch irgendwie den Kontext mitliefern.
Bei der Concept Map steckt der Kontext eines Labels im Start- und
Endknoten des zugehörigen Pfeils.
1
Label
2
Cstart ----------> Cend
Aus Cstart, L und Cend lässt sich (zumindest in deinen Beispielen)
leicht eine Aussage bilden, die sowohl das Label als auch den Kontext
enthält, nämlich
<Cstart> <Label> <Cend>
Um zwei Labels Label1 und Label2 zu vergleichen, setzt du sie in den
gleichen Kontext (also entweder in den Kontext von Label1 oder den von
Label2) und fragst die KI nach der Übereinstimmung der beiden Aussagen
<Cstart> <Label1> <Cend>
<Cstart> <Label2> <Cend>
Um die Antwort leichter auswerten zu können, bittest du die KI, ihre
Entscheidung zu quantifizieren.
Beispiel:
Die Cocept Map enthält die beiden folgenden Beziehungen:
1
frisst
2
Katze ------------> Maus
3
4
verzehrt
5
Wolf --------------> Schaf
Um zu ermitteln, ob "frisst" und "verzehrt" in diesem Zusammenhang
synonym sind, generierst du die Anfrage
1
Bewerte die Übereinstimmung der beiden folgenden Aussagen auf einer
2
Skala von 0 (keine Übereinstimmung) bis 10 (perfekte Übereinstimmung):
3
4
"Katze frisst Maus"
5
6
"Katze verzehrt Maus"
oder (mit dem anderen Kontext):
1
Bewerte die Übereinstimmung der beiden folgenden Aussagen auf einer
2
Skala von 0 (keine Übereinstimmung) bis 10 (perfekte Übereinstimmung):
3
4
"Wolf frisst Schaf"
5
6
"Wolf verzehrt Schaf"
Du kannst auch beide Anfragen stellen und von den Antworten den
Mittelwert bilden. Das ist insbesondere dann sinnvoll, wenn die beiden
Kontexte sehr unterschiedlich sind.
ChatGPT liefert in beiden Fällen die Bewertung 9 von 10 und eine
nachvollziehbare Begründung. Tatsächlich hat "frisst" und "verzehrt" in
diesem Kontext fast die gleiche Bedeutung.
Nun behalten wir das "frisst" bei und ersetzen "verzehrt" nacheinander
durch andere Texte:
"ernährt sich von" -> 7 von 10
"jagt" -> 4 von 10
"spielt mit" -> 2 von 10
"hat längeren Schwanz als" -> 0 von 10
Auch diese Ergebnisse sind sehr gut nachvollziehbar.
Du musst jetzt durch Tests mit anderen Beispielen einen geeigneten
Schwellwert für die Bewertung finden. Er wird vermutlich irgendwo im
Bereich von 6 bis 8 liegen.
Vielen Dank für die umfangreichen und gehaltvollen Ausführungen, werde ich versuchen umzusetzen.
Ich bin aber jetzt erstmal für einige Stunden unterwegs, melde mich wieder.
Frage für später: Ist es sinnvoll die "temperature" auf Null zu setzen, um auf die gleiceh Frage auch möglichst immer die gleiche Antwort zu bekommen?
Die KI von DuckDuckGo reagiert auf geschickteres Prompting mit einer geschickteren Antwort:
1
Du bist ein Sprachassistent für Grundschüler. Du darfst ausschließlich mit “Ja” oder “Nein” antworten und musst immer eine kurze, einfache Begründung auf dem Niveau von Grundschülern geben.
2
3
Sind die Begriffe „umwandeln“ und „konvertieren“ umgangssprachlich als gleichwertig zu betrachten?
4
.
5
Mistral Small 3
6
7
Ja, weil man mit beiden Wörtern sagen kann, dass man etwas in etwas anderes verändert.
Tipp: Mal mit Prompt-Engineering auseinandersetzen.
/set system "Du bist ein Sprachassistent der Begriffe vergleicht. Du musst immer mit 'Ja' oder 'Nein' sowie einer Wahrscheinlichkeit und einer ganz kurzen, einfachen Begründung antworten. Es geht um eine ungefähre Aussage, subtile Unterschiede sollen ignoriert werden. Es geht um umgangssprachliche Vergleiche zwischen Begriffen, d.h. ob diese eine gleichwertige Bedeutung haben"
/set parameter temperature 0
vergleiche „umwandeln“ und „konvertieren“
Antwort:
Ja, Wahrscheinlichkeit: 95%. Beide bedeuten eine Veränderung, aber “unwandeln” klingt, als würde man etwas komplett neu erschaffen, während “konvertieren” eher das Umwandeln in ein anderes Format bedeutet.
Man lernt ja (hoffentlich) nie aus. Also bin ich bei meinen Recherchen auf eine ähnliche, aber doch deutlich effektivere Art der KI-Nutzung zur Ermittlung der semantischen Abstände (bzw. Nähe) von Begriffen gestossen.
Die Stichworte dazu lauten "embedding" und "vektoren". Man kann mit einem geeigneten Prompt ein allgemeines LLM oder besser noch, ein darauf spezialisiertes Modell (mxbai-embed-large, nomic-embed-text ...) dazu bringen, diese Daten herauszurücken.
Dieses "Vektorisieren" macht grundsätzlich jedes LLM, um überhaupt zu verstehen, was man von ihm will. Die darauf spezialisierten Modelle sind aber auf das Notwendigste abgespeckt für "normale" Dialoge garnicht zu gebrauchen. Dafür sind sie rel. klein, schnell und genau dafür optimiert.
Ich bin gerade dabei, mir das Thema zu erschließen und in meinem Programmcode einzubauen. Bei ersten Tests erhalte ich Ergebnisse nach diesem Prinzip:
Bei ersten Tests erhalte ich Ergebnisse nach
diesem Prinzip:
"Master": "Auto",
"Ähnlichkeiten":
"PKW": 0.96,
"Zug": 0.76
Man muss bei solchen vergleichen ja immer überlegen welchen Aspekt der Ähnlichkeit man berücksichtigen will, z.B. über einen gemeinsamen Oberbegriff "Transportmittel", oder aber über Attribute "was kostet", "ist grün", "hat 4 Räder".
Die Ähnlichkeit hat viele Dimensionen, um das auf einen skalaren Prozentwert zu mappen muss man schon genauer sagen was dafür berücksichtigt werden soll und was nicht.
Michael D. schrieb im Beitrag #7927579:
"Zug": 0.76
Man muss bei solchen vergleichen ja immer überlegen welchen Aspekt der
Ähnlichkeit man berücksichtigen will, z.B. über einen gemeinsamen
Oberbegriff "Transportmittel", oder aber über Attribute "was kostet",
"ist grün", "hat 4 Räder".
Das ist zweifellos ein extrem wichtiger Aspekt, den viele Gelegenheitsnutzer vermutlich garnicht so deutlich auf dem Schirm haben.
Je länger man sich damit beschäftigt bzw. mit den Ergebnissen unzufrieden ist, desto deutlicher erkennt man, wie wichtig "prompt engineering" ist - nicht umsonst gibts dazu inzwischen dicke Bücher und eigene Lehrstühle an Universitäten und Hochschulen.
Je länger man sich damit beschäftigt bzw. mit den Ergebnissen
unzufrieden ist, desto deutlicher erkennt man, wie wichtig "prompt
engineering" ist - nicht umsonst gibts dazu inzwischen dicke Bücher und
eigene Lehrstühle an Universitäten und Hochschulen.
Viele Firmen hoffen darauf, Angestellte der unteren Gehaltsklasse durch billige LLM ersetzten zu können. Wenn man dafür aber neue Prompt-Ingeniere einstellen muss, wird es wieder teuer.
Ich lasse mich aber nicht zum Prompt-Ingeneur umschulen, denn das ist mit Sicherheit der nächste Job, der weg optimiert wird.
Du musst am Prompt Engineering arbeiten und solltest mit einem System Prompt arbeiten. Du sagst nicht aus, auf welchen Aspekt sich der Vergleich beziehen soll. Rein von den Worten sind 2 Worte gleich und nur eines anders, d.h. das alleine ist schon ein match von 66% auf Wort und Satzbau Ebene. Auf semantischer Ebene natürlich nicht.
Hier ein verbesserter Versuch:
~ ollama run gemma3:4b-it-qat
/set system "Du bist ein Sprachassistent der die Aussage 'Katze frisst Maus' mit anderen Aussagen vergleicht. Du musst immer mit 'Ja' oder 'Nein' sowie einer Wahrscheinlichkeit und einer ganz kurzen, einfachen Begründung antworten. Es geht um eine ungefähre Aussage wie sich die Interaktion sich auf Maus und Katze auswirkt, subtile Unterschiede sollen ignoriert werden. Es geht um umgangssprachliche Vergleiche, d.h. ob diese eine gleichwertige Bedeutung haben"
/set parameter temperature 0
vergleiche "Katze verspeist Maus"
vergleiche "Katze liebt Maus"
vergleiche "Katze verzehrt Maus"
vergleiche "Katze verehrt Maus"
Dann sehen die Antworten ganz anders aus:
vergleiche "Katze verspeist Maus": Ja, 95%, Beide drücken eine Aktivität der Katze, die das Leben der Maus beendet, aus.
vergleiche "Katze liebt Maus": Nein, 70%, "Lieben" impliziert eine positive Emotion, während "verspeist" eine reine Handlung beschreibt.
vergleiche "Katze verzehrt Maus": Ja, 90%, Beides beschreiben das Fressen der Maus durch die Katze, "verzehren" ist jedoch etwas formeller als "verspeisen".
vergleiche "Katze verehrt Maus": Nein, 60%, "Verehren" drückt eine tiefe Wertschätzung aus, die nicht unbedingt mit Fressen zusammenhängt.
Ich lasse mich aber nicht zum Prompt-Ingeneur umschulen, denn das ist
mit Sicherheit der nächste Job, der weg optimiert wird.
Du kannst davon ausgehen, dass sich das benötigte Profil der Kopf-Arbeitnehmer in immer kürzeren Abständen ändern wird. Die eigentliche Frage ist, wie flexibel man sich an die jeweilige Situation anpassen kann und wie gut man die nächsten Anforderungen vorhersehen kann.
Das Problem mit dem Prompt Engineering ist nicht neu, man hat schon immer Leute gebraucht, welche den Übergang vom der Problem-Domain in die Lösungs-Domain übersetzen, d.h. Requirement Ingenieure und (Software)Architekten.
Früher gab es auch schon Anforderungen wie "Ich brauche ein Pferd welches 100 km/h laufen kann und 20 t tragen kann." Die Lösung war der LKW und kein gigantisches Pferd.
Die Leute aus der Problem-Domain wissen eben nicht wie sie sich ausdrücken müssen, damit sie verstanden werden. Mal sehen, wie und wann die KI das hinbekommt.