По-добър анализ на чувството с BERT

Представете си, че имате бот, който отговаря на клиентите си и искате да ви звучи малко по-естествено, по-човешко.

Снимка от Hybrid на Unsplash

За да постигнете това, трябва да направите отговорите по-персонализирани. Един от начините да научите повече за клиентите, с които разговаряте, е да анализирате полярността на техните отговори. Под полярност тук имам предвид откриването дали изречението (или групата изречения) е написано с намерението да бъде възприето като положително или отрицателно твърдение. Това означава, че сме изправени пред проблем с бинарна класификация. Има много методи за решаване на тази задача на NLP. Тествах някои и този, който наистина превъзхождаше другите, беше BERT.

Преглед на BERT

BERT (Bidirectionnal Encoder Представителства за трансформатори) е „нов метод за предварително обучение на езикови представителства“, разработен от Google и публикуван в края на 2018 г. (можете да прочетете повече за това тук). Тъй като е предварително обучен на общи набори от данни (от Wikipedia и BooksCorpus), той може да се използва за решаване на различни NLP задачи. Това включва класификация на нивото на изреченията (както правим тук), отговаряне на въпроси или класификация на нива на токен (напр. Част от маркиране на речта) и BERT е в състояние да постигне най-съвременни изпълнения в много от тези задачи.

BERT архитектурата в сравнение с два други най-съвременни модела (източник: Devlin et al.)

На практика BERT предлага предварително обучени езикови модели за английски и 103 други езици, които можете да прецизирате според нуждите си. Тук ще видим как да прецизираме английския модел, за да направим анализ на настроенията.

Фина настройка с BERT

Наскоро BERT предостави бележник с ръководства в Python, за да илюстрира как да направите откриване на настроенията в рецензиите на филми. Учебното тефтерче е добре направено и ясно, така че няма да го разгледам подробно - ето само няколко мисли за него. Първо, преносимият компютър използва IMDb набора данни, който може да бъде изтеглен директно от Keras. Този набор от данни съдържа 50000 прегледа на филми, разделени на две равни части, една за обучение и една за тестване. Всеки набор от данни е балансиран, с 12500 положителни отзива и 12500 отрицателни.

Примери за прегледи от данните от IMDb. Полярността към нула означава, че изречението изразява отрицателни чувства, докато едно означава, че е положително.

За да прецизират, те прилагат един нов слой и softmax върху предварително подготвения модел, но можете да го персонализирате. Той използва структурата на оценителите на Tensorflow за обучение и прогнозиране на резултатите и те изискват някои функции като run_config или model_fn, кодирани в бележника или внесени от файла run_classifier.py, наличен в GitHub, така че не е нужно да се притеснявате за тях ,

Оценка на модела

За да видя колко добре се представя BERT, го сравних с два други модела. Първият е логистична регресия с TF-IDF векторизация. Вторият е вдъхновен от Rezaeinia et al. (Git). Той използва вграждане на Word2Vec, заедно с маркиране на част от речта и предава конкатенацията на двете в 1D конволюционна мрежа.

Въпреки че логистичната регресия работи изненадващо добре, превъзхождайки невронния модел, BERT дава още по-добри резултати. Освен това резултатите от BERT се подобряват значително, когато моделът се обучава на по-голям набор от данни. Това, което може да бъде недостатък, е, че се изисква доста дълго време за обучение, дори и с GPU. Логистичната регресия завършва обучението в рамките на секунди, когато BERT се нуждае от около 20 минути, за да го направи (с GPU и 25000 отзиви за обучение).

Резултати от различните модели

Обслужване с Докер и Тенсорфлоу

След като запазите модела си като save_model.pb (получен например с метода export_savedmodel), можете да настроите сървър, който да стартира модела и да прави прогнози. Първо, ние създаваме контейнер на Docker от обслужване на tensorflow (първо ще трябва да инсталирате Docker) и добавяме нашия модел в него. Model_en трябва да бъде папка, съдържаща папка с име 1 (необходима за tensorflow), която сама съдържа модела, който сте експортирали. Това се постига от командните редове по-долу.

След това пишем обикновен клиент, който ще приеме изречение като вход, ще го трансформира в функции за въвеждане на BERT (точно като в тетрадния бележник) и извикаме работещия контейнер на Docker, който ще направи прогнозата. Можете да превърнете клиента в обикновен API с помощта на Flask. Кодът python по-долу показва тези различни стъпки.

След това можете да правите прогнози, като изпращате низови заявки, използвайки например Postman.

Готово! Вече сте готови да направите анализ на фините настроения с BERT и да го използвате в реално приложение.