Bedre stemningsanalyse med BERT

Forestil dig, at du har en bot, der svarer på dine klienter, og du vil have det til at lyde lidt mere naturligt og mere menneskeligt.

Foto af Hybrid på Unsplash

For at opnå det skal du gøre svarene mere personlige. En måde at lære mere om de kunder, du taler med, er at analysere polariteten i deres svar. Med polaritet her mener jeg at detektere, om sætningen (eller gruppen af ​​sætninger) er skrevet med den hensigt at blive opfattet som en positiv eller negativ erklæring. Dette betyder, at vi står over for et binært klassificeringsproblem. Der findes mange metoder til at løse denne NLP-opgave. Jeg testede nogle, og den der virkelig overgik de andre var BERT.

BERT Oversigt

BERT (Bidirectionnal Encoder Representations for Transformers) er en "ny metode til foruddannelse af sprogrepræsentationer" udviklet af Google og frigivet i slutningen af ​​2018 (du kan læse mere om det her). Da det er foruddannet på generiske datasæt (fra Wikipedia og BooksCorpus), kan det bruges til at løse forskellige NLP-opgaver. Dette inkluderer klassificering af sætningsniveau (som vi gør her), besvarelse af spørgsmål eller klassificering af tokeniveau (f.eks. En del af talemærkning), og BERT er i stand til at opnå avancerede forestillinger i mange af disse opgaver.

BERT-arkitektur sammenlignet med to andre avancerede modeller (kilde: Devlin et al.)

I praksis leverer BERT foruddannede sprogmodeller til engelsk og 103 andre sprog, som du kan finjustere efter dine behov. Her ser vi, hvordan man finjusterer den engelske model til at udføre sentimentanalyse.

Finjustering med BERT

BERT leverede for nylig en tutorial-notesbog i Python for at illustrere, hvordan man kan gøre følelsesdetektering i filmanmeldelser. Tutorial-notesbogen er godt lavet og klar, så jeg vil ikke gennemgå det i detaljer - her er bare et par tanker om det. Først bruger den bærbare computer IMDb-datasættet, der kan downloades direkte fra Keras. Dette datasæt indeholder 50000 filmanmeldelser delt i to lige store dele, en til træning og en til test. Hvert datasæt er afbalanceret med 12500 positive anmeldelser og 12500 negative.

Eksempler på anmeldelser fra IMDb-datasættet. Polaritet til nul betyder, at sætningen udtrykker negative følelser, mens den ene betyder, at den er positiv.

For at finjustere anvender de et enkelt nyt lag og softmax oven på den foruddannede model, men du kan tilpasse det. Det bruger Tensorflow estimators struktur til at træne og forudsige resultaterne, og de kræver nogle funktioner som run_config eller model_fn, enten kodet i den bærbare computer eller importeret fra filen run_classifier.py, der findes i GitHub, så du behøver ikke at bekymre dig om dem .

Modelevaluering

For at se, hvor godt BERT klarer sig, sammenlignede jeg det med to andre modeller. Den første er en logistisk regression med TF-IDF-vektorisering. Den anden er inspireret af Rezaeinia et al. (Git). Den bruger Word2Vec-indlejringer sammen med en del af talemærkning og overfører sammenkædningen af ​​begge dele til et 1D konvolutionsnetværk.

Selvom den logistiske regression fungerer overraskende godt, bedre end den neurobaserede model, giver BERT endnu bedre score. Derudover forbedres BERT-resultater markant, når modellen trænes i et større datasæt. Hvad der kan være en ulempe er, at det tager ret lang tid at træne, selv med GPU. Den logistiske regression afslutter træningen inden for få sekunder, når BERT har brug for ca. 20 minutter for at gøre det (med GPU og 25000 træningsanmeldelser).

Resultater af de forskellige modeller

Servering med Docker og Tensorflow

Når du har gemt din model som en save_model.pb (fås f.eks. Med eksport_savedmodel-metoden), kan du opsætte en server, der kører modellen og fremsætter forudsigelser. Først opretter vi en Docker-container fra tensorflow-servering (du skal først installere Docker), og vi tilføjer vores model til den. Model_en skal være en mappe, der indeholder en mappe med navnet 1 (nødvendigt for tensorflow), som i sig selv indeholder den model, du har eksporteret. Dette opnås ved hjælp af kommandolinierne nedenfor.

Derefter skriver vi en simpel klient, der tager en sætning som input, omdanner den til BERT-inputfunktioner (ligesom i tutorial-notesbogen) og kalder den kørende Docker-container, der giver forudsigelsen. Du kan omdanne klienten til et simpelt API ved hjælp af Flask. Pythonkoden nedenfor viser de forskellige trin.

Du kan derefter foretage forudsigelser ved at sende strenganmodninger ved hjælp af f.eks. Postman.

Sådan! Du er nu klar til at lave nogle fine følelsesanalyser med BERT og til at bruge den i et ægte program.