Введение

В настоящее время компании хотят понять, что пошло не так с их последними продуктами? Что пользователи и общественность думают о последней функции? Вы можете количественно оценить такую ​​информацию с хорошей точностью, используя анализ тональности. Анализ настроений — это проблема построения моделей, которые могут классифицировать документ/текст как отрицательный, положительный и нейтральный. Сентимент — это суждение о чувствах, которое генерируется из текстов и используется в различных областях, таких как интеллектуальный анализ данных в Интернете и аналитика в социальных сетях.

Я хочу продемонстрировать, как существующие инструменты НЛП и пользовательские модели классификаторов текста (я использовал платформу EazyML) помогают определить настроение текста, независимо от того, является ли оно положительным, отрицательным или нейтральным. Для этого я сначала изучаю первичные исследования и рассчитываю точность на базовом наборе данных. Наконец, я изучаю современную библиотеку анализа настроений и вычисляю с ее помощью точность.

НЛТК

Самый простой способ начать извлечение метки тональности из текста — это NLTK Vader. Vader — это основанный на лексике и правилах инструмент анализа настроений, специально откалиброванный для настроений, наиболее часто выражаемых на платформах социальных сетей. При вычислении показателя полярности Вейдер выводит четыре показателя: составной, отрицательный, положительный и нейтральный. Составной балл вычисляет сумму всех рейтингов лексики, нормализованную между -1 (самый отрицательный) и +1 (самый положительный). Отрицательные, положительные и нейтральные представляют собой долю текста, попадающую в эти категории.

Совет. Используйте Python3 для более удобной работы.

import nltk
nltk.download('vader_lexicon')
from nltk.sentiment.vader import SentimentIntensityAnalyzer
def nltk_sentiment_analysis(text): 
    sentiment = SentimentIntensityAnalyzer()
    total_sentiment = sentiment.polarity_scores(text)
    return total_sentiment
print(nltk_sentiment_analysis('You are awesome.'))
##OUTPUT = ({'neg': 0.0, 'neu': 0.328, 'pos': 0.672, 'compound': 0.6249})
#The compound value of .62 represents the sentence has positive sentiment.

Теперь посчитаем точность нашего обобщенного набора данных, который можно скачать отсюда.

import xlrd
data_file_object = xlrd.open_workbook('sentiment_analysis.xlsx')
sheet = data_file_object.sheet_by_index(0)
nrows = sheet.nrows
correct_count = 0
for i in range(1,int(nrows)):
        text = sheet.row_values(i)[0].strip()
        input_sentiment = sheet.row_values(i)[1].strip()
        output_sentiment = nltk_sentiment_analysis(text)
        if output_sentiment['compound'] > 0.2:
            result_sentiment = 'Positive'
        elif output_sentiment['compound'] < -0.2 :
            result_sentiment = 'Negative'
        else:
            result_sentiment = 'Neutral'
        if input_sentiment in result_sentiment:
            correct_count = correct_count + 1
print('Accuracy:', str((correct_count/nrows)*100),'%' )  
###OUTPUT: Accuracy: 50.7%

TextBlob

Другой метод, который обеспечивает операции обработки текста прямым способом, называется TextBlob. Следующий метод отличается от Vader тем, что возвращает кортеж с оценкой полярности и субъективности. Субъективность – это плавающее значение в диапазоне от [0,0 до 1,0], где 0,0 – очень объективно, а 1 – очень субъективно. Субъективное предложение выражает некоторые личные чувства, взгляды, убеждения, мнения, утверждения, желания, убеждения, подозрения и предположения, тогда как Объективные предложения являются фактическими. Полярность – это значение с плавающей запятой в диапазоне от [-1,0 до 1,0], где 0 – нейтральное значение, +1 – очень позитивное отношение, а -1 – очень негативное отношение.

from textblob import TextBlob
def textblob_sentiment_analysis(text):
    text_blob = TextBlob(text)
    total_sentiment = text_blob.sentiment
    return total_sentiment
print( textblob_sentiment_analysis('You are awesome.') )

##OUTPUT = (Sentiment(polarity=1.0, subjectivity=1.0))
#The output shows the text is very positive and very Subjective.

Точность для TextBlob (набор данных)

##SAME AS ABOVE##
for i in range(1,int(nrows)):
        text = sheet.row_values(i)[0].strip()
        input_sentiment = sheet.row_values(i)[1].strip()
        output_sentiment = textblob_sentiment_analysis(text)
        if output_sentiment.polarity > 0.2:
            result_sentiment = 'Positive'
        elif output_sentiment.polarity < -0.2 :
            result_sentiment = 'Negative'
        else:
            result_sentiment = 'Neutral'
        if input_sentiment in result_sentiment:
            correct_count = correct_count + 1
print('Accuracy:', str(correct_count*100/nrows),'%' )
###OUTPUT: Accuracy: 19%

Чутье

Flair позволяет применять модели обработки естественного языка (NLP) к разделам текста. Он работает совершенно иначе, чем ранее упомянутые модели. Flair использует предварительно обученную модель для обнаружения положительных или отрицательных комментариев и печатает число в скобках за меткой, что является достоверностью прогноза.

Совет. Для установки flair вам понадобится python3. В случае, если у вас возникнут проблемы с импортом Flair после установки, перейдите в его репозиторий GitHub и загрузите исправления ошибок в свою библиотеку Flair.

import flair
flair_sentiment = flair.models.TextClassifier.load('en-sentiment')
def flair_sentiment_analysis(text):
    s = flair.data.Sentence(text)
    flair_sentiment.predict(s)
    total_sentiment = s.labels
    return str(total_sentiment[0]).split()
print ( flair_sentiment_analysis('You are awesome.') )
##OUTPUT = ('POSITIVE', '0.9868430495262146')

Точность Flair, (набор данных)

##SAME AS ABOVE##
for i in range(1,int(nrows)):
        text = sheet.row_values(i)[0].strip()
        input_sentiment = sheet.row_values(i)[1].strip()
        output_sentiment = flair_sentiment_analysis(text)
        if input_sentiment.lower() in output_sentiment[0].lower():
            correct_count = correct_count + 1
print("Accuracy:", str((correct_count/nrows)*100),'%' )
###OUTPUT: Accuracy: 45.07%

Изимл

Я был действительно впечатлен EazyML и искренне верю, что онобеспечивает самую современную производительность для анализа тональности/классификации текста.Почему EazyML так важен для НЛП? Это уникальная платформа машинного обучения с графическим интерфейсом и интерфейсом API, которая обеспечивает множество функций, таких как извлечение концепций, анализ настроений и мощный процесс автоматизации для применения машинного обучения к реальным проблемам. Чтобы попробовать EazyML, нажмите здесь.

Позвольте мне показать вам, как просто начать работу с EazyML!

Во-первых, получите свой auth_token (здесь)!.

import json
import requests
auth_token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiIzYTE5M2ZjMS03MWU3LTQ4YzMtYTViNC1hM2Q2NmRlOWUyNzIiLCJleHAiOjE1ODkxODk3MzIsImZyZXNoIjpmYWxzZSwiaWF0IjoxNTg5MTAzMzMyLCJ0eXBlIjoiYWNjZXNzIiwibmJmIjoxNTg5MTAzMzMyLCJpZGVudGl0eSI6ImFwcF9kZW1vIn0.mxzl7PqVPdLD7bUGsb04g-PoGP7iOyL3_ROTtkcTCws'
def EazyML_sentiment_analysis(text, options, auth_token):
     APP_REQUEST_URL = "https://development.eazyml.com/ez_app/ez_sentiments"
     
     payload = { "text": text, "options": options }
     
     headers = { "Content-Type": "application/json",
                 "Authorization": "Bearer " + str(auth_token),
               }
     response = requests.request( "POST", APP_REQUEST_URL, headers = headers, data = json.dumps(payload))
     try:
        response_json = response.json()
        return response_json["dataframe"]["data"][0]
    except Exception as e:
        print (e)
        return None
print ( EazyML_sentiment_analysis('You are awesome.','',auth_token))
##OUTPUT = ['You are awesome.', 0.9107961537401248]

Посетите https://eazyml.com/appdocs для получения более глубоких знаний.

Точность EazyML подтверждает его современный статус (набор данных)

##SAME AS ABOVE##
auth_token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiIzYTE5M2ZjMS03MWU3LTQ4YzMtYTViNC1hM2Q2NmRlOWUyNzIiLCJleHAiOjE1ODkxODk3MzIsImZyZXNoIjpmYWxzZSwiaWF0IjoxNTg5MTAzMzMyLCJ0eXBlIjoiYWNjZXNzIiwibmJmIjoxNTg5MTAzMzMyLCJpZGVudGl0eSI6ImFwcF9kZW1vIn0.mxzl7PqVPdLD7bUGsb04g-PoGP7iOyL3_ROTtkcTCws'
for i in range(1,int(nrows)):
    try:
        text = sheet.row_values(i)[0].strip()
        input_sentiment = sheet.row_values(i)[1].strip()
        output_sentiment = EazyML_sentiment_analysis(text,'',auth_token)
        if output_sentiment[1] > 0.65:
            result_sentiment = 'Positive'
        elif output_sentiment[1] < 0.35:
            result_sentiment = 'Negative'
        else:
            result_sentiment = 'Neutral'
        if str(input_sentiment) == str(result_sentiment):
            correct_count = correct_count + 1
    except Exception as e:
        print (e)
print("Accuracy:", str(correct_count*100/nrows),'%' )
###OUTPUT: Accuracy: 66%

Вывод

После моего анализа расширений я бы сказал, что EazyML превзошел все другие инструменты анализа настроений. Я бы посоветовал вам попробовать запустить код самостоятельно. Ссылки на все полезные ресурсы я указал в справочнике. Я буду публиковать больше статей по мере того, как мой путь в НЛП продолжается. Так что следите за обновлениями и до следующего раза, удачного кодирования!!

Справочник







https://textblob.readthedocs.io/en/dev/