Uwaga, dialog i nauka wzorców wielokrotnego użytku

Rasa Core to system dialogu oparty na uczeniu maszynowym typu open source do budowania kontekstowych asystentów AI poziomu 3. W wersji 0.11 wprowadziliśmy nowe zasady osadzania (REDP), które są znacznie lepsze w kontaktach z niechętnymi do współpracy użytkownikami niż nasze standardowe LSTM (użytkownicy Rasa znają to jako KerasPolicy). Prezentujemy na ten temat artykuł na NeurIPS, a ten post wyjaśnia problem, który rozwiązuje REDP i jak działa.

Nasz nowy model dialogu (REDP) przewyższa nasze standardowe zasady LSTM w kontaktach z niechętnymi do współpracy użytkownikami. Te wykresy wyjaśniono bardziej szczegółowo poniżej.

Użytkownicy niechętni do współpracy utrudniają życie programistom

Trudnością w budowaniu dobrego asystenta AI jest radzenie sobie z nieskończonymi drogami, którymi użytkownicy zbaczają ze szczęśliwej ścieżki. REDP, nasza nowa polityka dialogu, ma dwie zalety: (1) jest znacznie lepsza w uczeniu się, jak radzić sobie z zachowaniem niechętnym do współpracy, oraz (2) może ponownie wykorzystać te informacje, ucząc się nowego zadania.

Co rozumiemy przez brak współpracy? Aby to pokazać, weźmiemy zawsze popularny przykład rekomendacji dla restauracji, ale to samo dotyczy budowania asystenta do rozwiązywania problemów IT, obsługi klienta lub czegokolwiek innego. Powiedz, że potrzebujesz 3 informacji od użytkownika, aby polecić miejsce do jedzenia. Oczywistym podejściem jest napisanie pętli while z pytaniem o te 3 rzeczy. Niestety prawdziwy dialog nie jest taki prosty, a użytkownicy nie zawsze udzielają informacji, o które prosili (przynajmniej nie od razu).

Gdy pytamy użytkownika „jakiego przedziału cenowego szukasz?”, Może odpowiedzieć:

  • „Dlaczego musisz to wiedzieć?” (Wąski kontekst)
  • „Czy możesz mi jeszcze pokazać restauracje?” (Szeroki kontekst)
  • „Właściwie nie chcę chińskiego jedzenia” (korekta)
  • „Prawdopodobnie powinnam więcej gotować dla siebie” (chitchat)

Wszystkie te zachowania nazywamy „niechętnymi do współpracy”. Istnieje wiele innych sposobów odpowiedzi użytkownika, ale w naszym artykule badamy te cztery różne typy. Oto przykładowa rozmowa:

W każdym przypadku asystent musi w pomocny sposób odpowiedzieć na wiadomość użytkownika (niechętną do współpracy), a następnie skierować rozmowę z powrotem we właściwym kierunku. Aby zrobić to poprawnie, musisz wziąć pod uwagę różne typy kontekstu. Twój dialog musi uwzględniać długoterminowy stan rozmowy, to, co właśnie powiedział użytkownik, co powiedział asystent, jakie były wyniki wywołań interfejsu API i wiele więcej. Opisujemy to bardziej szczegółowo w tym poście.

Używanie reguł do obsługi zachowań niechętnych do współpracy szybko się psuje

Jeśli masz już kilku asystentów AI lub chatbotów, prawdopodobnie zdajesz sobie sprawę, jaki to ból głowy, i możesz przejść do następnej sekcji. Ale spróbujmy znaleźć kilka zasad dla jednej z najprostszych i najczęstszych niechętnych odpowiedzi: nie wiem. Aby pomóc użytkownikowi znaleźć skrzynkę restauracyjną, możemy zapytać o kuchnię, lokalizację, liczbę osób i przedział cenowy. Interfejs API, którego dotyczy zapytanie, wymaga kuchni, lokalizacji i liczby osób, ale przedział cenowy jest opcjonalny.

Chcemy, aby nasz asystent zachowywał się w ten sposób: jeśli użytkownik nie zna odpowiedzi na pytanie opcjonalne, przejdź do następnego pytania. Jeśli pytanie nie jest opcjonalne, wyślij wiadomość, aby pomóc im to zrozumieć, a następnie daj im kolejną szansę na odpowiedź. Do tej pory takie proste.

Ale jeśli użytkownik powie, że nie wiem dwa razy z rzędu, powinieneś eskalować (na przykład przekazanie agentowi ludzkiemu lub przynajmniej potwierdzenie, że ta rozmowa nie idzie zbyt dobrze). Z wyjątkiem sytuacji, gdy jedno z „Nie wiem” było odpowiedzią na opcjonalne pytanie.

Możesz sobie poradzić z tą logiką całkiem dobrze za pomocą kilku zagnieżdżonych instrukcji if. Ale aby poradzić sobie z prawdziwymi użytkownikami, musisz poradzić sobie z wieloma rodzajami zachowań niechętnych do współpracy oraz w każdym celu użytkownika obsługiwanym przez asystenta. Dla człowieka oczywiste jest, co należy zrobić, ale nie jest tak łatwo napisać i utrzymywać spójny zestaw reguł, które to czynią. Co jeśli moglibyśmy zbudować model, który mógłby wymyślić te wzorce dialogu i ponownie wykorzystać je w nowych kontekstach?

REDP zwraca uwagę na dialog niewspółpracujący

Uwaga jest jednym z najważniejszych pomysłów w głębokim uczeniu się z ostatnich kilku lat. Kluczową ideą jest to, że oprócz nauki interpretacji danych wejściowych sieć neuronowa może również dowiedzieć się, które części danych wejściowych mają być interpretowane. Na przykład, klasyfikator obrazów, który może wykrywać różne zwierzęta, może nauczyć się ignorować niebieskie niebo w tle (co nie jest bardzo pouczające) i zwracać uwagę głównie na kształt zwierzęcia, czy ma nogi, i kształt głowy .

Wykorzystaliśmy ten sam pomysł, aby radzić sobie z niechętnymi do współpracy użytkownikami. Po poprawnej odpowiedzi na komunikat o braku współpracy użytkownika asystent powinien powrócić do pierwotnego zadania i móc kontynuować, tak jakby odchylenie nigdy się nie zdarzyło. REDP osiąga to poprzez dodanie mechanizmu uwagi do sieci neuronowej, pozwalając mu na ignorowanie nieistotnych części historii dialogu. Poniższy obraz jest ilustracją architektury REDP (pełny opis znajduje się w artykule). Mechanizm uwagi oparty jest na zmodyfikowanej wersji Neural Turing Machine, a zamiast klasyfikatora stosujemy podejście osadzania i rangowania, tak jak w procesie osadzania Rasa NLU.

Uwaga była wcześniej wykorzystywana w badaniach dialogu, ale polityka osadzania jest pierwszym modelem, który wykorzystuje uwagę specjalnie do radzenia sobie z zachowaniem niechętnym do współpracy, a także do ponownego wykorzystania tej wiedzy w innym zadaniu.

REDP uczy się, kiedy NIE należy zwracać uwagi

Na poniższym rysunku pokazujemy historię Rasa Core pośrodku i odpowiednią rozmowę po prawej stronie. Po lewej stronie znajduje się wykres słupkowy pokazujący, ile uwagi nasz model przykłada do różnych części historii konwersacji, gdy wybiera ostatnią akcję (utter_ask_price). Zauważ, że model całkowicie ignoruje poprzednie niechciane komunikaty użytkownika (nie ma pasków obok czatu, poprawiania, wyjaśniania itp.). Polityka osadzania jest lepsza w przypadku tego problemu, ponieważ po udzieleniu odpowiedzi na pytanie użytkownika może kontynuować zadanie i zignorować ewentualne odchylenie. Kreskowane i pełne słupki pokazują odpowiednio wagę uwagi nad komunikatami użytkownika i działaniami systemu.

REDP jest znacznie lepszy niż klasyfikator LSTM w obsłudze użytkowników niechętnych do współpracy

Ta fabuła porównuje wydajność REDP i standardowego Rasa Core LSTM (użytkownicy Rasa znają to jako KerasPolicy). Planujemy liczbę dialogów w zestawie testowym, w których każda akcja jest poprawnie przewidywana, ponieważ dodajemy coraz więcej danych szkoleniowych. Prowadzimy dwie nieznacznie różne wersje LSTM (szczegółowe informacje można znaleźć w artykule).

Ponowne wykorzystanie wzorców w zadaniach

Nie chcieliśmy tylko sprawdzać, jak dobrze REDP radzi sobie z niechętnymi do współpracy użytkownikami, ale także sprawdzać, czy może ponownie wykorzystać te informacje w nowym kontekście. Załóżmy na przykład, że twój asystent Rasa ma już sporo danych szkoleniowych od prawdziwych użytkowników (którzy nie współpracują, jak zawsze są ). Teraz chcesz dodać obsługę nowego celu użytkownika. Jak dobrze twój asystent może poradzić sobie ze zboczeniami ze szczęśliwej ścieżki, nawet jeśli nigdy wcześniej nie widziałem niechętnego zachowania w tym zadaniu?

Aby to przetestować, stworzyliśmy podział dialogów między kolejnymi dialogami dla zadania rezerwacji hotelu (zawierający kilka niechętnych zachowań) i porównaliśmy wyniki z danymi szkolenia z innego zadania (rezerwacja restauracji) i bez nich.

V1 z REDP wykazała dużą korzyść z nauki transferu

Powyższy wykres pokazuje niektóre wyniki dla wczesnej wersji REDP (nie ostatniej, pokażemy to później). Zestaw testowy znajduje się w domenie hotelowej. Kwadraty pokazują, jak poprawia się wydajność, gdy uwzględniamy również dane szkoleniowe z domeny restauracji. Nastąpił duży skok wydajności, który pokazuje, że REDP może ponownie wykorzystać wiedzę z innego zadania! Nazywa się to również uczeniem się przez transfer. Oto ta sama fabuła dla LSTM. Istnieją pewne dowody uczenia się przez transfer, ale jest on znacznie mniejszy niż w przypadku REDP:

Wersja 2 REDP bardzo szybko rozwiązuje zadanie

Ten wykres pokazuje wyniki dla „ostatecznej” wersji REDP, która jest opisana w artykule i zaimplementowana w Rasa Core. Wydajność jest znacznie lepsza niż V1. Przy zaledwie połowie danych REDP osiąga prawie 100% dokładność testu. Nadal widzimy korzyści z uczenia się przez transfer, ale nie ma wiele do zrobienia w przypadku dodawania danych szkoleniowych w restauracji.

Następne kroki

Jesteśmy bardzo podekscytowani zasadami osadzania i przeprowadzamy jeszcze wiele eksperymentów, aby pokazać, co potrafi. Zrobił mielone mięso z pierwszego zadania, które mu powierzyliśmy, więc rzucamy go na jeszcze trudniejsze problemy, aby uczyć się nauki transferu na wolności.

Idź i wypróbuj REDP na swoim zestawie danych! Kod i dane dla papieru są dostępne tutaj. Udostępnij swoje wyniki w tym wątku na forum Rasa.

Przed nami dużo pracy, aby 5 poziomów asystentów AI stało się rzeczywistością, więc jeśli chcesz popracować nad tymi problemami i dostarczyć rozwiązania do bazy kodów używanej przez tysiące programistów na całym świecie, dołącz do nas! Zatrudniamy.

Pierwotnie opublikowany na blog.rasa.com w dniu 29 listopada 2018 r.