RoboTrubadur - program tworzący proste utwory poetyckie należące do wybranych gatunków lirycznych
RoboTroubadour - program creating simple poems of selected lyrical genre
1. WstępLiryką nazywamy teksty, w których świat przedstawiony stanowi pretekst do wyrażenia przeżyć i odczuć podmiotu mówiącego [01]. Zadanie stworzenia programu komputerowego, który umiał będzie na podstawie zadanego tematu wygenerować tekst poetyczny w języku polskim, nie jest zadaniem prostym. Swoisty wierszorobokleta musi zostać wyposażony w odpowiednie mechanizmy pozwalające uzyskać przede wszystkim poprawność syntaktyczną (w skład której wchodzą takie elementy, jak spójność tekstu czy zachowanie poprawnej fleksji) oraz semantyczną (sensowność tekstu). Gramatyka naszego ojczystego znacząco utrudnia algorytmizację tego procesu, głównie ze względu na swoją rozbudowaną fleksję; podobnie wykrycie rymów nie jest zadaniem trywialnym ze względu na fonetykę języka polskiego.Poniższy projekt próbuje zebrać wszystkie aktualne narzędzia lingwistyki informatycznej przydatne przy zadaniu tworzenia prostych utworów poetyckich w języku polskim. Opisano zakładane cele, wykorzystywane narzędzia oraz przedstawiono wygenerowane wyniki. 2. Cele projektuGłównymi założeniami projektu były:
3. Metody generacji prostych utworów poetycznychNajwiększym problemem, nad którym zapewne zastanawiali się również poeci na przestrzeni wieków, jest pytanie "Jak napisać dobry wiersz?". Przyjmujemy uproszczenie polegające na wykluczeniu słowa "dobry" - jednakże zagadnienie "Jak napisać wiersz?" również jest ciężko algorytmizowane. Pewną pomocą mogą być rady dla początkujących poetów, które odpowiednio ujęte mogą stanowić pewien algorytm pisania wierszy [02]. Wciąż, zagadnienie jest zbyt duże a rady zbyt ogólne, aby móc zbudować wyłącznie na ich podstawie program generujący wiersze. Autor nie znalazł wielu istniejących w języku polskim prób rozwiązania tego zagadnienia, nie licząc wcześniejszych projektów realizowanych w ramach tego kursu oraz Elektrybałta - robota znajdującego się w Centrum Nauki Kopernik, wzorowanego na tworze z książki Stanisława Lema "Bajki Robotów". Pod sam koniec trwania projektu, dzięki koleżance Idzie, która również oceniła RoboTrubadura, dostałem informację o Konkursie Automatycznej Poezji, który został rozegrany w 2011 roku - wzięło w nim udział 9 różnych programów [24]. Zwycięzca, program Centonista, pobiera z korpusu tekstów zestroje akcentowe, czyli wyrazy lub zbitki wyrazów o wspólnym akcencie. Zapamiętuje ich najczęstszy zapis małymi lub wielkimi literami, rym, położenie sylab akcentowanych i nieakcentowanych oraz zestroje, które gdzieś w korpusie występują bezpośrednio po nim. Następnie losuje jeden z kilku szablonów rytmu i rymów, opartych na melodycznych polskich wierszach i tworzy dla nich struktury grafowe. Dokładniejszy algorytm oraz kod źródłowy dostępny jest pod podanym adresem. Poniżej opisano znalezione sposoby generacji poezji.3.1 Generatory HaikuJednym z przykładów poezji, niezwiązanym z tradycją europejską, jest haiku. Jest to krótka forma liryczna, składająca się z 17 sylab, które dzieli się na części po 5, 7 i 5 sylab. Przykładem jest jedno z najbardziej znanych Haiku autorstwa żyjącego w XVII wieku japońskiego poety Matsuo BashōStary staw; Żaba wskakuje Plusk wody. Haiku nie zawsze w oczywisty sposób dają się interpretować, więcej - nie zawsze łatwo odczytać jego sens (szczególnie trudne jest to w przypadku tłumaczeń z języka japońskiego). Może to stanowić pewną zaletę, gdy generuje je program komputerowy. W 2008 roku dr Naoko Tosa z Kyoto University przedstawiła program komputerowy generujący haiku na podstawie podanych przez użytkownika trzech słów; program uczy się na podstawie doboru słów przez użytkownika [03]. Przykładem jest również implementacja dla języka angielskiego dokonana przez Danny'ego O'Briena, która odnajduje we wprowadzonym tekście konstrukcje 5-7-5 sylabowe, przetwarzając je na utwór [04]. Dobrym przykładem jest program Machine Generated Random Poetry [05]. Spośród dostępnych kilku tematów (np. The Cloud) program na podstawie dostępnej dość skromnej bazy kluczowych fraz (często się one powtarzają) generuje haiku, takie jak nothing begat her the dead and green leaves clutter ocean above sky. 3.2 Metody czysto losowePopularną sposobem tworzenia poezji jest wykorzystywanie metod statystycznych. Metoda ta wykorzystywana jest do tworzenia bardziej zaawansowanych utworów literackich - program Geoffa Petersa [06] wykorzystuje słowa ze statystyk najczęściej wyszukiwanych fraz w wyszukiwarce Google. Algorytm działania programu jest następujący - użyj wyszukiwarki Google dla podanej frazy złożonej z ostatnio napisanych trzech/czterech słów (zacznij od tematu wiersza); znajdź pierwszą stronę internetową, która odpowiada podanej frazie; znajdź słowa, które następują po nich i zapisz je a następnie powtórz procedurę ustaloną liczbę razy. Poniżej przedstawiono wygenerowany w ten sposób wiersz "My dog always"My dog always jumps on me and on my children for over five years after adjusting for inflation and population growth between FY 1977 and FY 1978 figures also include video sales as well as market Leadership as demonstrated by some of the questions sent in to the author Center provides details on the 3.3 Wykorzystywanie bazy danychPrzy pomocy bazy utworów poetyckich danego autora możemy stworzyć wiersz, który brzmiałby, jakby został napisany przez niego - przykładowo przez Jima Morrisona [07]. Program pobiera poszczególne słowa, frazy albo zdania z poszczególnych utworów autora, w efekcie powstaje kolaż, który może brzmieć jak nigdy nie napisany jego wiersz. Poniżej wiersz, który w założeniach brzmi jak utwór Jima Morrisona, "Spanish Caravans"The sun bathes in the moon's death. C'mon baby! The night lingers long on mysterious fire. Old friend, the desert emanates the laughter of dark sadness! Love Street lives in velvet summers. Yeahhhh! The morning gets drunk in the humor of glorious delight. Shall not my cock weep with purple agony? W oparciu o podaną jedną linię aplikacja [08] wygeneruje trzy następne, starając się zrymować je ze sobą, stosując rymy krzyżowe ABAB (niestety, często powielając rymowane słowa). Gdy tematem jest kurs "Sztuczna inteligencja", program może dać nieoczekiwane rezultaty: Methods and algorithms of artificial intelligence And walk along and drink my gin, what a wonderful life Highlighting and underlying my deep insignificance, I fear nay; I am doomed to a useful life... Ciekawszym znalezionym programem jest [09] umożliwiający utworzenie własnej bazy słów oraz podanie wzorców, na podstawie których stworzone zostaną krótkie utwory. 4. AlgorytmJako główny cel przy tworzeniu wierszy przyjęto przede wszystkim zachowanie prawidłowej struktury kompozycji danej formy lirycznej i poprawność składni. Program wykorzystuje język Python, z pomocą którego analizator morfologiczny Morfeusz przetwarza podany przez użytkownika tekst - temat utworu literackiego. Następnie z pomocą kilku słowników oraz sieci leksykalno-semantycznej Słowosieć generuję mapę myśli - tablicę - w której zawiera słowa powiązane z hasłem. Idea jest prosta - wyszukuje on w słownikach bliskoznacznych podobnych fraz, podobnie postępuje w przypadku Słowosieci.Przykładowo, podanie jako tematu rosnące czerwone pomidory spowoduje, iż Morfeusz wyodrębni z niego kluczowe słowa rosnąć, czerwona, czerwone, czerwony i pomidor. Na ich podstawie tablica zawierać będzie hasła takie jak dojrzewać , kiełkować, krzewić się, koralowy, pomidor uprawny ale i komuch czy marksistowski. Pytanie, czy użytkownik rzeczywiście miał na myśli ukryte komunistyczne hasła myśląc o pomidorach pozostawiono tu bez odpowiedzi. W dalszej części na podstawie bazy rymów dobiera się je do słów kluczowych i formułuje wiersz według konkretnych składniowych wytycznych (takich jak liczba głosek czy wersów). Wykorzystuje, podobnie jak program [09], konkretne konstrukcje zdań (na które składają się poszczególne części mowy, ułożone w odpowiedniej kolejności. Losowane są one ze słowników części mowy. Istotnym elementem jest uzupełnienie wiersza o słowa kluczowe, nawiązujące do tematu. Tak w uproszczeniu wygląda ogólny algorytm kreacji krótkich form lirycznych. 5. Narzędzia5.1 Język PythonJęzyk wysokiego poziomu Python posiada szereg przydatnych funkcji do obsługi tekstu, jego głównymi wykorzystywanymi zaletami są prosta obsługa łańcuchów znakowych (jak i samego języka), wczytywania i zapisu z/do plików tekstowych, dostępność wielu narzędzi i modułów - szczególnie dla celów lingwistyki informatycznej i podobnych zagadnień oraz przenośność kodu. Pewnym zauważonym problemem są komplikacje z obsługą różnych kodowań - z tego powodu napotkano trudności przy próbie jednoczesnego wykorzystywania analizatora składniowego, obsługującego kodowanie domyślne dla systemów Windows (CP1250) albo Linux (ISO8859-2) oraz Słowosieci (UTF8). Wybrano starszą gałąź 2.x (wersja 2.7.3) ze względu na możliwość obsługi przez nią przydatnych bibliotek i narzędzi, które zostały wykorzystywane w programie.5.2 Analizator morfologiczny MorfeuszMorfeusz [10] wykonuje analizę morfologiczną słów w języku polskim. Polega ona na określeniu dla danego słowa wszystkich form wszystkich leksemów (abstrakcyjnej jednostki systemu słownikowego). Proces ten nie uwzględnia kontekstu. Przykładowo, w wyrażeniu mam kaca słowo mam zostanie zinterpretowane jako dopełniacz liczby mnogiej słowa mama, forma czasownika mamić oraz forma czasownika mieć. Natomiast kac, tak jak w życiu, zostanie jednoznacznie zinterpretowany.Do Morfeusza udostępniony został moduł, pozwalający na komunikację poprzez środowisko języka Python [11], który został wykorzystany w projekcie. Pozwala on zarówno na komunikację z programem w środowisku Windows oraz Linux (należy zmienić tylko wybrać odpowiednią dołączoną bibliotekę w zależności od używanego systemu operacyjnego - *.dll albo *.so. Morfeusz dostępny jest na zasadach dwuklauzulowej licencji BSD (zgodnej z zasadą wolnego oprogramowania). 5.3 SłownikiJednym z największych ogólnodostępnych polskich słowników na licencji GNU GPL jest słownik języka polskiego [12] stworzony dla gry Literaki, liczący obecnie prawie 2,5 miliona polskich haseł - na jego podstawie stworzono bazę rymów. Bardzo pomocna okazała się angielska wersja serwisu wiktionary, z bazy danych którego zebrano około 6000 najbardziej popularnych polskich rzeczowników, 1400 przymiotników, 700 czasowników oraz 500 innych części mowy [13]. Zostały one zapisane w 10 plikach; każdy stanowi zbiór wyrazów należących do innej części mowy. Stanowią one obecnie podstawową bazę leksykalną dla programu. Jako pomoc przy tworzeniu mapy myśli wykorzystano wolnodostępny słownik wyrazów bliskoznacznych w wersji tekstowej [14], który jest przeszukiwany z poziomu języka Python.5.4 Baza danych rymówNa podstawie wzoru dostępnego w Słowniku Rymów (dostępnego na zasadzie wolnej licencji X11) [15] wygenerowano własną bazę rymów. Wzór zawiera podzielone na dwa podkatalogi rymy żeńskie (katalog "f", z akcentem przypadający na przedostatnią sylabę wyrazu) oraz męskie (katalog "m", z akcentem przypadający na ostatnią sylabę wyrazu). W oryginale baza danych opierała się na około 15 tysiącach słów ze zbioru wierszy J. Brzechwy. Została rozszerzona o 2,5 miliona haseł ze słownika [12]. Kod generujący napisano w języku Python, sam proces generacji 53905 różnych rymów trwał prawię godzinę.5.5 Słowosieć i NLTKJęzyk Python dostarcza bardzo interesującą bibliotekę NLTK, służącą jako platforma do pracy z językiem naturalnym [16]. Jego największą zaletą, wykorzystywaną w ramach projektu, jest możliwość współpracy z Wordnetem [17]. Jest to sieć leksykalno-semantyczna, w której jednostki leksykalne łączone są za pomocą relacji semantycznych pomiędzy jednostkami - przykładowo na podstawie [18] są to hiperonimia / hiponimia = relacja, która łączy wyraz w znaczeniu bardziej ogólnym (kot) z wyrazem w znaczeniu bardziej szczegółowym (tygrys - każdy tygrys należy bowiem do kotowatych); meronimia / holonimia = relacja oznaczająca część i całość, np. zderzak - samochód (samochody mają zderzaki). Pierwszym wordnetem na świecie był Princeton WordNet. Obecnie na Politechnice Wrocławskiej tworzony jest Polski WordNet - Słowosieć. Obecnie udostępniona wersja Słowosieci 2.0 liczy 116000 synsetów, 160000 jednostek leksykalnych i niemal 350000 relacji leksykalnych. Dostęp do Słowosieci (na otwartej licencji) można uzyskać :- przez import w analogiczny sposób jak WordNet korpusu Słowosieci [17] (pliki Słowosieci dostępne są na stronie [19]), jedyny zauważony problem to konieczność pracy w kodowaniu UTF-8 w środowisku Pythona - w innym przypadku występują błędy z polskimi znakami; - poprzez serwer internetowy [20], a z poziomu Pythona bibliotekę SOAP (rozwiązanie bardzo problemowe, można próbować instalować to w sposób opisany w [21], ale najprawdopodobniej spowoduje to tylko stratę czasu użytkownika - dużo lepiej użyć biblioteki suds - problem opisano w [22]); - jeśli pojawiłyby się z dostępem do niektórych funkcji, warto użyć innej, starszej wersji Słowosieci, dostępnej pod adresem www [23]. 6. WynikiPoniżej przedstawiono uzyskane wyniki. Nie są one miarodajne dla działania programu. Bardzo często zdarza się, iż program generuje kompletny bełkot (co opisano w następnym rozdziale). Co jakiś czas prezentuje wiersz, który można uznać za stworzony przez początkującego poetę lubującego się w abstrakcyjnych formach. Analiza poezji jest specyficznym zajęciem, więc najlepiej przemówią za siebie same utwory.6.1 HaikuJak omówiono już wcześniej, haiku pozostawia dużą dowolność w interpretacji. Przykładowo, poniższy z utworów mógłby być opisem meczu meczu Polska-Grecja na Euro 2012bystrość bramkarz wstęp otworzyć bym rozsądek czyj trącący fałszem . Poniżej wygenerowano haiku, których tematem była hemoglobina, widać na jego przykładzie w jaki sposób program korzysta z bazy danych i zależności semantycznych szczęśliwie gładko barwnik czerwony krwi gdzieś hemoglobina . W ramach testów proszono o opinie na temat RoboTrubadura różne osoby. Poproszono o podanie tematów wierszy a następnie wybranie najlepszych spośród wygenerowanych. Małgorzata, absolwentka architektury, wybrała jako temat słowa paprotka mimoza miłość wrzeciono papryka. Ogólna jej opinia program ma problemy z gramatyką i to przeszkadza w większości wypadków, ale od czasu do czasu wyjdzie coś dobrego. Do gustu najbardziej przypadły jej haiku szaleńcza miłość niemy chaotyczny odkąd witaj namiętność Opinia: mówi on o tym, jak porywczy mąż natrafił na swoja kobietę i mimo, że poznał ja dopiero teraz czuje, jakby znał ja od zawsze i ogarnęło nim pożądanie czułość szal jako miłość papryka uczucie zaślepienie ongiś Opinia: jest subtelny, człowiek zaślepiony uczuciem przyjemności bycia z drugą osoba mówi o swoim uczuciu do niej, jakie jest błogie, z akcentem pikantności Michał, student Automatyki i Robotyki, jako swój ulubiony temat wybrał pyszne gofry. Opinia: Nie wszystkie wygenerowane przez program wiersze są poprawne semantycznie lub syntaktycznie, co zrzucić można na charakter przyjętego utworu lirycznego (haiku). Zdarzają się jednak wiersze w pełni poprawne we wszystkich aspektach i do tego poruszające ważkie tematy, np. sposób pozyskania oraz cenę gofrów. dziecinny czyli demokratycznie skądś gofr nieważne drogo 6.2 LepiejeLepieje, zwane lepiuchami są krótkimi, żartobliwymi nonsensownymi dwuwierszami. Pierwszy zaczyna się od słowa "Lepiej", zaś drugi, oddzielony przecinkiem, od słowa "niż". Poniżej przedstawiono wygenerowane lepieje na różne tematy, przedstawiające dobre rady życiowe:Lepiej serdeczny polityk, niż kot psychoanalityk Lepiej czosnkowy Stanisław, niż glonowy pan Jarosław Lepiej chmiel optyczny dawca, niż jakoby rzeczoznawca Lepiej zabijać smarować, niż gdzie dzielić ignorować Lepiej wyciągnąć się szybko, niż rozwalić się niechybko Lepiej chaotyczny nuta, niż przeinaczać nakłuta Lepiej Rosół olśniewający, niż z klasą się firmujący Program zdecydowanie sprawdza się w tej formie lirycznej - krótkie, żartobliwe zdania nie muszą mieć dla czytelnika sensu aby wywołać na jego twarzy uśmiech. 6.3 WierszykiProgram ma możliwość generowania krótkich rymowanych wierszyków. Jak widać na załączonych przykładach, im dłuższy ma być wiersz, tym przeciętny wynik staje się bardziej abstrakcyjny i niezrozumiały.O czym myślisz : upalny wieczór Ilu linijkowy ma być wiersz : 4 przedmiesiączkowy wojna ubiera upalny dlaczego dystans nieakrosomalny gdzież jest październikowy kwas solny na razie, małorolny O czym myślisz : czarny kot Ilu linijkowy ma być wiersz : 4 mięsożerny wpływ przewodzi plemię odgrodzi nepalski może oddychać jak kot a kot chce zabijać niepodległy młot O czym myślisz : krowa na polanie Ilu linijkowy ma być wiersz : 6 dlaczego ławka zatrzyma jodłowa jak tensorowy pielgrzyma nigdy pieprzyć mechanika wąski może myć się jak agrochemika niegrzeczny śnieżki pęka polny łasica wysyła przestęka O czym myślisz : krowa na polanie Ilu linijkowy ma być wiersz : 4 dlaczego mieszkaniec wspomina aua, pakościanina pa, krowa dlaczego sprzątaczka hamburgerowa O czym myślisz : sztuczna inteligencja Ilu linijkowy ma być wiersz : 2 amulet, intelekt i pech halo, wdech 6.4 Opinie czytelnikówMichał 2: (O lepiejach) Numer 1 jest poprostu dobry. Numer 5 przemawia do mnie po treningu z padów. Generalnie trochę boli że nie trzyma się rodzaju podmiotu przy dopasowywaniu przymiotników, co idać w numerze 6.(O wierszykach) Druga połowa pierwszego wiersza wzbudza wrażenie sensowności, pierwsza nie. Czarny kot do mnie nie przemówił. Tak samo krowa. Si 2 jest.. chyba niezły nawet. Dagna: wooooow, to mi się podoba :D "Lepiej wyciągnąć się szybko, niż rozwalić się niechybko". Przydałaby się myśl, jak można dalej rozwinąć to co stworzyłeś i sądzę, że warto byłoby wypróbować metody maszynowego uczenia (machine learning) do poprawy generowania tekstów. Tzn. gdyby uzytkownik miał mozliwość oceny wiersza i wygenerował 100 000 wierszy i każdy ocenił, to generator zapewne mógłby wysnuć wnioski, dlaczego jedne wiersze są lepsze od innych, dzięki czemu mógłby generować coraz lepsze wiersze ;) Mateusz: Program nie uwzględnia różnic pomiędzy osobą żeńską a męską - powinien zapamiętywać wyrazy odnoszące się do osób i zmieniać ich formę po wylosowaniu odpowiedniego podmiotu. Moje odczucia co do projektu są bardzo pozytywne - jest rewelacyjny:) Chciałbym go kiedyś zobaczyć w lepszej kondycji bo mnie bardzo interesują takie rzeczy:D Natalia: W ramach luźnej myśli: mnie się z jednej strony podoba, że raz używa bezokoliczników a raz odmienia czasowniki przez osoby a z drugiej jakby nie :] . Jestem po tomiku Herberta więc mogę marudzić :D . Haiku: 1. czas na uczczenie 250 porażki reprezentacji Polski w piłce nożnej - ok :) 2. hemoglobina mi się bardzo podoba 3. ok - dokładnie... gramatyka - jak chociażby te czasowniki, bo czasem bardzo ładnie Ci się hasła zgadzają i widać sens, a potem trzaśnie coś niegramatycznego i się gubię 4. dobrze się wpasowuje w nurt otumanionych miłością wierszokletów - oni nie muszą być do końca sensowni 5. "nieważne drogo" - jest puenta - podoba mi się niemal jak hemoglobina Lepieje: Jak najbardziej ok - zgadzam się z wnioskiem, że program do tej formy lirycznej zdecydowanie się nadaje Wierszyki 1. trochę za abstrakcyjny jak dla mnie, ale "gdzież jest październikowy kwas solny" jest śliczne 2. very good 3. znowu trochę za mało sensowny 4. ok 5. oddaje ideę kursu :) Wnioski: Kilka rzeczy do dopracowania, aż kusi się palnąć poemat na dwie strony i zobaczyć co wyjdzie :D, ale gdyby zlecić mu tematy emocjonalne - 'miłość', 'złość' czy jakoś tak, a nie czysty realizm typu 'krzesło' to idzie mu bardzo dobrze. Krzysztof: Pierwszy (lepiej) faktycznie bardzo chwytliwe jest, acz bym zamienił kolejność: "Lepiej kot psychoanalityk, niż serdeczny polityk." Zdecydowanie wygrywa czarny kot, krótsza sztuczna inteligencja również niezła, w pozostałych ciężko znaleźć coś spójnego ;)Myślałeś o nowym gatunku lirycznym - roboabsurdalizm? Ida: Lepieje: W przypadku pierwszych pięciu wersów, jestem w stanie dopasować jakieś znaczenie, choćby nie wiem jak naciągane. Ostatnie dwa są, jak dla mnie, zupełnie bez sensu. Przy czym ostatni jest jeszcze w pełni poprawny gramatycznie. Szósty zaś jest jak trafienie kulą w płot - w tym przypadku rzeczywiście widać, że wersy są generowane. W innych przypadkach brak widocznego sensu można by zrzucić na czyjąś dziwną inwencję twórczą. Wierszyki: Przyznam szczerze, że wiersze nie są najwyższych lotów. Podoba mi się dwuwersowa SI oraz czarny kot - choć nad nim nieco rozmyślałam, chcąc dopasować sens. W przypadku pozostałych dałam sobie spokój. Wiersze są trochę zabawne, ale widać też, że program nie wyrabia z semantyką (dużo bardziej niż w przypadku lepiejów), choć fleksja jest całkiem całkiem - w znacznej większości wyrazy zostały dobrze odmienione. Muszę przyznać, że generowane formy krótkie są zaskakująco niezłe - lepieje, wiersz dwuwersowy. Dłuższe wiersze brzmią w większości jak radosna twórczość nałogowego palacza trawki, ale jak się je przeczyta na głos, to też potrafią rozbawić. Myślę, że projekt wyszedł ci całkiem fajnie, a RoboTrubadur okazał się programem na poziomie. Michał 3: Tematy "upalny wieczór" oraz "czarny kot" są dość ciekawe, zwłaszcza w drugich wersach, gdzie nie tylko semantycznie są zjadliwe, ale i składniowo ciekawsze. Szkoda, że w "wieczorze" algorytm nie zrobił "przedmiesiączkowej wojny";P "Krowa na polanie" chyba najbardziej mi się podoba. Nawet sympatycznie można ją przeczytać, np. z poniższą interpunkcją: Dlaczego ławka zatrzyma jodłowa, jak tensorowy pielgrzyma? Nigdy pieprzyć mechanika; (a może: "Nigdy pieprzyć - mechanika;"?) wąski może myć się jak agrochemika. Niegrzeczny! Śnieżki pęka, polny! Łasica wysyła przestęka. Zaś drugi wiersza o SI, mógłby być zawołaniem propagandowym!:D 7. PodsumowanieGłówne zadanie - automatyczna generacja prostych utworów poetyckich - powiodło się. Program wykorzystuje bazę słów, można zauważyć, z których słów bezpośrednio korzysta przy formułowaniu utworu. Poziom wierszy jest zróżnicowany, najczęściej jednak są one zabawne, co było jednym z celów. Ważnym zrealizowanym zadaniem jest stworzenie procesu symulującego rozmyślanie programu nad zadanym tematem. Starano się wykorzystywać metody opisywane w znalezionych generatorach poezji, jednak brak poważnych publikacji oraz algorytmów dedykowanych dlatego zadania. Dopiero pod koniec realizacji projektu zapoznano się z konkursem [24], dzięki któremu można zdobyć wartościowe wskazówki i rady dotyczące zadania.Bardzo poważną wadą jest fakt, iż nie zawsze trzymają się zasad gramatyki języka polskiego - jest to bardzo trudne zadanie, chociażby przez wzgląd na fleksję. Jest to główna wada zauważana przez czytelników. Wynika to również z faktu, iż w przeciwieństwie do wielu innych generatorów RoboTrubadur nie opiera się na żadnych gotowych zdaniach zaczerpniętych z tomików poezji - stara się formułować je z poziomu słów kluczowych, co niestety nie zawsze wychodzi dobrze (przykład 6 wersowego wiersza, który wbrew swojemu tematowi nic nie mówi o krowie). W utworach często pojawiają się rzadko używane w mowie potocznej słowa, sporo jest neologizmów, wyrażeń naukowych, przymiotników od nazw własnych. Wynika to z braku odpowiedniego słownika oraz źle dobranych nastaw dodawania konkretnych zbiorów słów (na przykład wspomnianych rzeczowników własnych) - program wymaga dodatkowych testów. Należałoby także zoptymalizować kod w języku Python - był to pierwszy program autora w nim pisany i niestety część funkcji nie wykorzystuje w pełni zalet wynikających z obiektowości tego języka. Zdecydowanie największą wadą jest jego zawodność - nie zawsze znajduje rym lub poprawnie dopasowywuje wyraz do zadanej ilości głosek, w związku z tym często należy powtarzać procedurę generacji wierszy, aby uzyskać sensowne wyniki. Dobre wiersze są generowane dla treściwych tematów (2-3 wyrazy), dla których można znaleźć konkretne powiązane frazy. Jeśli jest to tylko jeden wyraz, synonimów jest najczęściej zbyt mało, aby utworzyły dobrą "mapę myśli". Dla liczby słów większej niż 4, temat, w przypadku krótkich form, się rozmywa - wiersz traci jakikolwiek sens (jeśli jeszcze go posiadał). Wstępne opinie czytelników są w miarę pozytywne, ale można zauważyć, że utwory te w obecnym stadium nie mogą być uznane za formę poważnej poezji - raczej przypominają żartobliwe, niezbyt sensowne teksty wypełnione częstochowskimi rymami. Program potrafi jednak zadziwić swoimi zwrotami - wymyślnymi metaforami czy oksymoronami. Aby być w pełni funkcjonalnym (generować od razu wiersze uznawane za dobre, bez dużej ilości prób), wymaga jeszcze dużej ilości pracy - głównie implementacji w szerszym zakresie zasad gramatyki języka polskiego oraz selekcji wyrazów wybieranych ze słownika. Ciekawym pomysłem jest możliwość zastosowania algorytmów uczących. Bibliografia[01] Adam Kulawik, Poetyka : Wstęp do teorii dzieła literackiego, Wydanie II Poprawione, Antykwa, Kraków 1994, s. 267[02] Tomasz Kozłowski, Jak napisać dobry wiersz - vademecum, http://www.poezja.exe.pl/vademecum.html [03] Silicon poet pens haiku on demand, New Scientist, 01.2008, http://www.newscientist.com/article/mg19726386.000-silicon-poet-pens-haiku-on-demand.html [04] Danny O'Brien, Haiku 1.17, 2002; kod w języku Python (v. 2.2) dostępny on-line http://www.oblomovka.com/code/haiku/haiku [05] Poem Generator - Machine Generated Random Poetry (generator haiku i innych krótkich form lirycznych), http://poetry.namegeneratorfun.com [06] Geoff Peters, 05.2006, Strona internetowa twórcy programu Google Poetry Robot, http://www.gpeters.com/google-poem-gallery [07] The Poetry Generator, http://www.jelks.nu/poetry/dom [08] Chris Seidel, Heretical Rhyme Generator, http://www.pangloss.com/seidel/Poem [09] Poem Generator, http://thinkzone.wlonk.com/PoemGen/PoemGen.htm [10] Zygmunt Saloni, Włodzimierz Gruszczyński, Marcin Woliński, Robert Wołosz, Analizator morfologiczny Morfeusz, http://sgjp.pl/morfeusz/index.html [11] Jakub Wilk, Moduł programu Morfeusz dla języka Python, https://bitbucket.org/jwilk/python-morfeusz/raw/default/morfeusz.py [12] Marek Szykuła, Lit - program do gry w Literaki, http://marek01.pop.e-wro.pl/lit [13] Wikipedia, Polish parts of speech, http://en.wiktionary.org/wiki/Category:Polish_parts_of_speech [14] Wolnodostępny słownik wyrazów bliskoznacznych języka polskiego, http://synonimy.ux.pl [15] Bartosz Wójcik, Słownik Rymów, Czerwiec 2006, http://coder.kuzniasukcesu.net/portfolio/slownik-rymow [16] NLTK 2.0 documentation, http://nltk.org [17] WordNet Interface, http://nltk.googlecode.com/svn/trunk/doc/howto/wordnet.html [18] Grupa Technologii Językowych G4.19 Politechniki Wrocławskiej, Słowosieć, http://nlp.pwr.wroc.pl/narzedzia-i-zasoby/slowosiec [19] Słowosieć plWordNet - wordnet dla j. polskiego, http://nlp.pwr.wroc.pl/plwordnet/download/?lang=pl [20] plWordNet Web Service, http://nlp.pwr.wroc.pl/clarin/ws/plwordnet [21] Zanurkuj w Pythonie - SOAP, http://pl.wikibooks.org/wiki/Zanurkuj_w_Pythonie/SOAP [22] Python SOAP client with suds, http://www.jansipke.nl/python-soap-client-with-suds [23] Sprawdzona wersja Słowosieci do pracy z biblioteką NLTK, http://156.17.129.130/share/wordnet.7z [24] Turniej Elektrybałtów - Konkurs automatycznej poezji, http://turniej.wolnelektury.pl/2011/ |