Bessere Stimmungsanalyse mit BERT

Stellen Sie sich vor, Sie haben einen Bot, der Ihren Kunden antwortet, und Sie möchten, dass es ein bisschen natürlicher und menschlicher klingt.

Foto von Hybrid auf Unsplash

Um dies zu erreichen, müssen Sie die Antworten personalisierter gestalten. Eine Möglichkeit, mehr über die Kunden zu erfahren, mit denen Sie sprechen, besteht darin, die Polarität ihrer Antworten zu analysieren. Mit Polarität meine ich hier das Erkennen, ob der Satz (oder die Gruppe von Sätzen) mit der Absicht geschrieben wurde, als positive oder negative Aussage wahrgenommen zu werden. Dies bedeutet, dass wir vor einem Binärklassifizierungsproblem stehen. Es gibt viele Methoden, um diese NLP-Aufgabe zu lösen. Ich habe einige getestet und die, die die anderen wirklich übertroffen hat, war BERT.

BERT Übersicht

BERT (Bidirectionnal Encoder Representations for Transformers) ist eine von Google entwickelte und Ende 2018 veröffentlichte „neue Methode zur Sprachdarstellung vor dem Training“ (mehr dazu hier). Da es für generische Datensätze (von Wikipedia und BooksCorpus) vorab trainiert wurde, kann es zur Lösung verschiedener NLP-Aufgaben verwendet werden. Dies umfasst die Einstufung auf Satzebene (wie hier), die Beantwortung von Fragen oder die Einstufung auf Tokenebene (z. B. Teil der Spracherkennung), und BERT ist in der Lage, bei vielen dieser Aufgaben die neuesten Leistungen zu erbringen.

BERT-Architektur im Vergleich zu zwei anderen modernen Modellen (Quelle: Devlin et al.)

In der Praxis bietet BERT vorgefertigte Sprachmodelle für Englisch und 103 weitere Sprachen an, die Sie an Ihre Bedürfnisse anpassen können. Hier erfahren Sie, wie Sie das englische Modell für die Stimmungsanalyse optimieren können.

Feinabstimmung mit BERT

BERT hat kürzlich ein Tutorial-Notizbuch in Python zur Verfügung gestellt, um zu veranschaulichen, wie die Stimmungserkennung in Filmkritiken durchgeführt werden kann. Das Tutorial-Notizbuch ist gut gemacht und übersichtlich, daher werde ich es nicht im Detail durchgehen - hier nur ein paar Gedanken dazu. Erstens verwendet das Notebook den IMDb-Datensatz, der direkt von Keras heruntergeladen werden kann. Dieser Datensatz enthält 50000 Filmkritiken, die zu zwei gleichen Teilen aufgeteilt sind, eine zum Trainieren und eine zum Testen. Jeder Datensatz ist ausgewogen mit 12500 positiven und 12500 negativen Bewertungen.

Beispiele für Rezensionen aus dem IMDb-Datensatz. Polarität zu Null bedeutet, dass der Satz negative Gefühle ausdrückt, während man meint, dass er positiv ist.

Zur Feinabstimmung wird eine einzelne neue Ebene und ein Softmax auf das vortrainierte Modell angewendet, das Sie jedoch anpassen können. Es verwendet die Tensorflow Estimators-Struktur zum Trainieren und Vorhersagen der Ergebnisse und erfordert einige Funktionen wie run_config oder model_fn, die entweder im Notizbuch codiert oder aus der im GitHub vorhandenen Datei run_classifier.py importiert werden, sodass Sie sich nicht darum kümmern müssen .

Modellbewertung

Um zu sehen, wie gut BERT abschneidet, habe ich es mit zwei anderen Modellen verglichen. Die erste ist eine logistische Regression mit TF-IDF-Vektorisierung. Der zweite ist inspiriert von Rezaeinia et al. (git). Es verwendet Word2Vec-Einbettungen sowie Teil der Sprachkennzeichnung und übergibt die Verkettung von beiden in ein 1D-Faltungsnetzwerk.

Obwohl die logistische Regression überraschend gut funktioniert und das neuronale Modell übertrifft, liefert BERT noch bessere Ergebnisse. Darüber hinaus verbessern sich die BERT-Ergebnisse erheblich, wenn das Modell an einem größeren Datensatz trainiert wird. Ein Nachteil kann sein, dass das Trainieren selbst mit einer GPU ziemlich lange dauert. Die logistische Regression ist innerhalb von Sekunden abgeschlossen, wenn BERT etwa 20 Minuten dafür benötigt (mit GPU und 25000 Trainingsberichten).

Ergebnisse der verschiedenen Modelle

Mit Docker und Tensorflow servieren

Nachdem Sie Ihr Modell als saved_model.pb gespeichert haben (z. B. mit der Methode export_savedmodel), können Sie einen Server einrichten, auf dem das Modell ausgeführt und Vorhersagen getroffen werden. Zuerst erstellen wir einen Docker-Container aus Tensorflow Serving (Sie müssen Docker zuerst installieren) und fügen unser Modell hinzu. Modell_de sollte ein Ordner sein, der einen Ordner mit dem Namen 1 (für Tensorflow erforderlich) enthält, der selbst das von Ihnen exportierte Modell enthält. Dies wird durch die folgenden Befehlszeilen erreicht.

Dann schreiben wir einen einfachen Client, der einen Satz als Eingabe verwendet, ihn in BERT-Eingabefunktionen umwandelt (genau wie im Tutorial-Notizbuch) und den laufenden Docker-Container aufruft, der die Vorhersage erstellt. Sie können den Client mit Flask in eine einfache API verwandeln. Der folgende Python-Code zeigt diese verschiedenen Schritte.

Sie können dann Vorhersagen treffen, indem Sie Zeichenfolgenanforderungen senden, z. B. mit Postman.

Voilà! Sie können nun mit BERT eine detaillierte Stimmungsanalyse durchführen und diese in einer realen Anwendung verwenden.