Lepší analýza sentimentu s BERT

Představte si, že na vaše klienty odpovídáte bot, a chcete, aby to znělo trochu přirozenější a lidštější.

Foto: Hybrid on Unsplash

Abyste toho dosáhli, musíte odpovědi lépe přizpůsobit. Jedním ze způsobů, jak se dozvědět více o zákaznících, se kterými mluvíte, je analýza polarity jejich odpovědí. Polaritou zde mám na mysli detekci toho, zda je věta (nebo skupina vět) psána s úmyslem být vnímána jako pozitivní nebo negativní tvrzení. To znamená, že čelíme problému binární klasifikace. Existuje řada metod řešení tohoto úkolu NLP. Některé jsem testoval a ten, který opravdu překonal ostatní, byl BERT.

Přehled BERT

BERT (Bidirectionnal Encoder Representations for Transformers) je „nová metoda jazykových reprezentací předběžného výcviku“ vyvinutá společností Google a vydaná na konci roku 2018 (o tom si můžete přečíst více zde). Protože je předem vyškolen na obecné datové sady (z Wikipedie a BooksCorpus), lze jej použít k řešení různých úkolů NLP. To zahrnuje klasifikaci na úrovni věty (jak to děláme zde), zodpovězení otázek nebo klasifikace na úrovni tokenů (např. Část značkování řeči) a BERT je schopen v mnoha těchto úkolech dosáhnout nejmodernějších výkonů.

Architektura BERT ve srovnání se dvěma dalšími nejmodernějšími modely (zdroj: Devlin et al.)

V praxi poskytuje BERT předem připravené jazykové modely pro angličtinu a 103 dalších jazyků, které můžete vyladit podle svých potřeb. Zde uvidíme, jak doladit anglický model, aby provedl analýzu sentimentu.

Doladění s BERT

BERT nedávno poskytl v Pythonu tutoriál pro ilustraci, jak detekovat sentiment v recenzích filmů. Notebook s tutoriálem je dobře vytvořený a jasný, takže se tím nebudu podrobně zabývat - zde je jen několik myšlenek. Nejprve notebook používá datový soubor IMDb, který lze stáhnout přímo z Kerasu. Tento dataset obsahuje 50000 recenzí filmů rozdělených do dvou stejných částí, jednu pro trénink a druhou pro testování. Každý datový soubor je vyvážený, s 12500 pozitivními recenze a 12500 negativními.

Příklady recenzí z datového souboru IMDb. Polarita k nule znamená, že věta vyjadřuje negativní pocity, zatímco jedna znamená, že je pozitivní.

K doladění aplikují jednu novou vrstvu a softmax na horní část předškoleného modelu, ale můžete si ji přizpůsobit. Používá strukturu odhadců Tensorflow k trénování a předpovídání výsledků a vyžaduje některé funkce, jako je run_config nebo model_fn, buď kódované v notebooku nebo importované ze souboru run_classifier.py přítomného v GitHub, takže se o ně nemusíte starat. .

Vyhodnocení modelu

Abych viděl, jak dobře BERT hraje, porovnal jsem to se dvěma dalšími modely. Prvním je logistická regrese s vektorizací TF-IDF. Druhý je inspirován Rezaeinia et al. (git). Používá emblémy Word2Vec, spolu s označováním částí řeči, a předává zřetězení obou do 1D konvoluční sítě.

Přestože logistická regrese funguje překvapivě dobře, překonává model založený na neuronech, BERT přináší ještě lepší skóre. Výsledky BERT se navíc výrazně zlepšují, když je model trénován na větším souboru dat. Nevýhodou může být to, že trénování trvá docela dlouho, dokonce i s GPU. Logistická regrese dokončí trénink během několika sekund, když BERT potřebuje asi 20 minut na to (s GPU a 25 000 recenzemi školení).

Výsledky různých modelů

Podáváme s Dockerem a Tensorflowem

Jakmile model uložíte jako uložený_model.pb (získaný například metodou export_savedmodel), můžete nastavit server, který bude model spouštět a provádět předpovědi. Nejprve vytvoříme kontejner Docker ze servírování tensorflow (nejprve musíte nainstalovat Docker) a do něj přidáme náš model. Model_en by měla být složka obsahující složku s názvem 1 (nezbytná pro tensorflow), která sama obsahuje exportovaný model. Toho je dosaženo pomocí příkazových řádků níže.

Poté napíšeme jednoduchého klienta, který jako větu vezme větu, převede ji na vstupní funkce BERT (stejně jako v poznámkovém bloku) a zavolá běžící kontejner Docker, který provede předpověď. Pomocí baňky můžete klienta změnit na jednoduché API. Níže uvedený pythonový kód ukazuje tyto různé kroky.

Poté můžete předpovědi poslat pomocí požadavků na řetězec, například pomocí Postmanu.

Voilà! Nyní jste připraveni provést s BERT nějakou jemnou analýzu sentimentu a použít ji v aplikaci v reálném světě.