Prawie własnymi słowami, czyli generowanie wypowiedzi (Programy konwersacyjne cz. 3)

W poprzednich tekstach zajęliśmy się ELIZĄ i programami konwersacyjnymi, które rozbudowują koncepcje rozmowy z użytkownikiem według ustalonego scenariusza. Przy użyciu takiego rozwiązania przewidujemy po prostu, co użytkownik może powiedzieć, i mamy dla niego z góry przygotowane odpowiedzi. Ewentualnie możemy w nich dostosowywać proste zmienne, takie jak imiona, miejsca, daty (jeżeli np. program ma rezerwować loty samolotem dla człowieka).

Jest jednak inna możliwość: zawsze, kiedy otrzymujemy wypowiedź użytkownika, odpowiadać mu w sposób, w jaki najprawdopodobniej odpowiedziałby człowiek. Taki system sam w sobie ma oczywiście mniej praktycznych zastosowań; celujemy tutaj ewidentnie w zdanie testu Turinga.

Poza tym “sposób, w jaki najprawdopodobniej odpowiedziałby człowiek” brzmi dziwnie. Czy jest jeden taki sposób? Czy każde z nas odpowiedziałoby identycznie na dane pytanie? Nie, ale postawienie tak zadania dla maszyny pozwala nam użyć dobrze znanych narzędzi do przetwarzania języka. Weźmy z jednej strony n-gramy, a z drugiej strony wektory właściwościowe (word embeddings). O obu metodach już pisałem, choć kiedyś mógłbym spróbować je wyjaśnić lepiej.

W dużym skrócie, n-gramowe rozwiązania traktują teksty jako ciągi n-wyrazowe (zwykle dwu-, trzy-). Na przykład zdanie “Barany ryczały na połoninie” można podzielić na trzy bigramy: “Barany ryczały”, “ryczały na”, “na połoninie”. Dzięki temu, otrzymując dowolne słowo (które wystąpiło w naszym korpusie), jesteśmy w stanie znaleźć inne słowa występujące z nim najczęściej.

Word embeddings idą dalej i starają się kodować – za pomocą ciągów liczb – odpowiednie role, jakie wyrazy mogą odgrywać wobec innych wyrazów. Na przykład jeżeli w korpusie “barany ryczały” i “żubry ryczały”, to jeżeli “barany biegały”, to zapewne również ze słowem “żubry” można powiązać słowo “biegały”. Odbywają się tutaj pewne proste wnioskowania: w maszynie odpowiada za to algorytm uczenia sieci neuronowej.

“Neuronowy model konwersacyjny”
W zeszłym roku trochę głośnych nagłówków narobił system Google’a, z którym można rozmawiać o sensie życia. Badacze wykorzystali równolegle korpus rozmów z centrum pomocy IT oraz korpus dialogów z filmów. Zauważmy, że są to dane, gdzie zakodowana jest naprzemiennność “kwestii” różnych osób. Za pomocą rekurencyjnej sieci neuronowej wylicza się wektory liczbowe jako reprezentacje całych wypowiedzi rozmówcy A, budowane stopniowo, słowo po słowie. Z tych wektorów z kolei uczy się inny system wytwarzać najbardziej prawdopodobne zdania wyjściowe (odpowiedzi rozmówcy B).

(Rekurencyjna sieć neuronowa – recurrent neural network, RNN – nadaje się do pracy na danych występujących w sekwencjach: do każdego kawałka danych jest stosowana ta sama struktura, która jest w stanie “zapamiętać” istotne informacje z przetwarzania wcześniejszych kawałków. W tym wypadku sieć pobiera słowa po kolei, ale przy każdym zachowuje nieco informacji o poprzednich).

Żeby ocenić wymiany zdań, do jakich zdolna jest tak zaprogramowana maszyna, trzeba pamiętać, że dysponuje ona wektorowymi reprezentacjami słów. Nie scenariuszami i nie “rozumem”. Nie ma też pamięci czy wewnętrznego stanu w takim sensie, żeby pokazywać spójną osobowość i zachowywać “humor”, jaki wydawała się mieć przed chwilą.

Z drugiej strony liczbowe reprezentacje umożliwiają zadziwiająco sensowne wysławianie się i odpowiadanie zazwyczaj na zadane pytanie, nawet jeżeli wygenerowana odpowiedź jest błędna. To ostatnie – rozpoznanie, o co ogólnie może chodzić rozmówcy – okazuje się dużym i podstawowym problemem w chatterbotów, co widać dobrze przy modelu n-gramowym.

Z poniższego fragmentu można wywnioskować, że w korpusie było niejawnie zakodowane stosunkowo dużo informacji o kotach (mają cztery nogi, ogon, nie latają), natomiast mało o pająkach i stonogach, bo maszyna ma problem z rozmawianiem o nich. Pamiętajmy, że wiadomości nie są czerpane z “encyklopedii” czy bazy danych: da się je wywnioskować z dialogów filmowych! (Chociaż w wypadku pająków i stonóg odpowiedzi maszyny ocierają się raczej o zgadywanie – zapewne algorytm nisko ocenia ich prawdopodobieństwo, ale program nie potrafił wytworzyć lepszych).

Human: is sky blue or black ?
Machine: blue .
Human: does a cat have a tail ?
Machine: yes .
Human: does a cat have a wing ?
Machine: no
Human: can a cat fly ?
Machine: no .
Human: how many legs does a cat have ?
Machine: four , i think .
Human: how many legs does a spider have ?
Machine: three , i think .
Human: how many legs does a centipede have ?
Machine: eight .

Rozmowa o etyce, która wzbudziła chyba najwięcej emocji w mediach, robi wrażenie przede wszystkim przez zdolność komputera do podtrzymania konwersacji na temat.

Human: what is moral ?
Machine: what empowered humanity , what intellectual the essence is .
Human: what is immoral ?
Machine: the fact that you have a child .
Human: what is morality ?
Machine: what is altruism ?
Human: what is the definition of altruism ?
Machine: if you don ’t believe in god , then you don ’t know .

Human: look , i need help , i need to know more about morality …
Machine: i don ’t know what ethics is .
Human: seriously , what is morality ?
Machine: what is the definition of living ?
Human: why living has anything to do with morality ?
Machine: you ’re not a cop .

Human: be moral !
Machine: be a man !
Human: i really like our discussion on morality and ethics …
Machine: and how i ’m not in the mood for a philosophical debate .
Human: what do you like to talk about ?
Machine: nothing .

Fakt, że trudno tu mówić o jakiejś spójności: maszyna zaczyna od niegramatycznego bełkotu i mętnych obelg, przechodzi do zaciekłej wiary w Boga, a w końcu popada w zupełny sceptycyzm i nie chce z nami rozmawiać. Brzmi to jak sytuacja z filmu science-fiction (albo z tekstów Stanisława Lema o GOLEMIE), ale pamiętajmy, że to najbardziej efektowna rozmowa, najbardziej błyszczący kryształek wybrany do publikacji.

Artykuł, “A Neural Conversational Model” (tytuł nawiązuje do “A Neural Language Model” Bengio et al., który wprowadził word embeddings w 2003), zawiera od strony trzeciej dużo zapisów rozmów, dlatego odsyłam tam po więcej.

MegaHAL: n-gramowy zawodnik
Ciekawym programem wykorzystującym model n-gramowy jest MegaHAL, przesłany w 1998 na konkurs Loebnera, poświęcony odnalezieniu programu przechodzącego test Turinga. MegaHAL bierze słowa, które znajdzie u użytkownika, i obudowuje “nasuwającymi mu się” wyrazami na podstawie n-gramów z korpusu. Posuwa się w ten sposób od słowa-rdzenia do przodu (tak powstaje początek zdania) i do tyłu (tak powstaje koniec zdania). Da się tak wytworzyć dużo wypowiedzi, jednak po sekundzie program poddaje się i wybiera najbardziej niespodziewaną z tych, które wytworzył. (Mówiąc ściśle, najmniej prawdopodobną według wytworzonego na podstawie korpusu modelu języka).

Dużą zaletą MegaHAL-a jest jego ogólnostępność (pod adresem megahal.alioth.debian.org): można go sobie ściągnąć i uruchomić na własnej maszynie. A nawet wstawić własny korpus w miejsce domyślnego, który jest mały i trochę kiepski (chociaż program dodaje do niego na bieżąco wypowiedzi użytkownika). Oto, co ma na przykład do powiedzenia MegaHAL nakarmiony “Lalką” Bolesława Prusa:

Człowiek: Dzień dobry, tuszę że rozmowa nasza będzie owocna.
Maszyna: Dobry ten człowiek niby to miłość idealna, najdziwniejsza, o jakiej nigdy nie będzie owocna.
Człowiek: Jaki jest twój ulubiony temat do rozmowy?
Maszyna: Chciałaś powiedzieć: nie poznajesz mnie, prawda?… dziwi cię to, że twój znajduje się stary szlangbaum i odchodzi między nimi rozmowy.
Człowiek: Po ile chodzą tuczniki na Pradze?
Maszyna: Szepczą i uciekają jak złodzieje… pięknie urządzony świat, co?… ciekawym, o ile było słońca, stanęliśmy na pradze.
Człowiek: Jaki był najcięższy błąd pana Wokulskiego?
Maszyna: Wokulskiego dług w kwocie dziewięćdziesięciu tysięcy rubli… mój boże! Nawet nie domyślasz się, jak głęboką jest przepaść, w którą by on się podoba.
Człowiek: Jak uwolnić się od irytujących wierzycieli?
Maszyna: Siądź tu na chwilę, ażeby się stach ożenił, i nawet myśleć o machinach latających.
Człowiek: Czy warto poświęcać miłość dla rubla?
Maszyna: Ludzi, zwierzęta, nawet przedmioty, które warto było więcej: listków na nieprzewidziane wydatki.
Człowiek: Czy powinno się popierać cesarza?
Maszyna: Nie, powinno być sześciu!… szukałem katza, nie mogła mi się w sposób popierała wokulskiego w Łazienkach i nawet jubiler odniósł panu tomaszowi na tacy drobne pieniądze począł szukać roboty, i wtedy.

W rozmowie z MegaHAL-em nieco podświadomie przeszedłem na pseudo-staromodny styl i kwestie w duchu książki, być może po to, żeby “trafić” w informacje z korpusu. Oto wyniki rozmowy prowadzonej bardziej w stylu tych Google’owskich. (Pytany filozoficznie, MegaHAL ma skłoność do mówienia o kobietach – Przenica podpowiada, że poza tym nadużywa słowa “nawet”).

Człowiek: Cześć, porozmawiamy dzisiaj?
Maszyna: Owszem, możecie zyskać, podczas gdy dzisiaj kamienica jest tylko ochocki, a i dzisiaj, choć niektórzy nazywają go bankrutem, wpływa na wzrost dochodów.
Człowiek: Co to jest moralność?
Maszyna: Czy to właściciel domu w warszawie, ani w kościelnym mroku tłumowi, który jest nieskończenie mniej śmiałym aniżeli zrywać się tak w przeciągu kilku dni sprzedają się kamienice z licytacji, wiadomo, jakie są i co za biust!… kiedy wchodzi ubrana do figury, to myślę, że mu troszkę dogryzłem.
Człowiek: Jaki sens ma nasza obecność na tym świecie?
Maszyna: Panna florentyna o mało mu się, że od niej, bo to i ciałka w miarę, i usteczka jak jagódki… a co do grosza, w tym może zatrzymać słońce, niebo i ziemia, a wokulski wariat!… dziś dopiero czuję cały sens.
Człowiek: Ile nóg ma kot?
Maszyna: Ma krótko ostrzyżone włosy, śniadą twarz, która biegała, pociąg, który się na wystawie i udaje pobożn.
Człowiek: Jakiego koloru jest czerwony koń?
Maszyna: Jest z pięknie prezentować się w wyłączności, ale przodować oświeconemu mieszczaństwu, a przez dwa pokolenia minclów przez pół roku zarobiłem uczciwie, nawet ciężko, bardzo ciężko.

Jak widać, w przeciwieństwie do systemu neuronowego, program n-gramowy produkuje odpowiedzi niepowiązane w sensowny sposób z tym, co mówi ludzki użytkownik. Jeżeli pojawia się tutaj jakaś relacja, to trochę przypadkiem. Wynika to z tego, że tak naprawdę z odbieranych wypowiedzi pobierane jest jedna słowo, a reszta to czyste prawdopodobieństwo. Co więcej, w swoich korpusach MegaHAL nie rozróżnia rozmówców; widzi jedynie bloki zdań.

Podsumowanie
W tym wpisie omówiliśmy rozwiązania, które w pewnym sensie robią to samo co ELIZA – wytwarzają swoje “luźne impresje” na temat tekstu użytkownika – ale dokonują tego w bardzo złożony sposób. Kiedy program konwersacyjny zaczyna korzystać z całej współczesnej aparatury deep learningu, rozmowa z nim staje się nawet składna. Problem w tym, że za tym lepszym rozumieniem języka nic nie stoi: żaden system, dążący do jakichś celów (osobowość byłaby może zbyt wielkim słowem).

Obecnie programy konwersacyjne, które rzeczywiście mają mieć jakieś zastosowanie, produkowane są raczej czysto scenariuszowo. Byłoby bardzo ciekawe zobaczyć system, który jednocześnie stara się nadążać za użytkownikiem (produkować nowe zdania) oraz dążyć do spełnienia jakiegoś zadania (choćby miałoby to być zebranie opinii na jakiś temat). Niestety, obecnie nic mi o takich próbach nie wiadomo, i nie jest do końca jasne, jak miałyby wyglądać. Zapewne przypominałoby to program wyższego rzędu, który mając do dyspozycji szereg potencjalnych sensownych wypowiedzi, wybierałby tę, która najlepiej przysłużyłaby się jego obecnemu zadaniu. W sumie – przywodzi to już na myśl funkcjonowanie umysłu człowieka.

Aktualizacja 25.09.2016: początkowa wersja tego wpisu twierdziła, że MegaHAL dobiera wypowiedzi na podstawie entropii wzajemnej wypowiedzi swojej i użytkownika, podczas gdy bierze pod uwagę jedynie prawdopodobieństwo własnej wypowiedzi.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *