Mini Answering Machine
Sztuczna inteligencja
Aleksandra Czernecka
23 czerwca 2008
Opis zadania
Mój projekt był próbą zaimplementowania mini maszynki odpowiadającej na pytania. Wiedza tej maszynki pochodzi z Wikipedii. Ponieważ zadanie odpowiadania na pytania jest dość trudnym zagadnieniem, zostało ono uproszczone do odpowiadania na pytania o osoby, np. Kto wynalazł żarówkę?
Opis rozwiązania
Swój projekt opierałam głównie na książce "Speech and Language Processing [...]" (patrz pozycja pierwsza w literaturze) i wykorzystałam metodę opisaną w rozdziale "23. Question answering and summarization". Rozwiązanie ma trzy etapy, które są opisane poniżej:
Przetwarzanie pytania (ang. question processing)
Ten etap składa się z dwóch części:
- Przeformułowanie pytania w dobre zapytanie do wyszukiwarki
- usunięcie znaku zapytania
- usunięcie z zapytania słów z listy stopwords
- rozwinięcie zapytania o wyrazy w odmienionej formie na podstawie słownika odmian (patrz literatura, pozycja trzecia). Rozwinięcie polegało na zamianie każdego słowa z zapytania na kilka słów oddzielonych spójnikiem OR, dzięki któremu wyszukiwane są dokumenty zawierające dowolne słowo z listy (więcej o spójniku na stronach Wikipedii)
- Przykład:
Pytanie: Kto jest patronem kierowców?
=> Kto jest patronem kierowców
=> jest patronem kierowców
=> (jest OR być OR bądźcie OR bądźże OR bądźmy OR bądź) (patronem OR patron OR patronach OR patronami OR patronom OR patronowie) (kierowców OR kierowca OR kierowce OR kierowco OR kierowcy OR kierowcą)
- Rozpoznanie typu odpowiedzi
- Ten etap algorytmu mogłam pominąć, ponieważ odpowiedź zawsze powinna być typu OSOBA
Wyszukiwanie urywków dokumentów (ang. passage retrieval)
Tak jak zostało to również zasugerowane w książce, postanowiłam zaufać w tej kwestii Wikipedii i do dalszej oceny przekazywałam skrawki (ang. snippets), które zwraca wyszukiwarka.
Przetwarzanie odpowiedzi (ang. answer processing)
Ponieważ zauważyłam, że często odpowiedzią na pytanie o osobę może być tytuł artykułu postanowiłam wykorzystać ten fakt w podawaniu odpowiedzi. Odpowiedź jest przedstawiana jako odwrotnie posortowana lista odpowiedzi wraz z oceną jak dobra jest dana odpowiedź (najlepsze są pierwsze). Ocena odbywała się na podstawie następujących kryteriów:
- liczba dopasowań jakie znalazła wyszukiwarka - liczba słów z pytania występujących w danym urywku
- ranking dokumentu, z którego pochodzi urywek
- pokrycie N-gramami - punkty za każde wystąpienie frazy 2-, 3-,... wyrazowej z zapytania w urywku
- liczba słów zaczynających sie z wielkiej litery w urywku
Implementacja
Program został napisany w Pythonie 2.5 z wykorzystaniem biblioteki BeautifulSoup (patrz literatura, pozycja 4).
Przykłady działania
Poniżej przedstawiam pytania wraz ze skróconą listą odpowiedzi oraz punktami przyznanymi przez program.
Poprawne odpowiedzi
- Kto jest patronem kierowców?
- Święty Krzysztof 43.7647058824
- Janusz Kulig 35.6666666667
- Błażej 31.3529411765
- Kto grał Luke'a Skywalker'a?
tylko jedna odpowiedź
- Kto wyreżyserował film Solaris z 1972 roku?
- Andriej Tarkowski 10.7142857143
tylko jedna odpowiedź
- Kto występuje w M jak Miłość i prowadzi program Jak Oni Śpiewają?
- Katarzyna Cichopek 8.71428571429
- Joanna Liszowska 7.71428571429
- Fristajlo 4.33333333333
- Kto był prezydentem USA ale nie urodził się w Układzie Słonecznym?
- Niestety nie znam odpowiedzi na to pytanie
- Kto jest prezydentem Bangladeszu i synem Krzysztofa Ibisza?
- Niestety nie znam odpowiedzi na to pytanie
- Kto jest założycielem Wikipedii?
- Jimmy Wales 53.6666666667
- Wikipedia 44.0
- Lista etymologii nazw państw 33.2580645161
- Kto wynalazł żarówkę?
- Aleksander Łodygin 18.4285714286
- Lewis Urry 17.3684210526
- Kto był następcą Lecha Wałęsy?
- Marian Krzaklewski 45.6666666667
- Aleksander Kwaśniewski 45.0
M.Krzaklewski był następcą na stanowisku przewodniczącego "Solidarności", a A.Kwaśniewski na fotelu prezydenta RP.
Odpowiedzi zadowalające
-
Kto jest premierem Mołdawii?
- Vasile Tarlev 44.75
- Mołdawia 35.0
- Kara śmierci w Europie 28.7948717949
- Alexandru Epureanu 27.8205128205
- Zinaida Greceanîi 27.3333333333
Vasile Tarlev był premierem Mołdawii do 19.03.2008, teraz jest nim Zinaida Greceanii.
-
Kto napisał powieść Solaris?
- Powieść fantastyczno-naukowa 27.6315789474
- Steven Soderbergh 10.25
- Stanisław Lem 7.22448979592
Prawidłowa odpowiedź na trzeciej pozycji.
-
Kto jest prezydentem Polski?
- Wizyty zagraniczne prezydenta Lecha Kaczyńskiego 47.8
- Konflikty zbrojne w historii Polski 42.5
- Kalendarium prezydentury Lecha Kaczyńskiego 42.117647058
Odpowiedź można łatwo wywnioskować.
-
Kto był człowiekiem roku 1981 według magazynu Time?
- James Lovell 30.2727272727
- Lech Wałęsa 24.2105263158
- Graham Masterton 17.1212121212
J.Lovell był człowiekiem roku 1968, druga odpowiedź jest prawidłowa.
Porażki
-
Kto wyreżyserował film Solaris z 2002 roku?
- Niestety nie znam odpowiedzi na to pytanie
Prawidłowa odpowiedź: Steven Soderbergh
-
Kto jest twórcą TeX-a?
- TeX 14.7777777778
- LaTeX 13.5
- Woody Allen 13.0
- Ustrój polityczny Stanów Zjednoczonych 13.0
- GNU 12.125
- Niewidzialny (film 2005) 12.0
- Język znaczników 10.4166666667
- Donald Knuth 10.0
Prawidłowa odpowiedź: Donald Knuth pojawiła się za daleko.
Wnioski
Opisane podejście do problemu daje poprawną odpowiedź na pierwszym miejscu w ok. 50% przypadków, a jeśli odpowiedź nie jest prawidłowa to w 95% przypadków może być znaleziona w artykule o tytule pierwszej odpowiedzi lub wywnioskowana z tej odpowiedzi (np. Wizyty zagraniczne prezydenta Lecha Kaczyńskiego). Zaimplementowanie algorytmu rozpoznawania bytów (ang. named entity recognition) opisanego w książce "Speech and Language Processing [...]" w rozdziale 22 pozwoliłoby wyeliminować odpowiedzi niebędące osobami. W przykładzie nr 2 z porażek Donald Knuth byłby wówczas na pozycji drugiej.
Literatura i inne materiały
-
Daniel Jurafsky, James H. Martin, "Speech and Language Processing: An Introduction to Natural Language Processing, Computational Linguistics, and Speech Recognition", rozdziały: 22, 23
http://www.cs.colorado.edu/~martin/slp.html
- Wikipedia
http://pl.wikipedia.org
- Odmiany słów
http://www.sjp.pl/slownik/odmiany/
- BeautifulSoup, parser HTML napisany w Pythonie
http://www.crummy.com/software/BeautifulSoup/