O analiză mai bună a sentimentelor cu OARET

Imaginați-vă că aveți un bot care vă răspunde clienților și doriți să faceți să pară ceva mai natural, mai uman.

Fotografie de Hybrid pe Unsplash

Pentru a obține asta, trebuie să faceți răspunsurile mai personalizate. Un mod de a afla mai multe despre clienții cu care vorbești este să analizezi polaritatea răspunsurilor lor. Prin polaritate aici mă refer la detectarea dacă propoziția (sau grupul de propoziții) este scrisă cu intenția de a fi percepută ca o afirmație pozitivă sau negativă. Aceasta înseamnă că ne confruntăm cu o problemă de clasificare binară. Există o mulțime de metode pentru a rezolva această sarcină NLP. Am testat unele și cea care i-a întrecut cu adevărat pe ceilalți a fost BERT.

Prezentare generală a BERT

BERT (Bidirectionnal Encoder Representations for Transformers) este o „nouă metodă de pre-instruire a reprezentărilor de limbaj” dezvoltată de Google și lansată la sfârșitul anului 2018 (puteți citi mai multe despre aceasta aici). Deoarece este pre-instruit pe seturi de date generice (de la Wikipedia și BooksCorpus), acesta poate fi utilizat pentru a rezolva diferite sarcini NLP. Aceasta include clasificarea la nivel de propoziție (așa cum facem noi aici), răspunsul la întrebări sau clasificarea la nivel de jeton (de exemplu, o parte a etichetării vorbirii), iar OART este capabil să obțină performanțe de ultimă generație în multe dintre aceste sarcini.

Arhitectura BERT în comparație cu alte două modele de ultimă generație (sursa: Devlin și colab.)

În practică, BERT oferă modele de limbi pre-instruite pentru engleză și 103 alte limbi pe care le poți regla pentru a se potrivi nevoilor tale. Aici, vom vedea cum să ajustați modelul englez pentru a face analiza sentimentelor.

Reglare fină cu BERT

BERT a furnizat recent un caiet de instrucțiuni în Python pentru a ilustra cum să depistați sentimentele în recenziile de filme. Caietul tutorial este bine făcut și clar, așa că nu voi trece în detaliu - iată doar câteva gânduri despre el. În primul rând, notebook-ul folosește setul de date IMDb, care poate fi descărcat direct de la Keras. Acest set de date conține 50000 recenzii de filme împărțite în două părți egale, una pentru instruire și alta pentru testare. Fiecare set de date este echilibrat, cu 12500 de recenzii pozitive și 12500 de negative.

Exemple de recenzii din setul de date IMDb. Polaritatea până la zero înseamnă că propoziția exprimă sentimente negative, în timp ce una înseamnă că este pozitivă.

Pentru a regla fin, aplică un singur nou strat și softmax pe partea de sus a modelului pre-instruit, dar îl poți personaliza. Utilizează structura estimatorilor Tensorflow pentru a antrena și a prezice rezultatele și necesită unele funcții precum run_config sau model_fn, fie codificate în notebook sau importate din fișierul run_classifier.py prezent în GitHub, așa că nu trebuie să vă faceți griji pentru ele .

Model de evaluare

Pentru a vedea cât de performant este BERT, l-am comparat cu alte două modele. Primul este o regresie logistică cu vectorizarea TF-IDF. Al doilea este inspirat din Rezaeinia și colab. (Git). Folosește încorporarea Word2Vec, împreună cu etichetarea de vorbire și trece concatenarea ambelor într-o rețea convolutivă 1D.

Deși regresia logistică funcționează surprinzător de bine, depășind modelul bazat pe nevralize, BERT produce scoruri și mai bune. Mai mult, rezultatele BERT se îmbunătățesc semnificativ atunci când modelul este instruit pe un set de date mai mare. Ce poate fi un dezavantaj este că durează destul de mult timp pentru a te antrena, chiar și cu GPU. Regresia logistică finalizează instruirea în câteva secunde, când OART are nevoie de aproximativ 20 de minute pentru a face acest lucru (cu GPU și 25000 de recenzii de instruire).

Rezultatele diferitelor modele

Deservire cu Docker și Tensorflow

După ce ați salvat modelul dvs. ca salvat_model.pb (obținut de exemplu cu metoda export_savedmodel), puteți configura un server care va rula modelul și va face predicții. În primul rând, creăm un container Docker de la servirea tensorflow (va trebui să instalați mai întâi Docker) și adăugăm modelul nostru în el. Model_en ar trebui să fie un folder care conține un folder numit 1 (necesar pentru tensiune) care conține el însuși modelul pe care l-ați exportat. Acest lucru este realizat de liniile de comandă de mai jos.

Apoi scriem un client simplu, care va lua o propoziție ca intrare, o transformăm în caracteristici de intrare BERT (la fel ca în notebook-ul tutorial) și apelăm containerul Docker care rulează care va face predicția. Puteți transforma clientul într-o API simplă folosind Flask. Codul piton de mai jos arată acești pași diferiți.

Puteți face apoi predicții trimitând cereri de șiruri, utilizând de exemplu Postman

Voilà! Acum sunteți gata să faceți o analiză a sentimentelor frumoase cu BERT și să o utilizați într-o aplicație din lumea reală.