realistische gespräche...
realistische gespräche...
Hallo erstmal,
ich bin relativ neu hier im Forum und habe auch nicht direkt vor ein Adventure zu basteln, aber mich beschäftigt aktuell ein Problem, von dem ich gerne wüsste ob schon andere Leute ähnliche Gedanken hatten.
Angenommen man möchte ein Spiel erschaffen, in welchem alle Charaktere mehr oder weniger über die gesamte Spielzeit hinweg "weiterleben" (d.h. sie arbeiten, werden evtl. krank, gehn abends in die Disko, wenn sie Lust haben), wie könnte man in so einer Situation relativ "natürliche" Gespräche mit solchen Charakteren generieren, d.h. nicht nur 10-20 vorgefertigte Sätze, sondern ein mehr oder weniger frei verfügbares Repertoire an Äußerungen, die jeder Charakter ausgeben kann... und das dann auch noch abhängig davon, was der Spieler schon über den Charakter weiß oder wie stark der Charakter dem Spieler traut, etc.
Kurz und bündig: Wie baue ich eine Engine mit der ich nicht unbedingt chatten kann (freie eingabe des Textes) aber doch NPCs erhalte, mit denen man ein relativ natürliches Gespräch halten kann?
Gibt es hierfür schon Ansätze? (auch theoretische)
Gruß,
Kc
ich bin relativ neu hier im Forum und habe auch nicht direkt vor ein Adventure zu basteln, aber mich beschäftigt aktuell ein Problem, von dem ich gerne wüsste ob schon andere Leute ähnliche Gedanken hatten.
Angenommen man möchte ein Spiel erschaffen, in welchem alle Charaktere mehr oder weniger über die gesamte Spielzeit hinweg "weiterleben" (d.h. sie arbeiten, werden evtl. krank, gehn abends in die Disko, wenn sie Lust haben), wie könnte man in so einer Situation relativ "natürliche" Gespräche mit solchen Charakteren generieren, d.h. nicht nur 10-20 vorgefertigte Sätze, sondern ein mehr oder weniger frei verfügbares Repertoire an Äußerungen, die jeder Charakter ausgeben kann... und das dann auch noch abhängig davon, was der Spieler schon über den Charakter weiß oder wie stark der Charakter dem Spieler traut, etc.
Kurz und bündig: Wie baue ich eine Engine mit der ich nicht unbedingt chatten kann (freie eingabe des Textes) aber doch NPCs erhalte, mit denen man ein relativ natürliches Gespräch halten kann?
Gibt es hierfür schon Ansätze? (auch theoretische)
Gruß,
Kc
- max_power
- Zombiepirat
- Beiträge: 10065
- Registriert: 16.04.2002, 20:30
- Wohnort: Uppsala
- Kontaktdaten:
Das hört sich an, als würde es in Richtung Chat-Bat (hm, ich meine natürlich Chat-Bot; das erinnert mich an du gute alte Zeit, als ich die Gegend als BatMax unsicher machte…) gehen.
Ich habe da jetzt leider keine Informationen, wie man sowas machen kann oder ob das schon jemand in Richtung Adventure benutzt hat. Ich denke, über Chat Bots (suchen bei Google) könntest du fündig werden. Eine ähnliche Technik könnte auch bei Rollenspielen zum Einsatz kommen.
Ansonsten könnte man sicher auch mit evolutionären Algorithmen weiterkommen, ist aber sicher viel zu umständlich und nicht wirklich für den Einsatzzweck passend.
Ich habe da jetzt leider keine Informationen, wie man sowas machen kann oder ob das schon jemand in Richtung Adventure benutzt hat. Ich denke, über Chat Bots (suchen bei Google) könntest du fündig werden. Eine ähnliche Technik könnte auch bei Rollenspielen zum Einsatz kommen.
Ansonsten könnte man sicher auch mit evolutionären Algorithmen weiterkommen, ist aber sicher viel zu umständlich und nicht wirklich für den Einsatzzweck passend.
„Es müsste immer Musik da sein, bei allem was du machst. Und wenn's so richtig Scheiße ist, dann ist wenigstens noch die Musik da. Und an der Stelle, wo's am allerschönsten ist, da müsste die Platte springen und du hörst immer nur diesen einen Moment.“ (Floyd, Absolute Giganten)
naja... so ein richtiger chat-bot soll es ja letztendlich garnicht werden. da hab ich mich schon umgeschaut, die technik ist immer noch um meilen vom ziel entfernt. ich dachte eher an ein system, das einem zwar sätze vorgibt, diese aber in abhängigkeit von dem, was man über den aktuellen gesprächspartner weiß oder nicht weiß.
letztendlich hab ich darüber nachgedacht, weil ich letztens so ne art dating-simulation in die finger bekommen hab hatte allerdings auch mit vorgefertigter story (obwohl multilinear)... und da hab ich überlegt, wie man die charaktere freier agieren lassen könnte...
evolutionäre algorithmen sind da wohl nicht so ganz passend... das könnte in diesem fall höchstens überwacht eingelernt werden und das ist mir dann doch zu aufwändig (wobei ich nichtmal glaube, dass da so gute ergebnisse rauskämen)
mein erster gedanke war sowas:
- speichere informationen über aktuellen zustand eines charakters (wie gehts ihm, was tut er, was ist kürzlich passiert)
- vergleiche diese info mit dem, was der charakter dem spieler vorher schon erzählt hat
- generiere aus der differenz dieser zwei informationen und aus der tatsache wie gut ein charakter auf den spieler zu sprechen ist einen satz, der die informations-differenz ausgleicht.
ja, ich weiß, das ist ziemlich grob und in dieser form auch überhaupt nich umsetzbar, aber vielleicht fällt jemandem was dazu ein
interessant wärs auch, irgendwie eine netzstruktur zwischen die infos zu bringen, so dass der kontext ausgewertet werden kann...
letztendlich hab ich darüber nachgedacht, weil ich letztens so ne art dating-simulation in die finger bekommen hab hatte allerdings auch mit vorgefertigter story (obwohl multilinear)... und da hab ich überlegt, wie man die charaktere freier agieren lassen könnte...
evolutionäre algorithmen sind da wohl nicht so ganz passend... das könnte in diesem fall höchstens überwacht eingelernt werden und das ist mir dann doch zu aufwändig (wobei ich nichtmal glaube, dass da so gute ergebnisse rauskämen)
mein erster gedanke war sowas:
- speichere informationen über aktuellen zustand eines charakters (wie gehts ihm, was tut er, was ist kürzlich passiert)
- vergleiche diese info mit dem, was der charakter dem spieler vorher schon erzählt hat
- generiere aus der differenz dieser zwei informationen und aus der tatsache wie gut ein charakter auf den spieler zu sprechen ist einen satz, der die informations-differenz ausgleicht.
ja, ich weiß, das ist ziemlich grob und in dieser form auch überhaupt nich umsetzbar, aber vielleicht fällt jemandem was dazu ein
interessant wärs auch, irgendwie eine netzstruktur zwischen die infos zu bringen, so dass der kontext ausgewertet werden kann...
- DasJan
- Adventure-Treff
- Beiträge: 14683
- Registriert: 17.02.2002, 17:34
- Wohnort: London
- Kontaktdaten:
- max_power
- Zombiepirat
- Beiträge: 10065
- Registriert: 16.04.2002, 20:30
- Wohnort: Uppsala
- Kontaktdaten:
Hm, evolutionäre Algorithmen sind eigentlich wirklich Blödsinn, du bräuchtest eher etwas wie ein Neuronales Netz oderso, aber auch das müsste ja irgendwie trainiert werden – oder?
Ist auch eine Frage der Komplexität, wie viele Informationen sollen gespeichert werden? Dieser Speicher könnte ja in der Tat ein Neuronales Netz sein und die um den Charakter passierenden Dinge wären dann die Trainigseingaben, die das Netz darauf trainieren, dass es nach einer bestimmtes Aktion anders reagiert. Die andere Frage ist dann, wie die Person reagieren soll, ob die Sätze fertig sein sollen, oder ob selbst die zufällig generiert werden sollten.
Also ich denke, ein Neuronales Netz wäre die Struktur, die du brauchst, ich weiß aber nicht, ob man wirklich so differenzierte Lernregeln aufstellen kann, dass nach einer Aktion die Eingabe (Was will der Spieler von mir?) so stark anders interpretiert werden kann, dass wirklich eine komplett andere Antwort kommt, ohne dass dabei die anderen Wege zu stark verändert würden. Ich denke mal, dass ich mich jetzt nicht verständlich genug ausgedrückt habe.
Was ist ein Neuronales Netz?
Es besteht aus vielen vernetzten Neuronen (oder waren es Perceptren?). Neuronen funktionieren so:
Sie haben beliebig viele Eingänge. Jeder Eingang bekommt ein Gewicht. Die Eingangswerte (im einfachen Fall 0 oder 1) werden mit den Gewichten multipliziert und aufsummiert. Danach folgt eine Schwellwertfunktion: Ist die Summe höher als Wert x ergibt das Neuron 1, sonst 0.
Beim "Trainieren" können die Gewichte sowie der Schwellwert bearbeitet werden.
Um dieses System jetzt auf das Problem zu übertragen (bzw. andersherum), muss man sich natürlich viel tiefer mit Neuronalen Netzen und den schon bekannten Strukturen (z.B. Selbst-organisierende-Merkmalskarten) auskennen, ich hätte auch keine Ahnung, was man da jetzt machen könnte, ich denke nur, dass so ein System die entsprechende Lösung sein könnte. Wäre sicher ein Thema für eine Diplomarbeit.
Und nein (bevor es mir jemand einzelnes unterstellt), ich möchte nicht mit Halbwissen angeben. Ich bin mir auch nicht sicher, ob ich mit dem ganzen Recht habe, aber ich habe nun mal ein wenig in die Richtung gelernt und denke, dass das in diesem Fall wirklich mal passen könnte. Ich habe so viel umsonst gelernt, wäre doch schön, wenn ich endlich mal etwas sinnvolles mit Gelerntem anfangen könnte.
Ist auch eine Frage der Komplexität, wie viele Informationen sollen gespeichert werden? Dieser Speicher könnte ja in der Tat ein Neuronales Netz sein und die um den Charakter passierenden Dinge wären dann die Trainigseingaben, die das Netz darauf trainieren, dass es nach einer bestimmtes Aktion anders reagiert. Die andere Frage ist dann, wie die Person reagieren soll, ob die Sätze fertig sein sollen, oder ob selbst die zufällig generiert werden sollten.
Also ich denke, ein Neuronales Netz wäre die Struktur, die du brauchst, ich weiß aber nicht, ob man wirklich so differenzierte Lernregeln aufstellen kann, dass nach einer Aktion die Eingabe (Was will der Spieler von mir?) so stark anders interpretiert werden kann, dass wirklich eine komplett andere Antwort kommt, ohne dass dabei die anderen Wege zu stark verändert würden. Ich denke mal, dass ich mich jetzt nicht verständlich genug ausgedrückt habe.
Was ist ein Neuronales Netz?
Es besteht aus vielen vernetzten Neuronen (oder waren es Perceptren?). Neuronen funktionieren so:
Sie haben beliebig viele Eingänge. Jeder Eingang bekommt ein Gewicht. Die Eingangswerte (im einfachen Fall 0 oder 1) werden mit den Gewichten multipliziert und aufsummiert. Danach folgt eine Schwellwertfunktion: Ist die Summe höher als Wert x ergibt das Neuron 1, sonst 0.
Beim "Trainieren" können die Gewichte sowie der Schwellwert bearbeitet werden.
Um dieses System jetzt auf das Problem zu übertragen (bzw. andersherum), muss man sich natürlich viel tiefer mit Neuronalen Netzen und den schon bekannten Strukturen (z.B. Selbst-organisierende-Merkmalskarten) auskennen, ich hätte auch keine Ahnung, was man da jetzt machen könnte, ich denke nur, dass so ein System die entsprechende Lösung sein könnte. Wäre sicher ein Thema für eine Diplomarbeit.
Und nein (bevor es mir jemand einzelnes unterstellt), ich möchte nicht mit Halbwissen angeben. Ich bin mir auch nicht sicher, ob ich mit dem ganzen Recht habe, aber ich habe nun mal ein wenig in die Richtung gelernt und denke, dass das in diesem Fall wirklich mal passen könnte. Ich habe so viel umsonst gelernt, wäre doch schön, wenn ich endlich mal etwas sinnvolles mit Gelerntem anfangen könnte.
„Es müsste immer Musik da sein, bei allem was du machst. Und wenn's so richtig Scheiße ist, dann ist wenigstens noch die Musik da. Und an der Stelle, wo's am allerschönsten ist, da müsste die Platte springen und du hörst immer nur diesen einen Moment.“ (Floyd, Absolute Giganten)
hmmm... ja an ein neuronales netz habe ich auch schon gedacht, aber da bekommt man dieselben probleme wie bei evolutionären algorithmen... man benötigt zu viele trainingsdaten und das ergebnis ist nicht wirklich kontrollierbar.
zum durchforsten von uni-seiten: ich hab jetzt schon einiges zum thema wissensrepräsentationen für kontext-verstehen gelesen, aber das passende ist irgendwie nicht dabei...
zum durchforsten von uni-seiten: ich hab jetzt schon einiges zum thema wissensrepräsentationen für kontext-verstehen gelesen, aber das passende ist irgendwie nicht dabei...
- Certain
- Rätselmeister
- Beiträge: 1908
- Registriert: 26.07.2002, 01:32
So ganz ohne Training kommt keine der Methoden des optimierenden Lernens aus (wie der Name ja schon andeutet ), das ist ja leider das "blöde".
Ich würde das ganze eher als eine Erweiterung der klassischen geskripteten Dialoge implementieren. Jedem Gesprächsbeitrag könntest Du eine Vielzahl von Flags/Attributen zuordnen. Anhand von globalen Variablen ("dieses oder jenes Ereignis ist bereits eingetroffen" etc.) könntest Du daraus für jeden der Antwortsätze eine "Auftretungswahrscheinlichkeit" berechnen.
Das ganze erfordert natürlich auch extrem viel Arbeit, aber das Ergebnis ist dafür sehr gut abseh- und kontrollierbar.
Und wenn du unbedingt irgendwelche schönen KI-Themen dabei verwursten möchtest: hier könnte man auf Bayssche Netze zurückgreifen.
Ich würde das ganze eher als eine Erweiterung der klassischen geskripteten Dialoge implementieren. Jedem Gesprächsbeitrag könntest Du eine Vielzahl von Flags/Attributen zuordnen. Anhand von globalen Variablen ("dieses oder jenes Ereignis ist bereits eingetroffen" etc.) könntest Du daraus für jeden der Antwortsätze eine "Auftretungswahrscheinlichkeit" berechnen.
Das ganze erfordert natürlich auch extrem viel Arbeit, aber das Ergebnis ist dafür sehr gut abseh- und kontrollierbar.
Und wenn du unbedingt irgendwelche schönen KI-Themen dabei verwursten möchtest: hier könnte man auf Bayssche Netze zurückgreifen.
Bye,
Certain
Certain
-
- Profi-Abenteurer
- Beiträge: 915
- Registriert: 26.07.2003, 19:10
- Wohnort: Osaka
Sätze in Abhängigkeit, wieviel man über die Gesprächspartner weiß, kannst du ja über Variablen und so weiter verwirklichen. Das ist natürlich nicht ganz einfach und wird einen ziemlichen Wust an Scripting ergeben, bei dem man aufpassen muss, die Übersicht nicht zu verlieren, aber zu versuchen, irgendwelche künstlichen Intelligenz Algorhythmen programmierst.
Ich merke gerade, dass Certain fast dasselbe geschrieben hat wie ich. ABer ich will jetzt natürlich trotzdem auch posten
Ich merke gerade, dass Certain fast dasselbe geschrieben hat wie ich. ABer ich will jetzt natürlich trotzdem auch posten
- Shodan
- Hobby-Archäologe
- Beiträge: 147
- Registriert: 22.11.2003, 00:42
- Wohnort: Bodenheim/Porta Westfalica
- Kontaktdaten:
Neuronale Netze sind meiner Meinung nach keine Lösung, da es sich dabei lediglich um Klassifikatoren handelt. Könntest du die Dialoge auf ein Klassifikationsproblem zurückführen, könntest du für jede Klasse ein Neuron trainieren und hättest sogar noch die Chance, dass eine gewisse "Verallgemeinerungsfähigkeit" entsteht, so dass Daten klassifiziert werden können, die nicht zum Trainingsdatensatz gehörten.
Ich habe mir vor einiger Zeit mal folgendes überlegt: Hätte man eine größere Zahl von Variablen die den Grundzustand einer Person beschreiben, z.B. Ärger, Freude, Stress, usw., könnte man ein neuronales Netz trainieren Kombinationen dieser "Grundemotionen" in komplexere Klassen einzuordnen.
Das Netz könnte zum Beispiel eine Aussage darüber treffen ob die Person "ungeduldig" ist wenn z.B. eine Kombination aus leichtem Ärger und Stress vorliegt -> dann würde sie sich eher knapp ausdrücken oder die Antworten auf Fragen ganz verweigern.
Ich sehe aber keine Möglichkeit natürliche Sprache direkt aus solchen emotionalen Klassen zu erzeugen. Ohne vorgeschriebene (Lücken-)Texte wird sich das alles ähnlich künstlich anhören wie das was die Chat-Bots so fabrizieren.
Ich hab gestern auf die Anregung von max_power hin mal nach Chat-Bots gesucht und alle die ich ausprobiert habe waren sowas von dämlich (wenn das Wort für ein Programm zutreffen kann) das ich nicht begreifen kann, wie die überhaupt mit Menschen verwechselt werden könn(t)en. Die Programmierer behaupten ja immer gerne, Testpersonen damit getäuscht zu haben
Ich habe mir vor einiger Zeit mal folgendes überlegt: Hätte man eine größere Zahl von Variablen die den Grundzustand einer Person beschreiben, z.B. Ärger, Freude, Stress, usw., könnte man ein neuronales Netz trainieren Kombinationen dieser "Grundemotionen" in komplexere Klassen einzuordnen.
Das Netz könnte zum Beispiel eine Aussage darüber treffen ob die Person "ungeduldig" ist wenn z.B. eine Kombination aus leichtem Ärger und Stress vorliegt -> dann würde sie sich eher knapp ausdrücken oder die Antworten auf Fragen ganz verweigern.
Ich sehe aber keine Möglichkeit natürliche Sprache direkt aus solchen emotionalen Klassen zu erzeugen. Ohne vorgeschriebene (Lücken-)Texte wird sich das alles ähnlich künstlich anhören wie das was die Chat-Bots so fabrizieren.
Ich hab gestern auf die Anregung von max_power hin mal nach Chat-Bots gesucht und alle die ich ausprobiert habe waren sowas von dämlich (wenn das Wort für ein Programm zutreffen kann) das ich nicht begreifen kann, wie die überhaupt mit Menschen verwechselt werden könn(t)en. Die Programmierer behaupten ja immer gerne, Testpersonen damit getäuscht zu haben