W jaki sposób Alexa potrafi się sama uczyć?

W jaki sposób Alexa potrafi się sama uczyć?

Dzisiejszy wpis będzie nieco inny niż zwykle. Ostatnio podesłałem Wam w newsletterze zbiór publikacji dotyczących chatbotów, które warto było przeczytać w roku 2019 wg bloga Open Data Science. Postanowiłem się w nie wgłębić i spróbować Wam przekazać w skrócie, czego dotyczą.

Pełną listę publikacji znajdziecie TUTAJ.

Na pierwszy ogień idzie Amazon i ich samouczący się konwersacyjny agent AI, który używany jest produkcyjnie przez Alexę. Link do pełnej publikacji znajdziecie TUTAJ, a w moim artykule spróbuję Wam w skrócie wyjaśnić, w jaki sposób Amazon rozwiązał problem nauczania systemu.

Wstęp

Popularność asystentów głosowych, tj. Alexa, Siri czy Asystent Google rośnie z miesiąca na miesiąc. Kolejne dziedziny naszego życia, pokrywane są przez agentów AI, więc pojawia się coraz więcej miejsc, w których wyuczony model nie potrafi poradzić sobie z wygenerowaniem odpowiedzi. Przy rosnącej skali działania tego typu systemów bardzo istotną rzeczą stała się zdolność łatwego douczania agentów AI. A czemu nauka modeli generujących odpowiedzi jest taka ważna? Użytkownicy oczekują od Asystentów „myślenia” oraz tego, że będą oni potrafili dopasować odpowiednią intencję mimo błędów i niedoskonałości w wypowiedzi.

Jednym z przykładów takiej wypowiedzi, podanym w publikacji jest: play may and dragons, który w rzeczywistości powinien brzmieć play imagine dragons. I tu rola modelu, aby potrafił tę niedoskonałą wypowiedź dopasować do prawidłowego znaczenia.

W tradycyjnym podejściu, tego typu błędy naprawiane i douczane są manualnie, na podstawie historii konwersacji. Podejście takie jednak przy takiej skali, w jakiej działa Alexa, ma przynajmniej 2 wady:

  • rozwiązanie nie jest skalowalne, ręczne oznaczanie wypowiedzi jest czasochłonne
  • podatne na pomyłki podczas procesu oznaczania

Z tego powodu Amazon proponuje inne rozwiązanie – samouczący się model, który na podstawie konwersacji potrafi wywnioskować, co użytkownik miał na myśli i douczyć model tą frazą.

W jaki sposób to robi?

W dużym skrócie rzecz leży w tym, że wielu użytkowników mimo początkowego niezrozumienia przez Alexę frazy, próbuje się poprawić i wyrazić jaśniej co ma na myśli.  Moduł odpowiedzialny za samouczenie potrafi znaleźć takie konwersacje, ktore finalnie doprowadziły użytkownika do tego co chciał, a po wyselekcjonowaniu takich fraz/sesji potrafi douczyć model niedoskonałymi wypowiedziami.

Przykład z publikacji jest następujący:

Wróćmy do wcześniejszej frazy. Wielu użytkowników może powiedzieć play may and dragons na co Alexa poinformuje ich, że nie może zrozumieć intencji. W odpowiedzi na to część użytkowników spróbuje się poprawić i finalnie dojdzie do, zrozumiałej przez Asystenta frazy, play imagine dragonsczęść zrezygnuje, a pozostali mogą zmienić intencję. Z punktu widzenia samouczącego się systemu, pierwszy przypadek jest najkorzystniejszy. Możemy dzięki temu douczyć model tak, aby w przyszłości rozpoznawał niekompletne frazy. W związku z tym inżynierowie z Amazona wymyślili sposób na wyselekcjonowanie tego typu konwersacji z miliona dostępnych w bazie i dzięki temu uruchomić proces ciągłego uczenia się.

Łancuch Markowa

Metoda jaką użyli w swoim rozwiazaniu nazywana jest Łańcuchem Markowa (Markov chains). Metoda ta polega na przedstawieniu przestrzeni/systemu jako zbioru stanów oraz przejść między nimi. Przejście do kolejnego stanu określone jest wyliczonym prawdopodobieństwem przejścia do niego. W odróznieniu od klasycznej metody, Alexa korzysta z wariancji rozwiązania, tzw. AMC (Absorbing Markov Chains), które różni się tym, że każdy łancuch posiada stan końcowy (tzw. Absorbing State), z którego nie da się przejść do żadnego innego.

A czym są łancuchy w kontekście Alexy?

Łańcuchem jest fragment sesji użytkownika, która kończy się jednym z dwóch kończących stanów – Success i Failure. Żeby zobrazować Wam to posłużę się przykładem z publikacji:

W jaki sposób Alexa potrafi się sama uczyć?

 

W powyższym przykładzie dla uproszczenia mamy 3 konwersacje A, B i C. Każda z nich posiada ciąg wypowiedzi użytkownika u0 – u5, które odpowiadają frazom wypowiadanym przez użytkownika. Na końcu każdego ciagu mamy stany końcowe, dla konwersacji A stan Failure, a dla ciągów B i C stan Success. Przy okazji strzałkami mamy zaznaczone przejścia miedzy stanami.

Tu się zatrzymajmy na chwilę, bo ważną kwestią pozostaje rozpoznawanie stanów końcowych. Jest to ważny element procesu, który ma duży wpływ na skuteczność działania.

W jaki sposób rozpoznać stan końcowy – Success?

  • jednym z sygnałów może być odegranie wybranej piosenki przez określony czas (system w takim przypadkach zakłada, że prawidłowo rozpoznał zamiar użytkownika)

W jaki sposób rozpoznać stan końcowy – Failure?

  • gdy użytkownik po rozpoznaniu intencji przez system wprost zatrzyma Alexe (np. frazą Alexa stop)
  • gdy Alexa nie rozpozna intencji i zakomunikuje to użytkownikowi

Łańcuchy stworzone w ten sposób, posiadające stany końcowe są podstawą algorytmu, który pomaga systemowi uczyć się na podstawie konwersacji. W kolejnej sekcji postaram się w dużym skrócie opisać jak są one wykorzystywane.

Jak to działa?

Pierwszym etapem to poprawnego działania systemu jest stworzenie ww. łańcuchów na podstawie milionów dotychczasowych interakcji. Kolejnym etapem jest wyliczenie wszystkich prawdopodobieństw przejść do każdego możliwego stanu w ramach stworzonego łańcucha. Prawdopodobieństwa te wyliczane są natomiast na podstawie częstotliwości przejść pomiedzy stanami w zbiorze treningowym.

Przykład?

W powyższym przykładzie rozróżnić możemy 6 stanów: h0, h1, h2, h3, Success i Failure, z których zbudować możemy następujący graf prawdopodobieństw przejść miedzy stanami:

W jaki sposób Alexa potrafi się sama uczyć?

Mając takie łancuchy wystarczy wyznaczyć ścieżki z największym prawdopodobieństwem prowadzące do stanów, poprzedzających finalny stan Success oraz zamienić stany w ścieżce ze stanem ostatnim. W naszym przykładzie system mógłby zastąpić stany h0, h1, h3 stanem h2, który okazał się stanem prawidłowym (czyli wyrażenie typu play stickable me, zrozumiałby jako play despicable me). Proste, a zarazem genialne.

Budowa systemu

Na koniec chciałem Wam opisać, w jaki sposób zbudowany jest system Alexy, na podstawie tego co zawarte jest w publikacji. Gdy użytkownik podejmuje interakcję z Alexą, system w pierwszej kolejności zamienia głos na tekst za pomocą modułu ASR (Automatic Speech Recognition).  Następnie fraza (utterance) przekazywana jest do silnika NLU (Natural Language Understanding), rozpoznawana jest intencja użytkownika (intent), i wysyłana odpowiedź za pomocą modułu TTS (Text-To-Speech).

Alexa - system

Powyższy opis systemu pasuje do większości tego typu rozwiązań. Jednak tematem dzisiejszego wpisu jest samouczenie się Alexy i inżynierowie dodali do przepływu dodatkowy moduł tzw. Reformulation Engine, który zamienia frazę podaną przez użytkownika, na bardziej precyzyjną, dzięki temu Alexa potrafi w lepszy sposób rozumieć intencje użytkowników. Reformulation Engine to moduł oparty na architekturze mikroserwisów, który przetrzymuje dopasowania w wewnętrznej bazie danych, która aktualizowana jest raz dziennie (aktualizowana na podstawie nowych interakcji użytkowników).

Podsumowanie

Postanowiłem co jakiś czas wrzucać Wam tego typu technikalia ze względu na to, że jest to temat, który mocno mnie interesuje, a wpis na blogu daje mi motywację do zgłębienia technik opisywanych w publikacjach.

Techniki ręcznego douczania modeli, przy coraz wiekszej skali korzystania z nich i coraz większej ilości danych dostarczanych do systemów stają się powoli bezużyteczne. Dlatego inżynierowi na całym świecie szukają sposobów na douczanie modeli bez ingerencji człowieka. Opisane w dzieiejszych artykule rozwiązanie działa produkcyjnie już prawie rok i osiąga wg. inżynierów z Amazona bardzo dobre wyniki, powodując, że korzystanie z asystentów głosowych staje się dla użytkowników coraz bardziej przyjemne. Jednym ze wskaźników, które osiągnęło to rozwiązanie to wskaźnik Win/Loss na poziomie 11.8 (prawie 12 poprawnych dopasowań na 1 złe).