Bolja analiza osjećaja uz BERT

Zamislite da jedan bot odgovara vašim klijentima i želite da to zvuči malo prirodnije, ljudskije.

Fotografiju Hybrida na Unsplash-u

Da biste to postigli, odgovore morate učiniti personaliziranijima. Jedan način da saznate više o kupcima s kojima razgovarate je analiza polariteta njihovih odgovora. Pod polaritetom ovdje mislim na otkrivanje je li rečenica (ili skupina rečenica) napisana s namjerom da se percipira kao pozitivna ili negativna izjava. To znači da se suočavamo s problemom binarne klasifikacije. Postoji puno metoda za rješavanje ovog zadatka NLP-a. Neke sam testirao, a onaj koji je stvarno nadmašio druge je bio BERT.

Pregled BERT-a

BERT (Bidirectionnal Encoder Reprezentacije za transformatore) je „nova metoda pred-trening jezičnih reprezentacija“ koju je razvio Google i objavljena krajem 2018. (više o tome možete pročitati ovdje). Kako je unaprijed osposobljen za generičke skupove podataka (s Wikipedije i BooksCorpus-a), može se koristiti za rješavanje različitih NLP zadataka. To uključuje klasifikaciju razine rečenica (kao što to radimo ovdje), odgovaranje na pitanja ili klasifikaciju razine tokena (npr. Dio govornog označavanja), a BERT je u mogućnosti postići mnoge vrhunske performanse u mnogim od tih zadataka.

BERT arhitektura u usporedbi s dva druga najmodernija modela (izvor: Devlin i dr.)

U praksi, BERT nudi unaprijed obučene jezične modele za engleski i 103 druga jezika koja možete precizirati kako bi prilagodili svojim potrebama. Ovdje ćemo vidjeti kako precizno prilagoditi engleski model za analizu osjećaja.

Fino podešavanje s BERT-om

BERT je nedavno na Python-u osigurao tutorial bilježnicu za ilustraciju kako odrediti osjećaje u recenzijama filmova. Tutorial bilježnica je dobro napravljena i jasna, tako da je neću detaljno pregledavati - evo samo nekoliko misli o njoj. Prvo, bilježnica koristi IMDb skup podataka, koji se može izravno preuzeti s Kerasa. Ovaj skup podataka sadrži 50000 pregleda filmova podijeljenih u dva jednaka dijela, jedan za trening i jedan za testiranje. Svaki je skup podataka uravnotežen, s 12500 pozitivnih pregleda i 12500 negativnih.

Primjeri pregleda iz skupa podataka IMDb. Polarnost prema nuli znači da rečenica izražava negativne osjećaje, dok jedna znači da je pozitivna.

Za fino prilagođavanje nanose jedan novi sloj i softmax na vrh unaprijed obučenog modela, ali možete ga prilagoditi. Koristi strukturu Tensorflow procjenitelja za obuku i predviđanje rezultata, a za njih su potrebne neke funkcije poput run_config ili model_fn, ili kodirane u bilježnicu ili uvezene iz datoteke run_classifier.py datoteke prisutne u GitHubu, tako da ne morate brinuti o njima ,

Procjena modela

Da vidim kako dobro funkcionira BERT, uspoređivao sam ga s dva druga modela. Prva je logistička regresija s TF-IDF vektorizacijom. Druga je inspiracija iz Rezaeinia i sur. (Git). Koristi ugrađivanje Word2Vec zajedno s označavanjem dijela govora i prosljeđuje pridruživanje oboje u 1D konvolucijsku mrežu.

Iako logistička regresija djeluje iznenađujuće dobro, nadmašujući neuronski model, BERT daje još bolje rezultate. Nadalje, rezultati BERT-a značajno se poboljšavaju kada se model obučava na većem skupu podataka. Ono što može biti nedostatak je da je potrebno puno vremena za treniranje, čak i s GPU-om. Logistička regresija završava obuku u roku od nekoliko sekundi, kada BERT-u treba oko 20 minuta da to učini (uz GPU i 25000 pregleda treninga).

Rezultati različitih modela

Služi s Dockerom i Tensorflowom

Nakon što svoj model spremite kao save_model.pb (dobiven na primjer metodom export_savedmodel), možete postaviti poslužitelj koji će pokrenuti model i predvidjeti. Prvo, kreiramo Docker spremnik iz posluživanja od tensorflowa (prvo ćete morati instalirati Docker) i u njega smo dodali naš model. Model_en trebala bi biti mapa koja sadrži mapu nazvanu 1 (potrebna za tensorflow) koja sama sadrži model koji ste izvezli. To se postiže donjim naredbenim crtama.

Tada pišemo jednostavan klijent, koji će rečenicu uzeti kao ulaz, transformirati je u BERT mogućnosti unosa (baš kao u bilježnici s udžbenicima) i nazvati pokrenuti Docker spremnik koji će predvidjeti. Klijenta možete pretvoriti u jednostavan API pomoću Flask-a. Pitonski kôd dolje prikazuje one različite korake.

Tada možete predvidjeti slanjem string zahtjeva, na primjer, koristeći Postman.

Evo ga! Sada ste spremni napraviti analizu raspoloženja s BERT-om i koristiti je u stvarnom programu.