Sprachalgorithmen

filth

Bekanntes Mitglied
Hallo,

ich programmiere einen Chat-Bot und bin auf der Suche nach Ideen, wie man ihm das "Sprechen" beibringen kann.
Was ich bis jetzt gemacht habe, ist dass alle Sätze, in denen der Bot angesprochen wird, gespeichert werden und seine Anrede durch einen Placeholder ersetzt wird. Er antwortet dann mit einem zufälligen Satz und setzt den Nicknamen der Person ein.

Ist soweit ganz witzig aber natürlich ausbaufähig.

Was ich mir überlegt hatte, ist Tabellen mit Wortgruppen anzulegen, also Verb, Objekt usw. Er bedient sich dann aus den Tabellen und bildet dann zumindest halbwegs grammatikalisch korrekte Sätze.

Hättet ihr noch Ideen, wie man das angehen könnte?

Danke!
 
G

Gast2

Gast
Der Russel and Norvig ist schon nicht schlecht aber eigentlich eher eine breite Übersicht über KI im Allgemeinen und die Abschnitte über Computerlinguistische Probleme recht schmal.

Du suchst also NLP (Natural language processing) um erstmal den user input zu "verstehen" und aus dem Domänenwissen eine "richtige" Antwort zu erzeugen.

Natürlich kannst du es schon sehr sehr einfach starten und den Eingabe Satz nach z.B. Schlagworten absuchen, gewichten und daraus eine passende Antwort extrahieren.

Sprich aus:
[c]Mir[/c] ist so [c]langweilig[/c]
die beiden worten "mir" sowie "langweilig" verknüpfen und aus einem Katalog an möglichen Fragen und Antworten wählen:
1) Warum ist dir langweilig?
2) Wollen wir etwas spielen?
3) Mir ist auch langweilig, scheiss Tag
etc.

Das sind relativ einfache Tricks die schon viele Laien sehr verblüffen - wenn du dir die richtige Schlagworte suchst und richtig gewichtest hast du ein sehr sehr gutes Ergebnis ohne wirklich viel Hirnschmalz in NLP und KI stecken zu müssen.

Aus grammatischen Fragmenten und einen Wörterbuch sinnvolle Sätze zu generieren ist sehr aufwändig und nichst was man mal eben nebenbei macht.
 

filth

Bekanntes Mitglied
Hallo,

eine ähnliche Idee hatte ich auch. Es können ja Beziehungen zwischen Wörtern / Sätzen gespeichert werden.
Dh der Bot plappert einen zufällig aufgezeichneten Satz los. Wenn jemand drauf reagiert, geht der Bot davon aus, dass der Mensch einen sinnvollen Bezug herleiten kann und erstellt eine Beziehung zwischen seinem Satz und der Antwort.

Beim nächsten Vorkommen des Satzes kann er die Antwort ausgeben, da ja ein Bezug existiert.

Vielleicht könnte man diese Beziehungen auch irgendwie, ähnlich wie in einem neuronalen Netz gewichten? Ich weiß aber gerade nicht wie die Bedingungen dafür sein müssten.

Viele Grüße
Alex
 
G

Gast2

Gast
Ich versteh nicht so ganz was du mit "sinnvollen Bezug" meinst. Grade die Wörter "Sinn" und "Bezug" (Semantik und Pragmatik) sind die herausfodernsten Aufgaben der NLP ;)

Der Bot plappert einfach drauf los? Wie hast du dir denn das Usecase Szenario vorgestellt? ein Mulituser Chatroom mit einem Bot? Eine One-on-one Situation mit einem Bot und einem User?

In einer Multiuserumgebung wird es für den Bot sehr schwierig auf Eingaben zu reagieren da der Bot ja gar nicht "weiß" ob er gemeint war.

Ich würde mit einer One-on-one Situation anfangen und dann später ausbauen. Guck dir mal das Eliza-Projekt an.

ELIZA ? Wikipedia
 

filth

Bekanntes Mitglied
Eliza kenne ich, aber ist nicht ganz das, was ich will.

Das Szenario sieht so aus, dass der Bot in einem Chatroom angesprochen wird und dadurch reagiert.

Mit sinnvollen Bezug meine ich Reaktionen, die zu dem Ausgangssatz passen.
Beispielsweise:
UserA -> "Schönes Wetter heute"
Bot -> "finde ich auch"

Das ist zwar wahrscheinlich noch keine KI in dem Sinne, jedoch reagiert der Bot so, dass es in dem Zusammenhang einen Sinn ergibt.
 

Marco13

Top Contributor
"Bei der Einweihung der neuen Kirchenglocken schüttelten sich der Pfarrer und der Bürgermeister die Hände. Danach wurden sie aufgehängt."

Du wirst sicher schon einiges recherchiert haben, über "theoretisches" wie Turing-Tests und "praktisches" wie www.elbot.de gestolpert sein. Ein Problem, mit dem KI'ler teilweise zu kämpfen haben ist, dass alles, sobald es erstmal implementiert ist und funktioniert, keine "Künstliche Intelligenz" mehr ist, sondern nur noch ein stupide und deterministisch ablaufender Algorithmus. Zu erfassen, was "Sinn ergibt" ... das haben schon andere versucht. (50 jahre lang, 8 Stunden am Tag, und sind gescheitert :D). Manchmal sage ich...
Haha, der Hund hat nen Schinken geklaut :)
... irgendwelche SO zusammenhanglose Sachen, dass man mir vorwerfen würde, ich wäre ein schlechter Bot ;)
Aber man darf den Computern nicht übel nehmen, wenn sie die Menschen nicht verstehen. (Dieser Satz zwei Bedeutungen aber kein Verb).
 

filth

Bekanntes Mitglied
Ich habe mir folgendes Vorgehen überlegt:

Der Bot zeichnet ja alles auf, wenn er angesprochen wird. Nun stellen wir uns folgende zwei Konversationen vor:

1->
Mensch: bot, hau ab
Bot: warum?
Mensch: du nervst

2->
Mensch: bot, ich esse
Bot: warum?
Mensch: hab hunger

Dabei entsteht das folgende Verknüpfungsnetz


Theoretisch könnte der Bot jetzt plappern:
Bot: "hau ab"
Mensch: "warum?"
Bot: "hab hunger"

Jetzt müsste man überlegen, wie man das intern darstellt, wenn nach dieser Satzfolge dem Bot "beigebracht" wird, dass dieser Weg schlecht ist. Hat jemand eine Idee? Man könnte ja zb die Kanten gewichten. Also hätten in der Ausgangssituation alle Kanten das gleiche Gewicht. Wenn "hau ab"->"warum"->"hab hunger" von einem Menschen ein negatives Flag bekommt, müssten die Gewichte so verändert werden, dass dieser Weg nicht mehr gewählt wird, sondern nur "hau ab"->warum->du nervst bzw die anderen Möglichkeiten auf dieser Verzweigung. Wie könnte man das lösen?
 
Zuletzt bearbeitet:

Neue Themen


Oben