Καλύτερη ανάλυση συναισθημάτων με το BERT

Φανταστείτε ότι έχετε ένα bot που απαντά στους πελάτες σας και θέλετε να το κάνετε λίγο πιο φυσικό, πιο ανθρώπινο.

Φωτογραφία από το Hybrid στο Unsplash

Για να επιτευχθεί αυτό, πρέπει να κάνετε τις απαντήσεις πιο εξατομικευμένες. Ένας τρόπος για να μάθετε περισσότερα σχετικά με τους πελάτες με τους οποίους μιλάτε είναι να αναλύσετε την πολικότητα των απαντήσεών τους. Με πολικότητα εδώ εννοώ αν ανιχνεύεται εάν η φράση (ή ομάδα φράσεων) γράφεται με την πρόθεση να θεωρηθεί ως μια θετική ή αρνητική δήλωση. Αυτό σημαίνει ότι αντιμετωπίζουμε ένα δυαδικό πρόβλημα ταξινόμησης. Υπάρχουν πολλές μέθοδοι για την επίλυση αυτού του έργου NLP. Δοκίμασα κάποιες και εκείνη που πραγματικά ξεπέρασε τα υπόλοιπα ήταν ο BERT.

Επισκόπηση του BERT

Το BERT (Αναφορές αμφίδρομων κωδικοποιητών για τους μετασχηματιστές) είναι μια "νέα μέθοδος εκμάθησης γλωσσών πριν την προπόνηση" που αναπτύχθηκε από την Google και κυκλοφόρησε στα τέλη του 2018 (μπορείτε να διαβάσετε περισσότερα εδώ). Δεδομένου ότι είναι προ-εκπαιδευμένο σε γενικά σύνολα δεδομένων (από τη Wikipedia και το βιβλίο BooksCorpus), μπορεί να χρησιμοποιηθεί για την επίλυση διαφορετικών καθηκόντων NLP. Αυτό περιλαμβάνει την ταξινόμηση επιπέδου προτάσεων (όπως κάνουμε εδώ), την ταξινόμηση επιπέδων απάντησης ή το επίπεδο συμβολισμών (π.χ. τμήμα της ομιλίας με λόγια) και ο BERT είναι σε θέση να επιτύχει τελευταίες τεχνολογίες σε πολλές από αυτές τις εργασίες.

BERT σε σύγκριση με δύο άλλα μοντέλα τελευταίας τεχνολογίας (πηγή: Devlin et al.)

Στην πράξη, το BERT παρέχει προ-εκπαιδευμένα γλωσσικά μοντέλα για αγγλικά και 103 άλλες γλώσσες που μπορείτε να προσαρμόσετε ανάλογα με τις ανάγκες σας. Εδώ θα δούμε πώς να ρυθμίζουμε καλύτερα το αγγλικό μοντέλο για να κάνουμε ανάλυση συναισθημάτων.

Βελτιστοποίηση με BERT

Ο BERT προσέφερε πρόσφατα ένα σημειωματάριο σεμινάριο στην Python για να δείξει πώς να κάνει την ανίχνευση συναίσθημα σε κριτικές ταινιών. Το σημειωματάριο tutorial είναι καλά κατασκευασμένο και καθαρό, οπότε δεν θα το περάσω λεπτομερώς - εδώ είναι μόνο μερικές σκέψεις σε αυτό. Πρώτον, ο φορητός υπολογιστής χρησιμοποιεί το σύνολο δεδομένων IMDb, το οποίο μπορείτε να κατεβάσετε απευθείας από την Keras. Αυτό το σύνολο δεδομένων περιέχει 50000 κριτικές ταινιών που χωρίζονται σε δύο ίσα μέρη, ένα για εκπαίδευση και ένα για δοκιμή. Κάθε σύνολο δεδομένων είναι ισορροπημένο, με 12500 θετικές κριτικές και 12500 αρνητικές.

Παραδείγματα σχολίων από το σύνολο δεδομένων IMDb. Η πολικότητα στο μηδέν σημαίνει ότι η πρόταση εκφράζει αρνητικά συναισθήματα, ενώ ένα σημαίνει ότι είναι θετικό.

Για την τελειοποίηση, εφαρμόζουν ένα καινούργιο στρώμα και softmax πάνω από το προ-εκπαιδευμένο μοντέλο, αλλά μπορείτε να το προσαρμόσετε. Χρησιμοποιεί τη δομή εκτιμητών Tensorflow για την εκπαίδευση και την πρόβλεψη των αποτελεσμάτων και απαιτούν ορισμένες λειτουργίες όπως run_config ή model_fn, είτε κωδικοποιημένες στο σημειωματάριο είτε εισαγόμενες από το αρχείο run_classifier.py που υπάρχει στο GitHub, έτσι δεν χρειάζεται να ανησυχείτε γι 'αυτά .

Μοντέλο αξιολόγησης

Για να δούμε πόσο καλά εκτελεί το BERT, το συνέκρινα με δύο άλλα μοντέλα. Το πρώτο είναι μια διοικητική παλινδρόμηση με διεύρυνση TF-IDF. Η δεύτερη είναι εμπνευσμένη από τους Rezaeinia et al. (git). Χρησιμοποιεί τις ενσωματώσεις του Word2Vec, μαζί με την ετικέτα Part of Speech, και περνάει τη συγκόλληση και των δύο σε ένα 1D περιπλοκό δίκτυο.

Παρόλο που η λογιστική παλινδρόμηση λειτουργεί εκπληκτικά καλά, ξεπερνώντας το πρότυπο που βασίζεται σε νευρικό σύστημα, το BERT αποδίδει ακόμα καλύτερα αποτελέσματα. Επιπλέον, τα αποτελέσματα του BERT βελτιώνονται σημαντικά όταν το μοντέλο εκπαιδεύεται σε ένα μεγαλύτερο σύνολο δεδομένων. Αυτό που μπορεί να είναι ένα μειονέκτημα είναι ότι χρειάζεται πολύς χρόνος για να εκπαιδεύσετε, ακόμα και με GPU. Η διοικητική παλινδρόμηση ολοκληρώνει την εκπαίδευση μέσα σε λίγα δευτερόλεπτα, όταν ο BERT χρειάζεται περίπου 20 λεπτά για να το πράξει (με GPU και 25000 σχόλια κατάρτισης).

Αποτελέσματα των διαφόρων μοντέλων

Εξυπηρέτηση με το Docker και το Tensorflow

Μόλις αποθηκεύσετε το μοντέλο σας ως saved_model.pb (που λαμβάνετε για παράδειγμα με τη μέθοδο export_savedmodel), μπορείτε να ρυθμίσετε έναν διακομιστή ο οποίος θα εκτελεί το μοντέλο και θα κάνει προβλέψεις. Αρχικά, δημιουργούμε ένα δοχείο Docker από την υπηρεσία tensorflow (θα χρειαστεί να εγκαταστήσετε πρώτα το Docker) και προσθέτουμε το μοντέλο μας σε αυτό. Το Model_en θα πρέπει να είναι ένας φάκελος που περιέχει ένα φάκελο με όνομα 1 (απαραίτητο για tensorflow), το οποίο περιέχει το μοντέλο που έχετε εξάγει. Αυτό επιτυγχάνεται με τις παρακάτω γραμμές εντολών.

Στη συνέχεια, γράφουμε έναν απλό πελάτη, ο οποίος θα πάρει μια πρόταση σαν είσοδο, θα την μετατρέψει σε χαρακτηριστικά εισόδου BERT (όπως και στο tutorial notebook) και θα καλέσει το τρέχον δοχείο Docker που θα κάνει την πρόβλεψη. Μπορείτε να μετατρέψετε τον πελάτη σε απλό API χρησιμοποιώντας τη φιάλη. Ο παρακάτω κώδικας python δείχνει αυτά τα διαφορετικά βήματα.

Στη συνέχεια, μπορείτε να κάνετε προβλέψεις στέλνοντας αιτήσεις συμβολοσειρών, χρησιμοποιώντας για παράδειγμα το Postman.

Voilà! Τώρα είστε έτοιμοι να κάνετε μια καλή ανάλυση συναισθημάτων με το BERT και να το χρησιμοποιήσετε σε μια πραγματική εφαρμογή.