Введение
В настоящее время компании хотят понять, что пошло не так с их последними продуктами? Что пользователи и общественность думают о последней функции? Вы можете количественно оценить такую информацию с хорошей точностью, используя анализ тональности. Анализ настроений — это проблема построения моделей, которые могут классифицировать документ/текст как отрицательный, положительный и нейтральный. Сентимент — это суждение о чувствах, которое генерируется из текстов и используется в различных областях, таких как интеллектуальный анализ данных в Интернете и аналитика в социальных сетях.
Я хочу продемонстрировать, как существующие инструменты НЛП и пользовательские модели классификаторов текста (я использовал платформу 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 превзошел все другие инструменты анализа настроений. Я бы посоветовал вам попробовать запустить код самостоятельно. Ссылки на все полезные ресурсы я указал в справочнике. Я буду публиковать больше статей по мере того, как мой путь в НЛП продолжается. Так что следите за обновлениями и до следующего раза, удачного кодирования!!