Arhitectură de ultimă generație pentru intenția și clasificarea entităților

Ryan Ong

10 aprilie · 6 min citire

Bună tuturor, mă numesc Ryan. Lucrez ca Data Scientist la Londra. Sunt foarte pasionat de procesarea limbajului natural (NLP) și lucrez în prezent la proiectul # NLP365 (+1), unde îmi documentez călătoria de învățare NLP în fiecare zi în 2020. Simțiți-vă liber să verificați ce am învățat de-a lungul ultimele 100 de zile aici.

nlp365

Postarea de astăzi acoperă arhitectura DIET a RASA. Îmi place foarte mult arhitectura DIAS a RASA și, deși am găsit că videoclipurile cu explicații ale RASA sunt foarte informative, nu vreau să trebuiască să revăd întregul videoclip atunci când revizuiesc arhitectura DIET în viitor, așa că mai jos sunt toate notele mele despre DIETA RASA:)

DIET înseamnă Transformator de intenție și entitate duală. DIET este o arhitectură transformatoare cu mai multe sarcini care poate realiza atât clasificarea intenției, cât și recunoașterea entităților împreună. Este compus din mai multe componente care ne permite să avem flexibilitatea de a schimba diferite componente. De exemplu, am putea experimenta folosind diferite încorporări de cuvinte, cum ar fi BERT și GloVe.

Multe dintre modelele de limbă pre-instruite sunt foarte grele, în sensul că necesită o putere mare de calcul și timpul de deducere este lung și, în ciuda performanțelor lor puternice, nu sunt concepute pentru aplicații de conversație AI. DIETA este diferită ca:

  • Este o arhitectură modulară care permite dezvoltatorilor de software să aibă mai multă flexibilitate în experimentare
  • Se potrivește cu modelele de limbă pre-instruite din punct de vedere al acurateței
  • Depășește SOTA actuală și este de 6 ori mai rapid de antrenat

În primul rând, de ce date de instruire avem nevoie pentru a instrui modelul DIET? Arhitectura necesită ca setul de date să conțină textul introdus, eticheta (etichetele) de intenție (e) și eticheta (entitățile) entităților.

Arhitectura are multe componente și are o pierdere totală de optimizat (minimizat) care este alcătuită din trei pierderi:

  1. Pierderea entității
  2. Pierderea intenției
  3. Pierderea măștii

Cum se leagă propozițiile de intrare de pierderea entității în timpul antrenamentului? Mai jos sunt straturile care leagă propozițiile de intrare de pierderea entității:

  1. Calea individuală de jetoane
  2. Stratul transformatorului
  3. Câmp aleatoriu condiționat (CRF)

Calea individuală a jetonului este împărțită în două sub-căi

  1. Încorporări căutate. Acesta poate fi BERT sau GloVe. Aici puteți experimenta diferite încorporări. Ieșirea este reprezentarea numerică a simbolului
  2. Caracteristici rare + Feed Forward Neural Network (FFNN). Constă din codificatoare cu un singur nivel de caracter N-grame ca caracteristici și trecute la un strat de transmisie înainte

Ieșirea celor două căi secundare se îmbină împreună și se alimentează într-un alt FFNN. Ieșirea FFNN este un vector cu 256 de dimensiuni.

Ieșirile căii individuale de jetoane sunt introduse într-un strat de transformator cu 2 straturi. Faceți clic aici pentru un articol bun despre transformatoare. Ulterior, ieșirile stratului de transformator sunt introduse în stratul de câmp aleator condiționat (CRF). În interiorul CRF, avem un FFNN care ia ieșirea stratului transformatorului și clasifică ce entitate este ieșirea. De exemplu, cuvântul „ping” are entitatea nume_joc. Între aceste FFNN, avem o matrice de tranziție. Ideea din spatele matricei de tranziție este de a surprinde situația în care, dacă există un jeton care este o entitate, jetoanele sale vecine au o mare probabilitate de a fi și o entitate. Pentru fiecare simbol, avem eticheta entității adevăr-sol și aceasta poate fi utilizată în timpul antrenamentului pentru a instrui atât FFNN-ul nostru, cât și matricea de tranziție (ponderile lor).

Există un simbol de clasă special (__CLS__) în figura arhitecturii DIET de mai sus. Ideea din spatele acestui simbol de clasă special este că ar rezuma întreaga propoziție de intrare și ar obține o reprezentare numerică care reprezintă întreaga propoziție de intrare. Acest token special de clasă urmează aceeași cale ca token-urile individuale, cu toate acestea, ieșirea încorporărilor pretrainate și caracteristicile rare sunt ușor diferite:

  1. Rezultatul încorporărilor pretrainate este acum o încorporare a frazelor. Acest lucru este calculat diferit în funcție de încorporările în căutare.
  2. Caracteristicile rare pentru jetonul de clasă specială sunt suma tuturor caracteristicilor rare ale jetoanelor individuale.

Deoarece clasa de simboluri este rezumarea întregii propoziții de intrare, clasa de simboluri ar trebui să poată prezice intenția. Jetonul de clasă specială va trece prin calea jetonului individual, stratul transformatorului și apoi către stratul de încorporare. În același timp, intenția de bază a propoziției de intrare trece prin stratul de încorporare. Asemănarea (și deci pierderea intenției) este calculată între ieșirea celor două straturi de încorporare.

Adăugarea acestui simbol de mască în arhitectură este astfel încât modelul să poată fi antrenat și ca model de limbaj. Un model de limbă este locul în care modelul prezice cel mai potrivit jeton următor dat de un set de jetoane de intrare. În timpul antrenamentului, modelul ar masca în mod aleatoriu unele cuvinte și ar fi obiectivul algoritmului să prezică care este cuvântul original care a fost mascat. Diagrama de mai jos arată cum funcționează acest lucru. Jetonul de mască va trece prin transformator și într-un strat de încorporare. În același timp, simbolul mascat (cuvântul pong din figură) trece prin calea individuală a simbolului și, de asemenea, într-un strat de încorporare. O funcție de similitudine este calculată între aceste două încorporări. Unul dintre obiectivele modelului este de a minimiza pierderea măștii. Cu cât pierderea măștii este mai mică, cu atât modelul este mai bun în prezicerea simbolului mascat.

Două note speciale despre toate FFNN din arhitectură. În primul rând, acestea NU sunt complet conectate. FFNN are o rată de abandon de aproximativ 80% de la început. Acest lucru face ca FFNN să fie mai ușor. În al doilea rând, TOATE FFNN au aceeași greutate. Toate funcțiile FFNN post rare au greutăți comune (W1) și toate posturile FFNN care fuzionează ieșirea celor două căi împart un alt set de greutăți (W2).

De ce folosesc jetonul de mască și antrenează din nou un model de limbă atunci când folosesc deja modele pre-antrenate? Pentru a permite modelului să se adapteze la domeniul setului de date. Mai ales într-un chatbot sau în contextul social media, există mai multe cuvinte scrise greșit sau argouri sau texte de comandă și astfel, instruirea din nou a unui model de limbă ar permite modelului să capteze aceste limbi specifice domeniului.

Arhitectura este concepută pentru a permite modelului să învețe o reprezentare mai generală a propozițiilor noastre de intrare. În timpul antrenamentului, toate greutățile trebuie optimizate pe baza a trei pierderi diferite: pierderea de entitate, intenție și mască și, ca atare, modelul nu poate învăța doar o reprezentare care minimizează puternic una dintre pierderi. În plus, arhitectura este concepută în așa fel încât să puteți porni sau dezactiva mai multe componente. Arhitectura este concepută pentru a gestiona intenția și clasificarea entității, dar dacă vrem doar ca modelul să facă clasificarea intenției, putem „dezactiva” pierderea entității și masca și ne concentrăm doar pe optimizarea pierderii intenției în timpul antrenamentului. Îmi place foarte mult să aflu despre modelul DIET al RASA și următorul pas este să experimentez cu biblioteca RASA.