Вступление
Современные технологии НЛП позволяют нам анализировать естественные языки на разных уровнях: от простой сегментации текстовой информации до более сложных методов категоризации настроений.
Однако это не обязательно означает, что вы должны быть очень продвинутыми в программировании для реализации высокоуровневых задач, таких как анализ тональности в Python.
Анализ настроений
Алгоритмы анализа настроений в основном сосредоточены на определении мнений, отношений и даже смайлов в корпусе текстов. Диапазон устоявшихся настроений значительно варьируется от одного метода к другому. В то время как стандартный анализатор определяет до трех основных полярных эмоций (положительную, отрицательную, нейтральную), пределы более продвинутых моделей шире.
Следовательно, они могут смотреть за пределы полярности и определять шесть «универсальных» эмоций (например, гнев, отвращение, страх, счастье, печаль и удивление):
[Источник: Spectrum Mental
Health.]{.small}
Более того, в зависимости от задачи, над которой вы работаете, также можно собрать дополнительную информацию из контекста, например об авторе или теме, которая при дальнейшем анализе может предотвратить более сложную проблему, чем обычная классификация полярностей, а именно субъективность / объективность. идентификация.
Например, это предложение от Business Insider: «В марте Илон Маск описал обеспокоенность по поводу вспышки коронавируса как« панику »и« тупой », и с тех пор он опубликовал в Твиттере неверную информацию, такую как его теория о том, что дети« практически неуязвимы ». вирус." выражает субъективность через личное мнение Э. Маска, а также автора текста.
Анализ тональности в Python с помощью TextBlob
Подход, который пакет TextBlob применяет к анализу тональности, отличается тем, что он основан на правилах и, следовательно, требует заранее определенного набора категоризированных слов. Эти слова можно, например, загрузить из базы данных NLTK. Более того, тональность определяется на основе семантических отношений и частоты каждого слова во входном предложении, что позволяет в результате получить более точный результат.
После того, как первый шаг выполнен и модель Python снабжена необходимыми входными данными, пользователь может получить оценки настроения в форме полярности и субъективности, которые обсуждались в предыдущем разделе. Мы можем увидеть, как этот процесс работает, в этой статье Forum Kapadia :
{.ezlazyload}
Вывод TextBlob для задачи полярности - это число с плавающей запятой
в диапазоне [-1.0, 1.0]
где -1.0
- отрицательная полярность, а 1.0
- положительная. Эта оценка также может быть равна
0
, что означает нейтральную оценку утверждения, поскольку оно не содержит слов из обучающего набора.
Принимая во внимание, что задача идентификации субъективности /
объективности сообщает о поплавке в диапазоне [0.0, 1.0]
где 0.0
-
очень объективное предложение, а 1.0
- очень субъективное.
Существуют различные примеры взаимодействия Python с анализатором настроений TextBlob: начиная с модели, основанной на различных наборах данных Kaggle (например, обзоры фильмов), до расчета настроений к твитам через API Twitter.
Но давайте посмотрим на простой анализатор, который мы могли бы применить к конкретному предложению или короткому тексту. Сначала начнем с импорта библиотеки TextBlob:
# Importing TextBlob
from textblob import TextBlob
После импорта мы загрузим предложение для анализа и TextBlob
экземпляр
объекта TextBlob, а также sentiment
нашему собственному analysis
:
# Preparing an input sentence
sentence = '''The platform provides universal access to the world's best education, partnering with top universities and organizations to offer courses online.'''
# Creating a textblob object and assigning the sentiment property
analysis = TextBlob(sentence).sentiment
print(analysis)
Свойство sentiment
- это namedtuple
формы
Sentiment(polarity, subjectivity)
.
Где ожидаемый результат анализа:
Sentiment(polarity=0.5, subjectivity=0.26666666666666666)
Более того, также возможно получить результаты полярности или субъективности отдельно, просто выполнив следующее:
from textblob import TextBlob
# Preparing an input sentence
sentence = '''The platform provides universal access to the world's best education, partnering with top universities and organizations to offer courses online.'''
analysisPol = TextBlob(sentence).polarity
analysisSub = TextBlob(sentence).subjectivity
print(analysisPol)
print(analysisSub)
Что даст нам результат:
0.5
0.26666666666666666
Одна из замечательных особенностей TextBlob заключается в том, что он позволяет пользователю выбирать алгоритм для реализации высокоуровневых задач НЛП:
PatternAnalyzer
- классификатор по умолчанию, построенный на библиотеке паттернов.NaiveBayesAnalyzer
- модель NLTK, обученная на корпусе обзоров фильмов
Чтобы изменить настройки по умолчанию, мы просто укажем в NaiveBayes
анализатор NaiveBayes. Давайте проведем анализ настроений твитов прямо
из Twitter :
from textblob import TextBlob
# For parsing tweets
import tweepy
# Importing the NaiveBayesAnalyzer classifier from NLTK
from textblob.sentiments import NaiveBayesAnalyzer
После этого нам нужно установить соединение с Twitter API через ключи API (которые вы можете получить через учетную запись разработчика ):
# Uploading api keys and tokens
api_key = 'XXXXXXXXXXXXXXX'
api_secret = 'XXXXXXXXXXXXXXX'
access_token = 'XXXXXXXXXXXXXXX'
access_secret = 'XXXXXXXXXXXXXXX'
# Establishing the connection
twitter = tweepy.OAuthHandler(api_key, api_secret)
api = tweepy.API(twitter)
Теперь мы можем проводить анализ твитов на любую тему. Искомое слово (например, блокировка ) может состоять как из одного слова, так и из нескольких. Более того, эта задача может занять много времени из-за огромного количества твитов. Рекомендуется ограничить вывод:
# This command will call back 5 tweets within a “lockdown” topic
corpus_tweets = api.search("lockdown", count=5)
for tweet in corpus_tweets:
print(tweet.text)
Результат этого последнего фрагмента кода вернет пять твитов, в которых упоминается искомое слово в следующей форме:
[email protected] : How Asia's densest slum contained the virus and the economic catastrophe that stares at the hardworking slum population...
Последним шагом в этом примере является переключение модели по умолчанию
на анализатор NLTK, который возвращает свои результаты в виде
namedtuple
в форме: Sentiment(classification, p_pos, p_neg)
:
# Applying the NaiveBayesAnalyzer
blob_object = TextBlob(tweet.text, analyzer=NaiveBayesAnalyzer())
# Running sentiment analysis
analysis = blob_object.sentiment
print(analysis)
Наконец, наша модель Python даст нам следующую оценку настроения:
Sentiment(classification='pos', p_pos=0.5057908299783777, p_neg=0.49420917002162196)
Здесь он классифицирует это как положительное мнение, p_neg
p_pos
и p_neg составляют ~ 0.5
каждое.
Заключение
В этой статье мы рассмотрели, что такое анализ тональности, после чего использовали библиотеку TextBlob для выполнения анализа тональности импортированных предложений, а также твитов.