|
|
Spis treści
1. Opis projektu w języku angielskimThe 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 problemuCelem 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 BotaStruktura 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 programuAIML (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 AIMLStruktura 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 mechanizmyOgó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ów5.1. Udana rozmowa z botem
> czesc 5.2. Nieudana rozmowa z botem > czesc 5.3. Udana rozmowa z botem > witam 5.4. Nieudana rozmowa z botem > jakie auto najbardziej ci sie podoba? 6. TestyW 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. WnioskiJę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
|
|
|