Raport z projektu
wykonanego na przedmiot Sztuczna inteligencja

Jakub Stanisz

16 czerwca 2008r.


Spis treści

  1. Opis projektu w języku angielskim
  2. Sformułowanie problemu
  3. Opis bota
  4. Struktura programu
  5. Przykłady rozmów
  6. Testy
  7. Wnioski
  8. Bibliografia

1. Opis projektu w języku angielskim

The project I have made is a conversation bot called Janek. He can talk about german cars. Especially about their performances. Janek has been written in aiml language. It is very simple language. It is plus, because it is easy to learn how to write in this language. But on the other hand its simplicity makes it lack of many useful functions. To write Janek I used free program "GaitoBot". My bot can answer for simple questions about himself, can introduce himself, then he changes the topic to german cars. I have tested my bot using my friends and then I put it on the website, where everybody could test my bot. Problems with bots are related with Polish inflection. There are too many inflections related with one word. Many mistakes with bot where cased by too detailed questions asked by human user.

2. Sformułowanie problemu

Celem projektu bylo stworzenie bota, który potrafi udzielić podstawowych informacji o samochodach niemieckich marek. Jest to zawężenie wcześniej opisanego tematu projektu. Dzięki zawężeniu tematyki rozmów bota mogłem bardziej skoncentrować się na jego reakcjach na różne odpowiedzi osoby prowadzącej rozmowę.

Bot o imieniu 'Janek' został stworzony w darmowym programie GaitoBot. Strona na której można porozmawiać z Jankiem jest przedstawiona poniżej:

3. Opis Bota

Struktura całego programu opiera się na przejściu z jednego tematu na drugi:

-Najpierw bot przedstawia się i wita;

-Następnie przeskakuje na podstawowy temat, gdzie można wybrać markę o której będziemy rozmawiali;

-W zależności od tego jaka marka została wspomniana, bot przechodzi do tematu związanego właśnie z tą marka i może wybrać model;

-po wybraniu modelu z danej marki bot jest w stanie udzielić różnych informacji o danym modelu;

-Jesli bot nie wie o czym jest rozmowa wraca do punktu wyboru marki lub tez do wyboru modelu.

W taki sposób cała rozmowa zapętla się i możemy ciągle rozmawiać o podstawowych prametrach niemieckich samochodów.

4. Struktura programu

AIML (Artificial Intelligence Markup Language) jest językiem znacznikowym, opartym o język XML służącym do tworzenia baz wiedzy chatterbotów, opracowany pierwotnie przez dr. Richarda S. Wallace'a, a później rozwijany również przez społeczeństwo wolnego oprogramowania ALICE w latach 1995-2000.

4.1. Ogólna budowa pliku AIML

Struktura plików:

			<?xml version="1.0" encoding="UTF-8" ?>
			<aiml version="1.0">
			</aiml>
			

Wszelkie wypowiedzi bota będą następnie umieszczane w obrębie głównego znacznika <aiml>

4.2. Wykorzystane mechanizmy

Ogólna budowa wypowiedzi bota:

Wszystkie Wypowiedzi bota konstruowane są w bardzo podobny sposób:


				   <category>
					<pattern>CZESC</pattern>
					<template>Witaj</template>
				   </category>

        		

Zmiana tematu rozmowy za pomocą znaczników <that>, <topic>

Dzięki tym znacznikom nasz program ma budowę bardziej strukturalną, a mianowicie pozwala na zmianę tematu naszej rozmowy. Dzięki temu możemy rozpoznać kontekst naszej rozmowy, możemy używać jednakowych wzorców i bot w zależności od tematu będzie się inaczej zachowywał.

Jedną z takich metod jest zastosowanie znacznika: <that>:


				   <category>
				   	<pattern> * </pattern>
					<that>Jakie masz auto?</that>
					<template>
					<star />to fajne samochody! 
					</template>
				   </category>

 			

Wzorzec ten jest dopasowywany tylko w przypadku gdy wcześniejszą wypowiedzią bota było zdanie "Jakie masz auto?"

Inną możliwością zmiany kontekstu jest użycie znacznika <topic name="audi"> </topic>. Wówczas wzorzec zostanie dopasowny tylko jeśli zmienna topic będzie miała wartość "audi". Aby ustawić wartość zmiennej topic, należy wykonać poniższą instrukcję:

				<set name="topic"> audi </set> 
			

Użycie synonimów: <srai>

W wielu przypadkach pozwala to na zaoszczędzenie czasu pisania. Wystarczy wówczas raz tylko zadeklarować schemat odpowiedzi, a następnie za pomocą znaczników <srai> możemy się odwołać do wcześniej zapisanej odpowiedzi. Zatem przy napisaniu "witaj" do bota, odwoła się on do znacznika "czesc".

Definiowanie synonimów:


			            <category>
				    	<pattern>czesc</pattern>
					<template>witaj</template>
				    </category>
				    <category>
				    	<pattern>witaj</pattern>
					<template>
						<srai>czesc</srai>
					</template>
				    </category>

			

Losowe odpowiedzi <random>

Warto wykorzystać ten mechanizm. Dzięki niemu zróżnicujemy odpowiedzi i na to samo pytanie bot będzie udzielał różnych odpowiedzi (wybranych losowo ze zdefiniowanej listy).

			   	  
				 <category>
				   	<pattern>czesc</pattern>
					<template>
						<random>
						   <li>Wita,</li>
						   <li>czesc</li>
						   <li>Dzien dobry </li>
						</random>
					</template>
				   </category>

			

ustawianie zmiennych za pomocą znaczników <get> i <set>

W języku AIML istneje także możliwość ustawienia wartości zmiennych:


				   <category>
				   	<pattern>Mam *</pattern>
					<template> 
						<set name="auto"> <star /> </set> 
					</template>
				   </category>				   
				   <category>
				   	<pattern>Pamietasz jakie mam auto?</pattern>
					<template>
						Masz <get name="auto">
					</template>
				   </category>

			

Za pomocą tych znaczników najpierw ustawiamy wartość zmiennej auto, a następnie odwołujemy się do niej za pomocą znacznika <get name="auto">.

Użycie wyrażeń <condition> do wykonania instrukcji warunkowych Odpowiedź bota może byc uzależniona od wcześniejszej odpwiedzi użytkownika


				   <category>
					<pattern>*</pattern>
					<that>Masz swoje auto?</that>
					<template>
						<think>
						   <set name="odp">
						      <star index="1"/>
						   </set>
						</think>
						<condition name="odp">
						   <li value="tak">A co masz?</li>
						   <li value="nie">A jakie auta lubisz?</li>
						   <li value="* kupic">A co chcialbys sobie kupic</li>
						   <li value="chcialbym">A co chcialbys miec?</li>
						   <li>Hmm..</li>
						</condition>
					</template>
				   </category>

			

W kolejnych krokach następuje porównanie wartości zmiennej odp z odpowiedziami użytkownika i wybranie odpowiedniej odpowiedzi bota.

5. Przykłady rozmów

5.1. Udana rozmowa z botem

> czesc
> czesc, jestem Janek samochodowy bot
> co slychac?
> dziekuje dobrze, ale moze bysmy porozmawiali o samochodach
> co wiesz o samochodach?
> zalezy co chcesz wiedziec, o jakiej marce chcialbys cos wiedziec?
> moze o audi
> hmmm audi, a o jaki model Ci chodzi
> o a3 wiesz cos o nim?
> aaa audi a3 a co chesz wiedziec?
> A wiesz cos o nim?
> No to jest maly samochodzik ale w odpowiedniej wersji moze byc naprawde szybki

5.2. Nieudana rozmowa z botem

> czesc
> dzien dobry, jestem Janek
> co slychac?
> dziekuje dobrze, ale moze bysmy porozmawiali o samochodach
> dlaczego jestes taki niecierpliwy?
> o jakiej marce chcesz rozmawiac
> powiedz mi jakie jest najmocniejsze niemieckie auto?
> chyba nie wiem o czym mowimy? Mozesz mi przypomniec?

5.3. Udana rozmowa z botem

> witam
> czesc jestem Janek, samochodowy bot
> Opowiedz mi cos vw
> a o jakim modelu chcialbys cos wiedziec?
> Opowiedz mi o polo
> Model powiedzy vw foxem a golfem. Troche mniejszy od golfa. Jest to nizsza klasa srednia
> a wiesz ile ma koni?
> Polo to jednak malutki samochodzik dlatego ma od 60 do 80 KM
> a wiesz jakie ma spalanie
> Mala liczba koni ma wplyw na spalanie ktore zwykle miesci sie w zakresie do 7 litrow
> a wiesz cos o audi?
> Na pewno chodzi o vw?
> Nie
> Aaa czyli nie chodzi Ci o vw. W takim razie o jaka marke Ci chodzi?
> o audi
> a jaki model?
> powiedz mi o a8

5.4. Nieudana rozmowa z botem

> jakie auto najbardziej ci sie podoba?
> Chyba nie wiem o czym mowimy... Mozesz mi przypomniec?
> o samochodach
> mysle ze niemieckie auta sa w porzadku ciezko znalezc im konkurencje
> niewazne
> chyba nie wiem o czym mowimy? Mozesz mi przypomniec?
> o samochodach, chyba o tym potrafisz rozmawiac

6. Testy

W pierwszej fazie testów wykonanego przeze mnie bota sprawdzałem ja oraz moi najbiżsi znajomi. W czasie tych testów bardzo dużo dopisałem reakcji do mojego bota. W drugiej fazie program został zamieszczony w internecie, gdzie wszyscy ktorzy mieli ochotę mogli porozmawiać z moim botem. Ciężko uznać kiedykowiek taką fazę testów za zakończoną, ponieważ bot o takim wąskim zakresie odpowiedzi i tak wąskiej tematyce zawsze może zostać zaskoczony odpowiedzią człowieka. Dzięki możliwości przeglądania odbytych rozmów ilość reakcji bota ciągle jest powiększana.


Dużo błedow w czasie rozmowy było powodowane różnym ułożeniem wyrazów w pytaniach zadawanych przez czlowieka, co powodowało złe zrozumienie pytania. Często użytkownik podawał za dużo danych w jednym pytaniu, przez co bot przypisywał to pytanie do błędnego wzorca. Problemem okazał się też zapis modeli samochodów. Liczbę wraz z cyfrą można pisać osobno lub też razem, co znacznie zwieksza ilość wzorców. Problemem są rówież pytania pośrednio związane z samochodami, niezwiązane z ich osiągami, rzeczami szczegółowymi.

7. Wnioski

Język AIML jest bardzo prostym językiem. Jest to z jednej strony plusem, ponieważ pozwala na szybką naukę tego języka. Jednakże z drugiej strony brakuje mu wielu przydatnych funkcji. W interpreterze "GaitoBot" złym rozwiązaniem wydaje mi się też to, że znacznik "*" nie oznacza także znaku pustego, przez co trzeba napisać dużo więcej wzorców. Jednakże wybór metody rozwiązania problemu stworzenia bota wydaje mi się dobry. Program "GaitoBot" świetnie sprawdził się w roli prostego i przejrzystego interpretera. Zadanie zostało zrealizowane. Bot potrafi rozmwiać o różnych samochodach, powiedzieć jakie mają paramtery oraz zmienić temat rozmowy. Dużo mu jednak brakuje do doskonałości, mimo użytych dokładnie 575 kategorii bot często zostaje zaskoczony pytaniami użytkownika. Wiąże się to przede wszystkim z odmianą części mowy oraz z możliwą strukturą zdań w języku polskim. Budowa naszego języka znacznie komplikuje stworzenie bota, zwiększa ilość wzorców, które muszą być zapisane w jego pamięci.

8. Wykorzystane materiały i narzędzia