TEMAT: Bot konwersujący o muzyce


Przedmiot: Metody i algorytmy sztucznej inteligencji


Autor: Maciej Piaseczny 140389

Data: 13.06.2008



SUBJECT: Music chatterbot


Course: Methods and algorithms of artificial intelligence


Author: Maciej Piaseczny 140389

Date: 13.06.2008


This report has been prepared as a requirement for the course: Methods and algorithms of artificial intelligence





Abstract

A chatterbot is a computer program designed to simulate an intelligent conversation with one or more human users via auditory or textual methods. Though many appear to be intelligently interpreting the human input prior to providing a response, most chatterbots simply scan for keywords within the input and pull a reply with the most matching keywords or the most similar wording pattern from a local database. This paper contains the evaluation of University project made for the course: „Methods and algorithms of artificial intelligence”. It gives a short look into the process of creating a chatterbot, problems connected with this and conclusions. Creating a chatterbot came in to be a extremely hard task.



1. Wstęp

Założeniem projektu było stworzenie bota konwersacyjnego, potrafiącego rozmawiać z użytkownikiem na temat muzyki. Jednak po konsultacjach z prowadzącym temat ten został zawężony do pojedynczej dziedziny, tj.: polska muzyka hip-hop. Zawężenie dziedziny okazało się konieczne, gdyż stworzenie bota potrafiącego rozmawiać w tak rozległym temacie jest wyjątkowo skomplikowane i pracochłonne.

Po przestudiowaniu informacji dotyczących chaterbotów zdecydowałem się na wykorzystanie języka AIML (Artificial Intelligence Markup Language ) do napisania programu. Język ten pierwotnie wymyślony jako baza wiedzy dla chatterbota A.L.I.C.E. (jeden z najlepiej znanych i najlepszych botów stworzonych dotychczas), jest pochodną języka XML. Służy do opisu bazy wiedzy dla właśnie tego rodzaju programów.

Jako środowisko do tworzenia i testowania bota wybrałem Gaitobot AIML Editor firmy Springwald Software. Jest on bardzo intuicyjnym i prostym narzędziem do tworzenia botów konwersacyjnych.

Po zapoznaniu się z dokumentacja języka AIML mogłem przystąpić do tworzenia programu.



2. Tworzenie bota w języku AIML

Jak juz wspomniałem program został napisany w darmowych edytorze Gaitobot. Jest to edytor posiadający wbudowaną składnię języka AIML. Dzięki temu, w prosty i szybki sposób można stworzyć dowolny szablon odpowiedzi. Takie podejście do problemu ma swoje wady i zalety. Prostota tego języka umożliwia bardzo szybko zaimplementować podstawy dla programu, który będzie potrafił odpowiedzieć na najprostsze pytania. Jego strukturalna budowa daje wiele możliwości, jednak z drugiej strony w pewnym sensie ogranicza. Trzeba w bardzo przemyślany sposób tworzyć kolejne etapy bota, gdyż łatwo się pogubić i zepsuć cały projekt. Dzieje się tak dlatego, że tworzenie kolejnych szablonów często zaciemnia pozostałe, a ich duża ilość utrudnia znalezienie błędów.

Dodatkowym atutem edytora GaitoBot jest fakt, że nie pozwala on stworzyć szablonów niezgodnych ze składnia języka AIML. Jest to bardzo ważna cecha, gdyż w znacznym stopniu przyspiesza i ułatwia tworzenie bazy wiedzy robota.

Okno edytora GaitoBot

Sam język AIML polega na tworzeniu pewnych znaczników i przypisywaniu im odpowiednich argumentów. Każdy dokument AIML musi zaczynać się od znacznika < aiml > i kończyć znacznikiem < /aiml > . Pomiędzy tymi znacznikami może znaleźć się dowolna ilość obiektów zwanych kategoriami - < category >, przy czym każdy z nich powinien składać się z dokładnie jednego elementu < pattern > i jednego elementu < template >.Wyrażenie znajdujące się wewnątrz znacznika < pattern > jest to zwrot wypowiedziany przez rozmówce, na który bot reaguje wyrażeniem zapisanym w znaczniku < template >. Poniżej zamieszczono przykład najprostszego programu:

<aiml>

<category>

<pattern>CZESC</pattern>

<template>Witaj, jak się masz?</template>

</category>

</aiml>



Kluczowym rozwiązaniem języka AIML jest możliwość dopasowywania do sekwencji z użyciem znaku „*”, np.:

<pattern>LUBIE *</pattern>

W tym przykładzie dopasowanie nastąpi dla każdego ciągu „LUBIE cokolwiek”. Właśnie ten mechanizm umożliwia nam szybko i łatwo dopasować odpowiedź do zapytania użytkownika. Jednak w trakcie pisania bota bardzo szybko można zauważyć, że takie dopasowywanie jest głównym źródłem błędnych odpowiedzi bota.

Dodatkowo język AIML składa się z wielu innych znaczników rozszerzających jego możliwości. Należą do nich m.in.:



Z wykorzystaniem powyższych znaczników można stworzyć już zaawansowanego bota. Po dokładnym przestudiowaniu wykorzystania tych znaczników przystąpiłem do pracy nad własnym botem.

Jak się szybko okazało podstawowym problemem jest umiejętny podział rozmowy na działy, które będzie można zaimplementować w osobnych sekcjach <topic>. Druga i może najważniejsza rzeczą jest umiejętność tworzenia bota, którego zachowanie zawsze będziemy w stanie przewidzieć. Niestety jest to niesłychanie trudne. Dlatego podczas pierwszych prób zauważyłem, że najprostszym ze sposobów stworzenia sensownej konwersacji, jest takie pisanie szablonów, aby użytkownik był cały czas naprowadzany na temat rozmowy i to do tego stopnia, że nawet jego odpowiedzi byłyby narzucone. Niestety w takim przypadku rozmowa staje się mało naturalna i łatwo jest się domyślić, że rozmawiamy z mało rozwiniętą maszyną.

Jednak podział na tematy (<topic>) umożliwia w miarę sprawne działanie programu. Dlatego pierwszymi elementami, jakie zaprogramowałem były działy:

W tych 3 działach zaimplementowałem podstawy rozmowy, tj. przywitanie się z użytkownikiem, zapytanie jak ma na imię, zasugerowanie tematu muzyki hop-hop'owej, parę odpowiedzi na standardowe pytani (np. „jak sie czujesz?”) a także pożegnanie z użytkownikiem.

Po stworzeniu podstaw, zacząłem implementować elementy wiedzy na temat muzyki hip-hop. Na samym początku wszystko szło w miarę sprawnie. Jednak bardzo szybko okazało się, że sposób w jaki tworzyłem bota był nie do końca przemyślany i bardzo ciężko było go rozbudowywać. Bot miał potrafić opowiedzieć historię hip-hopu, oraz rozmawiać na temat zespołów i ich utworów. W pierwotnej wersji, już dodanie 2 zespołu okazało się barierą nie do przejścia. Nadmierna liczba bardzo podobnych znaczników uniemożliwiła mi poprawne ich edytowanie, a bot szybko przestał działać w sensowny sposób. Poza tym, w przypadku gdy tworzy się bota przez dłuższy okres z przerwami pomiędzy kolejnymi edycjami, ciężko jest zapamiętać schemat w jaki się tworzy program. A bez takiego schematu program szybko traci spójność i przestaje działać poprawnie.

Dlatego zmuszony byłem do reorganizacji i dokładnego podziału rozmowy na poszczególne tematy. Po tej zmianie udało mi się osiągnąć dość spójną bazę danych.

Jednak mimo prób i starań odporność bota jest raczej niska. Jest to głównie spowodowane zbyt małą bazą wiedzy bota. Budowanie jej to bardzo pracochłonny proces, dlatego stworzenie bota, który przeprowadzi poprawnie nawet krótka i prostą rozmowę jest nie lada zadaniem.

3.Przykład rozmowy z botem

Poniżej została zamieszczona rozmowa z botem prowadzona przez twórce bota:



User: Hej!

MusicBot: No hej! Jak masz na imie?



User: Maciek

Musicbot: Witaj Maciek! Jestem botem do konwersacji na temat muzyki HIP-HOP. Chcesz cos wiedziec na ten temat ?



User: Pewnie

MusicBot: A co dokladniej chialbys wiedziec na ten temat ??



User: Troche sie znam, ale nie za bardzo.

MusicBot: A znasz historie hip-hopu?



User: Nie znam, a powinienem?

MusicBot: Nic nie szkodzi, zaraz Ci wszystko opowiem. Zeby wiedziec cos o muzyce trzeba najpierw dowiedziec sie czegos o samym hip-hopie. Chcesz tego?



User: Jasne!

MusicBot:A wiec hip-hop to zjawisko, badz tez ruch kluturowy rozpoczety przez Afroamerykanow i Latynosow we wczesnych latach 70. XX wieku w nowojorskim Bronksie. Hip-Hop powoli zaczal przenikac do siwata kultury masowej na poczatku lat 80., by w nastepnej dekadzie rozprzestrzenic sie na kazdy zakatek globu. Za poczatek ruchu hiphopowego uwaza sie zwykle wczesne dokonania DJ Kool Herc'a, a DJ Hollywood jest uznawany za pierwszego, ktory okreslil kulture mianem "hip-hopu". Cztery glowne aspekty badz elementy kuluty to MCing (rapowanie), DJing (tworzenie muzyki), graffiti i b-boting (znany takze jako breakdance).

Nie zanudzam Cie?



User: Troche

MusicBot:To jest dosc wazne i mimo wszystko ciekawe, nadal uwazasz ze Cie zanudzam?



User: Nie :)

MusicBot: No to kontynuuje: Za pioniera hip-hopu uchodzi Kool Herc, emigrant z Jamajki. Zaszczepil on w Nowym Jorku tzw. soundsystem, czyli jamajska dyskoteke polegajaca na miksowaniu plyt i spiewaniu badz rymowaniu do tych podkladow. Probujac nawiazac kontakt z taka publika, komentujac przebieg imprezy nieswiadomowie doprowadzili do powstania osoby zwanej: MC - mistrz ceremoni. Wyspiewywane przez te osoby teksty wkrotce staly sie calymi piosenkami i tak rozwinal sie hip-hop. Rozwoj rapu byl rowniez impulcem dla graffiti - napisow i rysunkow malowanych na scianach kamienic, metrze czy wagonach kolejowych.

To tyle z hsitorii. A znasz jakis polskich wykonawcow?



User: Kojarze zespol Molesta Ewenement , slyszales cos o nim ??

MusicBot: Molesta Ewenement to bardzo dobry zespol.



User: Jakie znasz ich plyty ??

MusicBot: Ich najlepsze plyty to: Skandal i Ewenement. Pozniej wydali jeszcze pare innych, ale mniej udanych plyt.



User: Polecisz mi jakis ich utwor ??

MusicBot: Niech sie zastanowie... Moze utwor „Isc swoja droga”? Nagrali go goscinnie na krazku DJ 600V. Bardzo fajny kawalek.



User: Zmienmy temat

MusicBot: A o czym chcialbys rozmawiac? Moge Ci powiedziec cos o zespolach Grammatik albo Paktofonika. O ktorym chcesz sie czegos dowiedziec?



User: Powiedz mi cos o zespole Grammatik

MusicBot: Ten zespol to podstawa polskiego hip-hopu! Grammatik tworzyli Eldo i Jotuze a pozniej doszedl do nich producent Noon. Ich utwory sa genialne! Znasz jakies?



User: Pogadajmy o innych zespolach

MusicBot: Pewnie! Moge Ci powiedziec cos o zespolach Grammatik albo Paktofonika. O ktorym chcesz sie czegos dowiedziec?



User: Wiesz co, musze konczyc, narazie

MusicBot: Skoro musimy konczyc, to pa.



Jak widać rozmowa ta jest bardzo logiczna i spójna. Jednak wynika to z tego, że pytania są skonstruowane pod zaprogramowane szablony.

Poniżej została zamieszczona rozmowa, która bot przeprowadził z moim kolegą z uczelni:



User:Hej!

MusicBot:Dzien dobry, jak masz na imie?



User:Kuba

MusicBot:Witaj Kuba, jestem botem do konwersacji na temat muzyki HIP-HOP. Chcesz cos wiedziec na ten temat?

User:Nie

MusicBot: Dlaczego, to bardzo fajny temat. Poza tym tylko o tym potrafie rozmawiac... A wiec chcesz o tym pogadac?



User:Niech bedzie

MusicBot: A co dokladniej chcialbys wiedziec na ten temat? Znasz sie na tej muzyce?



User: Nie

MusicBot: Nic nie szkodzi, zaraz Ci wszystko opowiem. Zeby wiedziec cos o muzyce trzeba najpierw dowiedziec sie czegos o samym hip-hopie. Chcesz tego?



User: Nie

MusicBot: No to juz nic nie rozumiem...



User: czego nie rozumiesz?

MusicBot: Nie wiem za bardzo o co Ci chodzi.. Moze jednak porozmawiamy o muzyce hip-hop?



User:ok

MusicBot: A co Cie interesuje? Historia, wykonawcy, czy moze piosenki?



User: Chce wiedziec o historii

MusicBot: Znam historie hip-hopu! Opowiedziec Ci ?



User:Pewnie

MusicBot: Nie wiem za bardzo o co Ci chodzi.. Moze jednak porozmawiamy o muzyce hip-hop?



User: opowiedz mi o historii!

MusicBot:Znam historie hip-hopu! Opowiedziec Ci ?



User: tak

MusicBot: A wiec hip-hop to zjawisko, badz tez ruch kluturowy rozpoczety przez Afroamerykanow i Latynosow...

...Nie zanudzam Cie?



User:troche

MusicBot:To jest dosc wazne i mimo wszystko ciekawe, nadal uwazasz ze Cie zanudzam?



User: Tak

MusicBot: To moze znasz jakiegos wykonawce? Podaj jednego.



User:Powiedzialem ze nie znam sie na hip-hopie.

MusicBot: Niestety nie znam takiego wykonawcy ... Moze mi cos o nim opowiesz??



User:Nic Ci nie powiem, bo mnie nie sluchasz!

MusicBot: Aha, no ja moge ci powiedziec cos o zespolach Grammatik albo Molesta Ewenement. O ktorym Ci cos opowiedziec ?



User: O zadnym

MusicBot: Nie wiem za bardzo o co Ci chodzi.. Moze jednak porozmawiamy o muzyce hip-hop?



User:bede lecial, narazie

MusicBot: Skoro musimy konczyc, to pa



Jak widać rozmowa ta wypadła nadspodziewanie dobrze. Bot prawie w każdym przypadku dopasował sensownie odpowiedz. Udało się to uzyskać dzięki narzucaniu przez bota tematu rozmowy i w pewnym sensie odpowiedzi preferowanych.

Trzeba tu jednak zauważyć, że to użytkownik wyjątkowo trafnie formułował swoje wypowiedzi, związane jest to zapewne z tym, że także pisał bota konwersującego, więc wiedział jakich zdań należy używać, aby ułatwić dopasowanie programowi. Nie miał on jednak styczności z bazą wiedzy bota, więc jego odpowiedzi były jak najbardziej naturalne.

Kolejna rozmowa jest jedną z tych, które w ogóle nie wyszły:



User: Siema

MusicBot: No hej! Jak masz na imie?



User: Beata

MusicBot: Witaj Beata, jestem botem do konwersacji na temat muzyki hip-hop. Chcesz cos wiedziec na ten temat?



User:Nie lubie tej muzyki wiec w zasadzie nie bardzo.

MusicBot: Dlaczego?



User: No bo nie lubie.

MusicBot: Niestety nie wiem o co Ci chodzi... Nie chcesz porozmawiac o muzyce hip-hop, Beata?



User: Owszem nie chce o hip-hopie.

MusicBot: Niestety nie potrafie o tym rozmawiac, potrafie za to rozmawiac o muzyce hip-hop. Chcesz porozmawiac na ten temat?



User: No dobra, skoro nalegasz.

MusicBot: Niestety nie wiem o co Ci chodzi... Nie chcesz porozmawiac o muzyce hip-hop, Beata?



User: Tak chce

MusicBot: Niestety nie wiem o co Ci chodzi... Nie chcesz porozmawiac o muzyce hip-hop, Beata?



User: ok

MusicBot: Niestety nie wiem o co Ci chodzi... Nie chcesz porozmawiac o muzyce hip-hop, Beata?



User: chce

MusicBot: A co dokladniej chcialbys wiedziec na tej muzyce? Znasz sie na tej muzyce?



User: nie znam sie

MusicBot: Nic nie szkodzi! Zaraz Ci wszystko opowiem... Chcesz??



User: nie mam juz na to czasu

MusicBot: A co Cie interesuje? Historia, wykonawcy, czy piosenki?



User: Dobra, narazie

MusicBot: Nie wiem za bardzo o co Ci chodzi.. Moze porozmawiamy o muzyce hip-hop?



Jak widać w tej rozmowie bot wielokrotnie nie mógł znaleźć dopasowania do wypowiedzi użytkownika. Jednak niektóre z tych dopasowań powinny zadziałać, a bot i tak nie znalazł dopasowania. Świadczy to o błędach w samym programie do testowania bota. Jednak tych błędów nie da się juz naprawić. Poza tym widać, że bot nie jest przystosowany do konwersacji z użytkownikiem, który nie jest „uległy”. Jedynym sposobem, aby to naprawić jest rozbudowanie bazy wiedzy w taki sposób, aby uwzględniała takie zachowanie użytkownika.

4.Wnioski

Idealny bot teoretycznie musiałby w sobie mieć bazę wszystkich możliwych połączeń pytań z odpowiedziami, a każde miejsce gdzie w dopasowaniu użylibyśmy „*” mogłoby stać się źródłem błędnego działania programu. Jednak wiadomo, że stworzenie takiej bazy danych jest nie możliwe, dlatego trzeba ją budować w wyjątkowo przemyślany i zorganizowany sposób, tak żeby ograniczyć do minimum ilość takich zapytań, które mogą dać błędna opowiedz ze strony bota. Dużym mankamentem ze strony możliwości języka AIML dla osób tworzących bota w języku polskim jest fakt, że dopasowywanie haseł jest na zasadzie identyczności, co w sytuacji, gdy polski język ma 7 przypadków deklinacji jest dość mało wydajne, gdyż dla każdego słowa trzeba zdefiniować szablon w co najmniej 3-4 przypadkach. Powoduje to niepotrzebne zaciemnianie bazy wiedzy. Jak już wspominałem w poprzednich rozdziałach, ważnym elementem tworzenia chatterbota jest umiejętność takiego prowadzenia rozmowy, aby bot narzucał odpowiedzi użytkownikowi.. Wtedy dużo łatwiej jest zabezpieczyć się przed niespójnością bazy danych.


Bota testowałem na dwa sposoby. Ponieważ posiadam komputer przenośny, byłem w stanie udostępnić program testujący osobom, które spotkałem. Drugim sposobem było udostępnienie bota dla użytkowników internetu dzięki serwisowi: www.pandorabots.com . Niestety po załadowaniu bota okazało się, że program bardzo często nie działa poprawnie. Niestety nie udało się określić co było tego przyczyną. Kod AIML na pewno był poprawny, gdyż edytor GaitoBot uniemożliwia konstruowanie niepoprawnych składniowo szablonów. Dlatego wszystkie testy musiały zostać oparte na tych przeprowadzonych w samym edytorze.


W ramach projektu udało się stworzyć bota konwersującego, który w miarę sprawnie potrafi rozmawiać na temat polskiej muzyki hip-hop. Dzięki temu projektowi miałem okazję poznać techniki tworzenia tego rodzaju programów i przekonać się jak pracochłonne i trudne jest to zadanie.




5. Źródła:

1. Materiały na temat języka AIML i chatterbotów:

2. Materiały na temat muzyki hip-hop:

3. Testowanie bota: