Új generációs mesterséges intelligencia a Modern Vállalkozások Programjában - II. rész

Kontextus kezelés

2022. augusztus 31. szerda, 08:56
Az MVP 2016 őta több mint 25 ezer vállalkozásnak adott konkrét segítséget, hogy digitálisan fejlődhessen. Személyes, helyszíni tanácsadás keretében, közel 20 ezer auditot végeztünk és adtunk ki fejlesztési tervet is. Munkánk során, az egyik szűk keresztmetszetet a terepen dolgozó tanácsadói erőforrásaink korlátai jelentették eddig. Minden ügyfelünkkel mindig egy „valódi” tanácsadó foglalkozott és az új ügyfelek felkutatását is ők végezték. Ezen a gyakorlaton fog változtatni, hogy az egyszerűbb kommunikációs és akár tanácsadói feladatokat is egy „virtuális tanácsadó” végezze el. Az új generációs mesterséges intelligencia tudása és képességei folyamatosan fejlődnek. Minden beszélgetésből tanulhat az algoritmus. Ebben a cikkben folytatjuk az általunk használt technológiai háttér szakmai bemutatását.

Twitter megosztás
Cikk nyomtatása

A RASA háttere és jellemzői

Rasa Open Source a világ egyik legnépszerűbb nyílt forráskódú keretrendszere a chat- és hangalapú virtuális asszisztensek területén. A fejlesztői közösség is az egyik legnagyobb meghaladja a 15 ezret. A nyílt forráskód adta lehetőségek eleve egy folyamatos fejlődési potenciált biztosítanak, de a fejlesztési metodológia is nagyon újszerű.

További információ: https://rasa.com/


Kontextus kezelés a RASA-ban

Egy gépi tanulás esetén, legyen szó akár egy fordítóprogramról vagy virtuális chatbotról, rendkívül fontos, hogy az algoritmus helyesen értelmezze a szövegkörnyezetet vagy kontextust, hiszen teljesen más jelentéstartalom kapcsolódhat ugyanazon szöveg részlethez a helyzettől függően. Emellett egy MI alapú chatbotnak képesnek kell lennie arra, hogy azt a benyomást keltse a látogatóban, hogy bár a viselkedésében van "rendszer", a válaszadása még sem gépszerű. Más szavakkal: képesnek kell lennie arra, hogy a látogató előtt minél inkább rejtve maradjon a végső soron ebben az esetben is algoritmus-szerű, kauzális viselkedés.

A legfontosabb eszköz, amivel elkerülhető az a benyomás, hogy a chatbot gépszerűen viselkedik, a kontextusok kezelése. Ezen túlmenően még egy eszköz említhető:  többféle megfogalmazás lehetősége mind a látogatói input, mind a chatbot output oldalán (a RASA ezt alapszolgáltatásként biztosítja). Ennek a módszernek a hatékonysága azonban összehasonlíthatatlanul szerényebb a kontextus-kezelésnél.

A kontextusról kétféle értelemben beszélhetünk:

1. Témakör alapú kontextus

A témakör alapú kontextust a response-ok egyértelmű (unique) témakörökbe sorolásával (lásd később, az "Elnevezési konvenciók" fejezetben) illetve az előzményes intent-response hozzárendelésekkel lehet kezelni. Eltérő előzmény-válaszok esetén a megegyező intentre adott következő válasz is eltérő lehet (illeszkedve az aktuális témakörhöz).

Az aktuális témakört a chatbot által adott utolsó válasz határozza meg (azzal a kiegészítéssel hogy egyfordulós kitérő esetén a kitérőhöz tartozó válasz nem módosítja az aktuális témakört). Ennek megfelelően nincs szükség az aktuális témakör mindenkori tárolására, ez az információ a párbeszéd előtörténetéből (alapesetben az utolsó válaszból) következtethető ki.

Felmerülhet kérdésként, hogy miért a chatbot válaszokat és miért nem a látogatói üzeneteket érdemes témakörökbe sorolni.

A válaszok rendszerint teljesek (minden szükséges információt tartalmaznak), jól formáltak és - legalábbis a rendszer tanításában résztvevők számára - pontosan értelmezettek. Ennek megfelelően nincs akadálya a témakörökbe való sorolásuknak.

A látogatói üzenetek ezzel szemben gyakran hiányosak és nem szabatosak. A hiányos üzenetek általában többféle témakör alá is besorolhatók és mindig az adott kontextus dönti el, hogy melyik témakörhöz tartoznak. Eszerint az intentek nem sorolhatóak egyértelműen témakörökbe, a témaköreik közvetve, a response-okhoz való általános vagy előzményes hozzárendelés alapján állapítható meg.

A témaköröket nem szükséges szigorú hierarchikus rendszerben kezelni. Rugalmasabb megoldás a válaszok témakörszavak alá való viszonylag kötetlen besorolása. Ha a témakör alapján történő pontosabb keresésekre illetve precíz unicitás-ellenőrzésre van szükség, akkor az előforduló témakör-szavak közötti "logikai" relációk utólag is rögzíthetők egy meta-szintű COREtxt táblában (pl. szinonima kapcsolat, részhalmaz kapcsolat, átfedő jelentés, stb).

2. A látogatót jellemző kontextus  (személyes adatok, preferenciák, profil)

A látogató által megadott információk tárolására a RASA-ban a slot-ok szolgálnak (előre definiált session-szintű változók).

A látogatóról már a chatbot indítási módja szerint is eltérő információk állnak rendelkezésre. Ha az ITDR-ben bejelentkezett ügyfél indítja el a beszélgetést, akkor eleve elérhetőek az adott ügyfélről az ITDR-ben tárolt adatok. Ha a beszélgetést egy olyan látogató kezdeményezi, aki korábban már használta a chatbot, és hozzájárult a cookie kezeléshez, akkor a következő beszélgetéskor helyből ismertek a látogató korábban megadott adatai.

A látogatóval kapcsolatos új információk az alábbi módokon keletkezhetnek:

- a látogató adatközléseivel

- a chatbot visszakérdezéseire adott válaszokkal
 

Adatközlések kezelése

A látogató gyakran már a bemutatkozáskor közöl magáról információkat.

Példa: "Üdvözlöm. Nagy István vagyok, Somogy megyei vállalkozó. Munkavédelmi felszerelések forgalmazásával foglalkozom."

Az adatközlések rendkívül szerteágazóak lehetnek, de - a beszélgetési szituációtól  függően - általában meghatározható az a véges számú adatközlési mintázat, ami releváns információkat szolgáltathat a látogatóról. Az MVP tanácsadói chatbot esetén a releváns adatok az alábbiak: a látogató neve, email címe, telefonszáma, a cégének neve, címe, telefonszáma, a székhely vagy telephely címe (megye, település, irányítószám), a cég adószáma, tevékenységi kör, foglalkoztatottak száma.

A látogató szabad szöveges válaszaiból kivonatolási algoritmusokkal lehet információkat kinyerni (entity extraction). Az adatok egy része formai jegyek alapján viszonylag könnyen felismerhető (pl. email cím, telefonszám, adószám), más részük viszont meglehetősen összetett algoritmusokat és nagy háttérnyilvántartásokat igényel (pl. személynév, cégnév, településnév, utcanév, földrajzi hely, cím, tevékenységi kör). Rendelkezésre áll néhány általános algoritmus (pl. SPACY név, cégnév, földrajzi hely), amelyek jó kiindulási alapot nyújtanak, de pontosításokat igényelnek.

Önmagában egy adattípus megbízható kivonatolása nem ad elegendő információt. Az "email cím" adattípus még nem tekinthető konkrét adatnak, hiszen épp úgy lehet a látogató saját címe, a cég címe vagy egy harmadik személy/szervezet elérhetősége. A formai beazonosításon túl szükséges az az információ is, hogy az adott entitás milyen szövegkörnyezetben jelent meg.

A szövegkörnyezeteket a RASA-ban intent-ekkel lehet kezelni. Létre lehet hozni az "Adatközlés saját név" intentet, ami magában foglalja azokat a jellemző példamondatokat, amelyben valaki megadhatja a saját nevét (a példamondatok köre fokozatosan bővülni fog a rutinszerű tanítási folyamatok során). Minden egyes példamondat esetén megadhatóak azok a mondatbeli pozíciók, ahol maga az adat előfordul (ezt szokás a példamondatok "annotálásának" nevezni).

A RASA nem csak külső kivonatolási algoritmusokra támaszkodik, hanem saját maga is alkalmaz egy statisztikai alapú adatbeazonosítási módszertant. Ebben a módszerben összefonódik az adattípus önmagában való felismerése és a szövegkörnyezet alapú beazonosítás. A példamondatokkal nem csak a lehetséges szövegkörnyezetek, hanem az adattípushoz tartozó jellemző értékek felismerésére is megtanítható a rendszer. Ha az adattípushoz tartozó mintázatok száma korlátos, akkor ez egy nagyon hatékony módszer. Nagy tételszámú adattípusok esetén azonban rendkívül sok azonos szerkezetű példamondat felvételét igényli, ami áttekinthetetlen tanító halmazt és rendkívül nagy tanítási időt eredményezhet (a neurális hálózatokon alapuló RASA tanítása nem additív jellegű, a változások életbe léptetéséhez teljes újratanításra van szükség). Ennek megfelelően - a megbízható kivonatoláshoz - mindenképpen szükség van a RASA saját kivonatolási módszertana mellett a külső kivonatolási algoritmusok párhuzamos alkalmazására is.

Entitások kapcsolata a session-változókkal

A kivonatolási algoritmusok párhuzamos alkalmazása azonban felvet egy további problémát. Nem beszéltünk még arról, hogy a kivonatolási algoritmusok hogy indíthatóak el, és a kivonatolt értékek hogy kerülnek be a session változókba.

A RASA-ban a kivonatolások minden egyes látogatói üzenetküldést követően lefutnak, szoros kapcsolatban az intent beazonosítással. Az általános jellegű (szövegkörnyezettől független) algoritmusok működéséhez nincs szükség annotált példamondatra sem, a statisztikai algoritmusok esetén viszont csak akkor történik kivonatolás, ha a példamondatban volt annotálás. A kivonatolások eredménye tárolódik a RASA eseménytárban, de a session-változók ezzel még nem változnak.

A RASA-ban egyetlen módszer van arra, hogy egyedi action nélkül is automatikusan beállítódjon egy session-változó:  fel kell venni egy slotot, aminek a megnevezése megegyezik az entitás (adatkivonatolási algoritmus) nevével és a slot auto_fill paraméterét true értékre kell állítani.

Ezzel a módszerrel hozzájutunk egy olyan session-változóhoz, ami a mindenkori utolsó kivonatolt értéket tartalmazza. Azt a megoldást is választhatjuk, hogy az entity-vel megegyező slot-nak "List" adattípust adunk meg - ebben az esetben az összes sikeres kivonatoláskor beíródik egy új érték a listába, tehát egy teljes kivonatolás-történethez jutunk.

Arra azonban nincs közvetlen eszközünk a RASA-ban, hogy egy user-változót automatikusan és megbízhatóan beállítsunk minden egyes látogatói üzenetet követően. Ehhez általában szükségünk lenne az intent és rendszerint több extractor kivonatolási eredményének ismeretére (pl. egy szövegkörnyezeti és egy formai extractor-ra;  helyzettől függőn előfordulhat, hogy mindkettőre támaszkodnunk kell a hatékony adatkivonatoláshoz).

Javasolt megoldás

A releváns adatokhoz kapcsolódó "Adatközlés …" intentekhez egy egyedi action-t kell kapcsolni (IntentToRepsonse hozzárendelés). Az action-höz tartozó python programkód az intent és az adatkivonatolások ismeretében megbízhatóan el tudja dönteni, hogy melyik user-adatot kell (lehet) beállítani, és egy "szolgálati közleményt" is meg tud jeleníteni a látogató számára a sikeres adatkivonatolás(ok)ról (a látogató szükség szerint korrekciót is kérhet, ha nem volt megfelelő az adatkivonatolás).

Több mondatos, komplex adatközlések

Problémát jelenthet még az is, hogy az adatközlések gyakran nem önállóan, hanem más közlésekkel egy üzenetben, néha egyetlen mondatban jelennek meg. Az üzenet mondatokra tagolása viszonylag zökkenőmentesen megoldható a fallback kezelés részeként, de az egy mondaton belül előforduló többféle adatközlés kezelése viszonylag nagy számú intent és példamondat felvételét igényelheti (pl. "Adatközlés cégnév-megye"). Feltételezhető, hogy hosszú idejű tanítási folyamat után is előfordulnak majd olyan váratlan adatközlési mintázatok, amelyeket nem tud teljes mértékben értelmezni a chatbot. Megfelelő számú mintázat esetén azonban ilyen esetekben is valószínűsíthető az adatok legalább részleges feldolgozása. A "gyanús" esetekben pedig a látogatóbak küldött szolgálati közleményben kérhető, hogy az adatközlések lehetőség szerint ne legyenek túlzottan komplexek.  

A sorozat első cikke: https://infoter.hu/cikk/uj-generacios-mesterseges-intelligencia-beszelget-a-cegekkel-a-modern-vallalkozasok-programjaban

Kott Ferenc - Emődy Zsolt

Fotó: pixabay.com

Minden jog Fenntartva - Modern Vállalkozások Programja