Pozor, dialog in učenje vzorcev za večkratno uporabo

Rasa Core je sistem odprtega kode, ki temelji na strojnem učenju, za gradnjo kontekstualnih pomočnikov AI stopnje 3. V različici 0.11 smo poslali naš novi vdelavni pravilnik (REDP), ki je veliko boljši pri obravnavi nesodelovalnih uporabnikov kot naš standardni LSTM (uporabniki družbe Rasa bodo to vedeli kot KerasPolicy). Članek o njem predstavljamo na NeurIPS-u in ta objava razloži težavo, ki jo reši REDP in kako deluje.

Naš novi model dialoga (REDP) presega naše standardne politike LSTM pri ravnanju z nesodelovalnimi uporabniki. Te parcele so podrobneje razložene spodaj.

Uporabniki, ki ne sodelujejo, otežijo življenje razvijalca

Težka stvar pri gradnji dobrega pomočnika AI je ukvarjanje z neskončnimi načini, ki jih vaši uporabniki odbegajo od poti. REDP, naša nova politika dialoga, ima dve prednosti: (1) veliko bolje je, če se naučimo ravnati z nesodelovalnim vedenjem, in (2) lahko te podatke ponovno uporabi pri učenju nove naloge.

Kaj mislimo pod nekooperativnim vedenjem? Če želimo pokazati smisel, bomo vzeli primer vedno priljubljenega priporočila za restavracijo, vendar isto velja za izdelavo pomočnika za odpravljanje težav z IT, podporo strankam ali kaj drugega. Recimo, da potrebujete 3 podatke od uporabnika, da priporoči kraj za jesti. Očitno je, da napišete zanko, ki bo zahtevala te tri stvari. Na žalost pravi dialog ni tako preprost in uporabniki vam ne bodo vedno dali informacij, ki ste jih zahtevali (vsaj ne takoj).

Ko uporabnika vprašamo, "kakšen cenovni razpon iščete?", Lahko odgovori:

  • "Zakaj to morate vedeti?" (Ozek kontekst)
  • "Ali mi še lahko pokažete nekatere restavracije?" (Širok kontekst)
  • "Pravzaprav ne, kitajske hrane ne želim" (popravek)
  • "Najbrž bi si sama skuhala več" (chitchat)

Vse to imenujemo nesodelovalno vedenje. Uporabnik se lahko odzove na številne druge načine, vendar v našem prispevku preučujemo te štiri različne vrste. Tu je primer pogovora:

V vsakem primeru mora asistent na uporaben način odgovoriti na (nesodelovalno) sporočilo in nato pogovor usmeriti v pravo smer. Če želite to pravilno narediti, morate upoštevati različne vrste konteksta. V vašem dialogu je treba upoštevati dolgoročno stanje pogovora, kaj je uporabnik pravkar povedal, kaj je pomočnik pravkar povedal, kakšni so bili rezultati klicev API-ja in še več. To podrobneje opisujemo v tej objavi.

Uporaba pravil za ravnanje z nekooperativnim vedenjem postane hitro zmedena

Če ste že ustvarili nekaj asistentov AI ali klepetalnic, se verjetno zavedate, kaj je to glavobol in lahko preidete na naslednji razdelek. Poskusimo pa pripraviti nekaj pravil za enega najpreprostejših in najpogostejših nesodelovalnih odgovorov: ne vem. Za pomoč uporabniku pri iskanju restavracije lahko povprašamo o kuhinji, lokaciji, številu ljudi in cenovnem razredu. API, ki ga poizvedujemo, zahteva kulinariko, lokacijo in število ljudi, vendar cenovni razpon ni izbran.

Želimo, da se naš asistent obnaša tako: če uporabnik ne pozna odgovora na izbirno vprašanje, nadaljuje na naslednje vprašanje. Če vprašanje ni izbirno, pošljite sporočilo, da ga bodo lažje razumeli, nato pa jim dajte še eno priložnost za odgovor. Zaenkrat tako preprosto.

Če pa uporabnik reče, da ne vem dvakrat zapored, raje stopite (na primer izročite človeškemu agentu ali vsaj potrdite, da ta pogovor ne gre zelo dobro). Razen seveda, če je eden od vprašanj "Ne vem" odgovoril na izbirno vprašanje.

S to logiko lahko zelo dobro ravnate z nekaj ugnezdenimi izjavami. Če želite ravnati s pravimi uporabniki, morate obravnavati številne vrste nesodelovalnega vedenja in pri vsakem posameznem uporabniškem cilju, ki ga podpira vaš pomočnik. Za človeka je očitno, kaj je treba storiti, vendar ni tako enostavno napisati in vzdrževati doslednega nabora pravil, ki to omogočajo. Kaj, če bi lahko zgradili model, ki bi lahko razbral te vzorce dialoga in jih ponovno uporabil v novih okoliščinah?

REDP uporablja pozornost pri reševanju nekooperativnega dialoga

Pozornost je ena najpomembnejših idej pri poglobljenem učenju zadnjih nekaj let. Ključna ideja je, da se nevronsko omrežje, poleg učenja interpretacije vhodnih podatkov, nauči tudi, katere dele vhodnih podatkov interpretirati. Na primer klasifikator slike, ki lahko zazna različne živali, se lahko nauči zanemarjati modro nebo v ozadju (kar ni zelo informativno) in je pozoren predvsem na obliko živali, ali ima noge in obliko glave .

Isto idejo smo uporabili za sodelovanje z nesodelovalnimi uporabniki. Po pravilnem odzivu na uporabnikovo sporočilo o sodelovanju se mora asistent vrniti k prvotni nalogi in nadaljevati, kot da se odstopanje nikoli ni zgodilo. REDP to doseže z dodajanjem mehanizma pozornosti v nevronsko mrežo, ki mu omogoča, da ignorira nepomembne dele zgodovine dialoga. Spodnja slika je ponazoritev arhitekture REDP (celotni opis je v prispevku). Mehanizem pozornosti temelji na spremenjeni različici Neural Turing Machine, namesto klasifikatorja pa uporabimo pristop vdelave in uvrstitve, tako kot v vdelavo plinovoda Rasa NLU.

Pozornost je bila že prej uporabljena v raziskavah dialoga, vendar je politika vgradnje prvi model, ki pozornost uporablja posebej za obvladovanje nesodelovalnega vedenja in za ponovno uporabo tega znanja pri drugačni nalogi.

REDP Uči, kdaj NE bodite pozorni

Na spodnji sliki prikazujemo zgodbo Rasa Core v sredini in ustrezen pogovor na desni strani. Na levi je vrstica, ki prikazuje, koliko pozornosti naš model namenja različnim delom zgodovine pogovorov, ko izbere zadnje dejanje (utter_ask_price). Opazite, da model popolnoma prezre prejšnja sporočila uporabnikov, ki ne sodelujejo (zraven čitchata ni, ne popravite, razložite itd.). Politika vdelave je pri tej težavi boljša, saj lahko po odgovoru na uporabnikovo vprašanje nadaljuje z nalogo in ne upošteva, da se je odstopanje kdaj zgodilo. Izpuščene in trdne palice kažejo uteži pozornosti glede uporabniških sporočil in sistemskih dejanj.

REDP je pri obdelavi nekooperativnih uporabnikov veliko boljši od klasifikatorja LSTM

Ta spletna stran primerja zmogljivost REDP-ja in standardnega Rasa Core LSTM (uporabniki Rasa bodo to vedeli kot KerasPolicy). V testnem nizu narišemo število dialogov, kjer je pravilno predvideno vsako posamezno dejanje, saj dodajamo vse več podatkov o vadbi. Izvajamo dve nekoliko drugačni različici LSTM-a (podrobnosti preberite v prispevku).

Ponovna uporaba vzorcev v nalogah

Nismo želeli samo videti, kako dobro se REDP lahko ukvarja z nesodelovalnimi uporabniki, ampak tudi, ali bi lahko te podatke ponovno uporabili v novem kontekstu. Recimo, recimo, da ima vaš asistent Rasa že ogromno podatkov o usposabljanju resničnih uporabnikov (če ne sodelujejo, kot vedno always). Zdaj želite dodati podporo za nov uporabniški cilj. Kako dobro se lahko vaš pomočnik spoprime z odstopanjem od srečne poti, tudi če prej ni videl nesodelovalnega vedenja pri tej nalogi?

Da bi to preizkusili, smo ustvarili testno razdeljevanje dialogov z vlaki za nalogo rezervacije hotelov (ki vsebuje kup nesodelovalnega vedenja) in primerjali smo uspešnost z in brez vključitve podatkov o usposabljanju iz druge naloge (rezervacija v restavraciji).

V1 od REDP je pokazala veliko korist od učenja s prenosom

Zgornji načrt prikazuje nekaj rezultatov za zgodnjo različico REDP (ne za končno, bomo pokazali naslednjo). Testni niz je v domeni hotela. Kvadrati prikazujejo, kako se uspešnost izboljša, ko vključimo tudi podatke o vadbi iz restavracije. Zmogljivost je velika, kar kaže, da lahko REDP ponovno uporabi znanje iz druge naloge! Temu pravimo tudi transferno učenje. Tu je enak načrt za LSTM. Obstaja nekaj dokazov o transfernem učenju, vendar je veliko manjši kot pri REDP:

V2 od REDP nalogo reši zelo hitro

Ta zaplet prikazuje rezultate „končne“ različice REDP, ki je opisana v prispevku in izvedena v programu Rasa Core. Zmogljivost je veliko boljša od V1. Z le polovico podatkov doseže REDP skoraj 100-odstotno natančnost preskusa. Še vedno vidimo korist od prenosa učenja, vendar ni veliko prostora za izboljšave pri dodajanju podatkov o vadbi v restavracijah.

Naslednji koraki

Nad politiko vdelave smo zelo navdušeni in imamo še več poskusov, da pokažemo, kaj lahko naredi. Iz prve naloge, ki smo ji jo dali, je bilo mleto meso, zato si ga predstavljamo pri še težjih težavah, če želite preučiti prenosno učenje v naravi.

Pojdi in preizkusi REDP na svojem naboru podatkov! Koda in podatki za prispevek so na voljo tukaj. Prosimo, delite svoje rezultate v tej temi na forumu Rasa.

Pred nami je veliko trdega dela, da bi 5 ravni pomočnikov AI uresničili, zato če želite delati na teh težavah in pošiljate rešitve v kodno bazo, ki jo uporablja na tisoče razvijalcev po vsem svetu, se nam pridružite! Najemamo

Prvotno objavljeno na blog.rasa.com 29. novembra 2018.