Bot-przewodnik oprowadzający po mieście w środowisku gry After the Plague.

Raport zaliczeniowy z projektu Metody i algorytmy sztucznej inteligencji, ARE3513
Autor:
Adam Nowakowski
Prowadzący:
dr inż. Witold Paluszyński
Data:
16.06.08

Bot-guide for touring around a city in After the Plague game.

This report has been prepared as a requirement for the course: Methods and algorithms of artificial intelligence).
Author:
Adam Nowakowski
Conducted by:
dr inż. Witold Paluszyński
Date:
16 Jun 08

The goal of the project was the creation of a bot able to talk about a chosen city in the mud After the Plague. The bot should understand asked questions and build correct replies - as long as the question was asked about the given city.

The project was completed using the AIML implementation for LPC (After the Plague's language) which had to be slightly modified to adjust it to the mudlib.

Various limitations of AIML, as well as specifics of the game's environment made it impossible to fully utilise the language for the given purpose, however the limited range of topics the bot was supposed to cover allowed him to answer questions accurately.

Opis problemu

Przedmiotem projektu było stworzenie bota umożliwiającego prowadzenie rozmów na temat wybranego miasta w środowisku gry tekstowej After the Plague. Bot powinien rozumieć zadawane pytania oraz poprawnie formułować na nie odpowiedzi - w zakresie dotyczącym informacji o danym mieście.

Do realizacji projektu wykorzystano implementację języka AIML w LPC (języku w którym napisana jest After the Plague), zmodyfikowaną na potrzeby środowiska gry.

Opis języka AIML

AIML (Artificial Intelligence Markup Language) jest odmianą języka XML zaadoptowaną do tworzenia programów posługujących się językiem naturalnym i zdolnych do prowadzenia rozmów z ludźmi. Oprócz bazy wiedzy bota (zawartej w pliku XML) konieczny jest także interpreter, który na podstawie otrzymanych zapytań wygeneruje odpowiedzi.

Podstawowym elementem bazy wiedzy jest kategoria, definiująca odpowiedź na konkretne pytanie:

	<category>
		<pattern>WHAT IS YOUR NAME</pattern>
		<template>My name is John.<template>
	</category>
	

Powyższy przykład pokazuje też, iż wzorce zapytań są w pewnym stopniu ustandardyzowane - usuwane są znaki interpunkcyjne oraz wszelkie litery zamieniane są na duże.

Ponadto w celu uogólnienia wzorca możliwe jest stosowanie tzw. wildcards, czyli znaków zastępujących dowolny ciąg znaków. W AIMLu jest to znak * (gwiazdka). Część zapytania zastąpioną gwiazdką można zacytować w odpowiedzi dzięki znacznikowi <star/>:

	<category>
		<pattern>MY NAME IS *</pattern>
		<template>Nice to meet you, <star/>.<template>
	</category>
	

Aby uniknąć wielokrotnego definiowania tej samej odpowiedzi w przypadku bardzo różnych zapytań, można posłużyć się znacznikiem <sr>, który definiuje przekierowanie do innego zapytania:

	<category>
		<pattern>WHO ARE YOU</pattern>
		<template><sr/>WHAT IS YOUR NAME</sr><template>
	</category>
	

Kolejnym istotnym elementem budowy "inteligentnego" rozmówcy jest zdolność określania kontekstu rozmowy na podstawie jej wcześniejszego przebiegu. W AIMLu jest to możliwe w ograniczonym zakresie dzięki znacznikowi <that>. Określa on poprzednią odpowiedź udzieloną przez bota:

	<category>
		<pattern>YES</pattern>
		<that>DO YOU LIKE MOVIES</that>
		<template>What's your favorite movie?</template>
	</category>
	

Ponadto można również grupować kategorie zapytań przy pomocy znacznika <topic>, co umożliwi botowi wybór odpowiedzi tematycznie powiązanej z zapytaniem, w sytuacji gdy odpowiedź dokładna nie zostanie znaleziona.

Aby zapewnić pewną nieprzewidywalność zachowań robota, można skorzystać ze znacznika <random>, który pozwala zdefiniować listę losowych odpowiedzi możliwych do użycia po danym zapytaniu.

	<category>
		<pattern>WHO IS JOHN</pattern>
		<template>
			<random>
				<li>Sorry, I don't know him</li>
				<li>Unfortunately I've never heard of such person</li>
			</random>
		</template>
	</category>
	

Ograniczenia

Specyfika środowiska gry oraz użytej implementacji AIMLa wymusiły pewne ograniczenia w tworzonych wzorcach oraz możliwościach bota.

Ograniczenia od strony interpretatora AIML:

Ponadto ze względu na rozgrywkę czasu rzeczywistego oraz jednowątkowość gry, wprowadzone są ograniczenia czasu wykonywania danej funkcji, a to drastycznie skraca czas, jaki bot może poświęcić na analizę zapytania. W rezultacie kategorie muszą być proste. Wyeliminowanie tego problemu wymagałoby znacznego zmodyfikowania interpretatora AIML.

Przykłady działania

Przykładowa rozmowa z botem:

You say to Chatbot [human] in your mind: Hi.

Chatbot [human] asks in Farsi: Hello traveller, do you want me to tell you about this city?

You say to Chatbot [human] in your mind: Yes.

Chatbot [human] asks in Farsi: What do you want to know?

You ask Chatbot [human] in your mind: What city is this?

Chatbot [human] says in Farsi: This is the famous Elements City, center of the known world.

You ask Chatbot [human] in your mind: What services are avaliable in here?

Chatbot [human] says in Farsi: Elements City offers a wide range of services to travellers, you can feed yourself in various pubs or bars, you can buy all sorts of equipment in many shops, you can also visit some of the guilds or pray in one of the temples.

You ask Chatbot [human] in your mind: What pubs are in the city?

Chatbot [human] says in Farsi: There's Therpin's Pub and also Thirsty Elf Inn.

You ask Chatbot [human] in your mind: Where can I find thirsty elf inn?

Chatbot [human] says in Farsi: You can find the inn on the Earth Street, west from the Square of hope, near the entrance to the city.

You say to Chatbot [human] in your mind: Thanks for your help, I'll go there.

Chatbot [human] says in Farsi: You're welcome.

Bot w miarę sprawnie poradził sobie z zadawanymi pytaniami, aczkolwiek należy wziąć pod uwagę, że były one zadawane w sposób raczej tendencyjny. Warto zwrócić uwagę na zrozumienie przez bota krótkiej odpowiedzi "Yes" i powiązanie jej z wcześniejszym pytaniem.

Kolejny przykład:

You say to Chatbot [human] in your mind: Hello.

Chatbot [human] asks in Farsi: Hello traveller, do you want me to tell you about this city?

You ask Chatbot [human] in your mind: Yes, tell me where I can buy some weapons?

Chatbot [human] says in Farsi: You can equip yourself in various shops, there's Jasmine's Shop, Genartor's Spellshop, Tanner's shop as well as Realty Shop.

You ask Chatbot [human] in your mind: Who is jasmine?

Chatbot [human] says in Farsi: Jasmine is the owner of a shop not far west from the Square of Hope. She sells all kinds of house accessories.

You ask Chatbot [human] in your mind: Where is her shop?

Chatbot [human] says in Farsi: Hm, I never heard of such place in Elements city.

You ask Chatbot [human] in your mind: Okay, and what other places are worth seeing around here?

Chatbot [human] says in Farsi: Elements City offers a wide range of services to travellers, you can feed yourself in various pubs or bars, you can buy all sorts of equipment in many shops, you can also visit some of the guilds or pray in one of the temples.

You say to Chatbot [human] in your mind: Hm, tell me something about guilds.

Chatbot [human] says in Farsi: There are mercenaries who work as a local militia, also there is the order of mages living on the island, known as Right Hand of the Elements, finally there's Mielikki shrine awaiting for faithful servants.

Chatbot [human] says in Farsi: The shrine is at the northern end of the city, straight from the Square of hope.

You say to Chatbot [human] in your mind: Hm, may be worth to check, see you later.

Chatbot [human] says in Farsi: Bye.

Tu również bot przeważnie poprawnie udzielał odpowiedzi. Wyjątkiem było pytanie "Where is her shop?", które bot zakwalifikował jako pytanie o lokację, ale nie poradził sobie z ustaleniem obiektu którego pytanie dotyczy - w tym przypadku konieczne byłoby powiązanie kontekstowe z wcześniejszą wypowiedzią.

Wnioski

Język skryptowy AIML nadaje się do tworzenia prostych botów do rozmów, a dzięki jego bardziej złożonym cechom jak pamiętanie ostatnich fragmentów rozmowy czy możliwość tematycznego dopasowywania odpowiedzi, można w nim stworzyć bota, któremu czasami zdarzy się zaskoczyć swego rozmówcę.

Nie bez znaczenia jest też fakt, że prezentowany bot miał ściśle określony temat rozmów, a to bardzo ułatwia przewidywanie zapytań jakie mogą się pojawić od strony rozmówcy.

Jednakże mimo to język ten jest niezwykle ograniczony. Wymaga on wpisania olbrzymiej bazy wiedzy z której bot mógłby korzystać. To z koleji wiąże się z koniecznością uważnego przemyślenia struktury tej bazy oraz wymyślenia wszelkich możliwych zapytań jakie rozmówca może zadać. Nie bez znaczenia jest też konieczność nadmiarowej ilości wprowadzanego tekstu (wszelkie tagi, lub powtórzenia zapytań dla formuły <that>).

Biorąc pod uwagę realia gry, gdzie nowe postaci mogą być tworzone w ciągu kilku minut, konieczność pisania do nich bazy wiedzy, która to czynność zajęłaby conajmniej kilka godzin, dyskwalifikuje takie rozwiązanie jako akceptowalne do stworzenia bota do rozmów.

Ponadto prosty system regułowy jakim jest AIML nie wprowadza żadnego elementu rozumienia treści zapytań przez bota. Operuje on na zasadzie odgórnie ustalonych odpowiedzi na pewne (mniej ściśle określone) zapytania. Bot, którego możnaby nazwać mianem inteligentnego, powinien posiadać zdolność analizowania zapytania pod względem znaczenia słów, a nie tylko ich występowania w kontekście innych słów. Ponadto taki bot powinien tworzyć odpowiedzi na podobnej zasadzie - nie poprzez odgórnie ustalone zwroty, ale wykorzystując znajomość zasad gramatyki i znaczenia poszczególnych słów, z których to mógłby zbudować odpowiedź.

Linki zewnętrzne