Привет, любители данных!

☞Запись в блоге на этой неделе — начало моей серииНЛП.

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

Это первая часть моей серии НЛП из пяти частей, и сегодня мы начнем с Анализа настроений!

К концу этого поста у вас будет всестороннее понимание техники NLP, анализа настроений, ее сильных и слабых сторон, а также того, как применять ее в реальных сценариях с несколькими примерами кода.

Введение

Обработка естественного языка, также известная как НЛП, – это область ИИ, связанная с взаимодействием между компьютерами и человеческими языками. Основная цель НЛП — разработать алгоритмы и модели, которые могут понимать, интерпретировать и даже генерировать человеческий язык. NLP — это необходимое приложение для создания интеллектуальных систем, которые могут понимать и обрабатывать человеческий язык, например, распознавание речи, машинный перевод и обобщение текста. Вы слышали о ChatGTP? Этот мощный чат-бот использует силу НЛП!

Итак, без лишних слов, давайте приступим!

☺︎Анализ настроений ☹︎

Анализ настроений, также широко известный как анализ мнений, представляет собой использование обработки естественного языка, анализа текста и компьютерной лингвистики для выявления и извлечения субъективной информации из исходных материалов. .

Цель анализа тональности — определить отношение, мнения и эмоции говорящего или пишущего по отношению к какой-либо теме или общему контексту. полярность документа. Лично я являюсь поклонником методов анализа настроений, основанных на глубоком обучении, но есть и другие методы, которые вы можете попробовать!

Существуют различные методы анализа тональности:

Разберем каждый метод:

☞Методы на основе лексики основаны на использовании лексикона или словаря слов и связанных с ними тональностей. Эти методы часто опираются на уже существующие базы знаний, их можно быстро и легко внедрить, но они могут быть не в состоянии точно обрабатывать саркастические замечания или более сложные формы языка. Это связано с тем, что при таком подходе обычно не учитывается конкретный контекст слова.

☞Методы, основанные на машинном обучении(такие как наивный байесовский метод, метод опорных векторов, случайный лес, RNN)используют набор данных, помеченный настроением (положительным, отрицательным, нейтральным) для обучения модель для классификации новых примеров текста. Эти методы обеспечивают большую точность и позволяют обрабатывать более сложные случаи по сравнению с лексиконом. Однако для правильной работы этих методов может потребоваться большой объем размеченных данных.

☞Методы глубокого обучения, такие как нейронные сети, можно использовать для моделирования более сложных представлений текста, что делает их полезными для обработки более естественного языка и контекста. Как правило, для правильной работы им требуется большой объем размеченных данных, и они требуют больших вычислительных ресурсов. Вы можете найти больше информации об этом сложном методе в этой полезной статье Джейсона Браунли, которая также включает полезные примеры кода: Глубокая сверточная нейронная сеть для анализа настроений.

Я настоятельно рекомендую ознакомиться с разделом Документы с кодом и просмотреть документы по анализу тональности/примеры кода. Это мойсамый любимый веб-сайт для проектного/исследовательского обучения☑ (на мой взгляд, один из лучших видов обучения!)

Анализ настроений — примеры кода

↓Вот три примера кода с использованием анализа настроений с использованием NLTK, sklearn, PyTorch и Transformers.

Простой пример кода с использованием Natural Language Toolkit (NLTK)

import nltk
from nltk.sentiment import SentimentIntensityAnalyzer

# Download the vader_lexicon
nltk.download('vader_lexicon')

# Create an instance of the sentiment intensity analyzer
sen_int_analyze = SentimentIntensityAnalyzer()

# provide a sentence or document for analysis
text = "This is an absolutely brilliant movie! I highly recommend it to everyone."

# get the sentiment scores
sentiment_scores = sen_int_analyze.polarity_scores(text)

# print the scores
print(sentiment_scores)

Наш вышеприведенный код выведет словарь, содержащий оценки настроений для предоставленного текста. Словарь будет содержать четыре ключа: «neg», «neu», «pos» и «compound». Они представляют отрицательную, нейтральную, положительную и общую (составную) оценку настроений соответственно.

# Output 
# accuracy outputs that this sentence is not a negative sentiment
{'neg': 0.0, 'neu': 0.556, 'pos': 0.444, 'compound': 0.8008}

Баллы представляют собой значения от -1 до 1, где -1 — самый отрицательный балл, а 1 — самый положительный балл. Составной балл — это общая тональность текста, также в том же диапазоне от -1 до 1. В этом примере составной балл равен 0,8249, что является очень положительным показателем, и мы можем видеть, что утверждение действительно положительное. чувство.

Вы также можете проанализировать список текстов и выполнить более сложные операции с данными и визуализацию на выходе. Но имейте в виду, что это очень простой пример, и есть много других предварительно обученных моделей, а также вы можете создать свою собственную модель с большим размеченным набором данных, если предварительно обученные модели не дают точных результатов для вашего конкретного использования. случай.

Подробный пример кода

# Import Libraries
import numpy as np
import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split

# load the Book Reviews dataset
book_train = pd.read_csv("bookTrain.csv")
text_train = book_train.drop('target_variable', axis=1)
y_train = book_train['target_variable']

# create a count vectorizer object
# min_df -> When building the vocabulary ignore terms that have a document frequency strictly lower than the given threshold.
# ngram_range -> The lower & upper boundary of the range of n-values for different word n-grams or char n-grams to be extracted. 
vectorizer = CountVectorizer(min_df=5, ngram_range=(1, 2)) 

# fit & transform the train data
X_train = vectorizer.fit_transform(text_train)

# create a logistic regression object
classifier = LogisticRegression()

# fit the model to the train data
classifier.fit(X_train, y_train)

# load the test dataset
book_test = pd.csv("bookTest.csv")
text_test = book_test.drop('target_variable', axis=1)
y_test = book_test['target_variable']

# transform the test data
X_test = vectorizer.transform(text_test)

# predict the sentiment of the test data
y_pred = classifier.predict(X_test)

# evaluate the accuracy of the model
accuracy = accuracy_score(y_test, y_pred)

print("Accuracy: {:.2f}%".format(accuracy * 100))

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

Затем, используя класс CountVectorizer, текстовые данные преобразуются в представление набора слов, которое представляет собой разреженную матрицу, где каждая строка представляет документ, а каждый столбец представляет слово. Слова выбираются на основе их частоты и сочетания двух слов (биграммы) и не менее 5 появления в наборе данных.

Кроме того, классификатор логистической регрессии обучается на обучающих данных с использованием метода fit. Эта модель учится предсказывать настроение отзывов на основе слов, которые в них появляются.

Наконец, наша модель затем делает прогнозы на основе тестовых данных, и точность классификатора рассчитывается как наш результат.

PyTorch + Transformers — пример кода

import torch
from transformers import BertTokenizer, BertForSequenceClassification

# Load the BERT model & tokenizer
MyModel = BertForSequenceClassification.from_pretrained("bert-base-uncased")
tokenizer = BertTokenizer.from_pretrained("bert-base-uncased")

# Test some sample text
text =  "Ashley helps people who want to learn about data science 
        in a fun and accessible way!"
# Encode the text into BERT input format
input_ids = torch.tensor(tokenizer.encode(text)).unsqueeze(0)  # Batch size 1

# Get the model's predicted sentiment
output = MyModel(input_ids)
x, sentiment = output[0].max(dim=1)

print("Sentiment: ", "Positive" if sentiment.item() == 1 else "Negative")

Приведенный выше код (первоначально выполнение которого занимает несколько минут) загружает предварительно обученную модель BERT и токенизатор из библиотеки трансформеров и использует их для анализа тональности моего примера текста. . Текст:

  • Сначала закодировано во входной формат BERT с помощью токенизатора
  • затем прошел через указанную нами модель
  • Наконец, предсказанная модель настроений извлекается и распечатывается.

В приведенном выше примере предполагается, что задача классификации настроений является задачей бинарной классификации с двумя метками: положительной и отрицательной. Вы можете изменить эти метки в зависимости от вашего конкретного набора данных!

Заключение

Подведем итоги:

Анализ тональности может быть мощным инструментом, который может помочь предприятиям и организациям получать ценную информацию из текстовых данных. Эта область постоянно развивается благодаря новым разработкам и достижениям в НЛП, и будущее выглядит многообещающим. С увеличением объема текстовых данных, генерируемых каждый день, потребность в инструментах анализа тональности будет продолжать расти, что делает их ценным навыком в современном мире, управляемом данными.

На этом пока все, любители данных! Увидимся на следующей неделе во второй части, где я расскажу все о ➡ Распознавании именованных объектов.

Ссылки и рекомендуемые ресурсы:

Papers With Code: Опять же, я не могу рекомендовать этот веб-сайт в достаточной степени. Это прекрасное место, чтобы начать исследовать НЛП и применить свои новые знания на практике с некоторой реализацией кода. Я знаю, что это может быть сложно! Приведены сотни примеров кода, которые дадут вам отличное представление о том, как эти методы реализуются более сложными способами — попробуйте сами, и вы, возможно, будете удивлены. насколько больше вы узнаете из реализации кода, основанного на исследованиях☺︎

Глубокая сверточная нейронная сеть для анализа настроений (классификация текста) от Джейсона Браунли: В этой фантастической статье Джейсон рассказывает: Как подготовить текстовые данные обзора фильма для классификации с помощью методов глубокого обучения, чтобы изучить встраивание слова как часть подбора модель глубокого обучения, как изучить автономное встраивание слов и как использовать предварительно обученное встраивание в модель нейронной сети.

Как всегда, мы очень ценим ваши отзывы! Я читаю каждый комментарий и постоянно работаю над улучшением своего контента и исследований. Я хотел бы сотрудничать с другими в этой области! Пожалуйста, не стесняйтесь обращаться ко мне по адресу [email protected] или связаться с LinkedIn https://www.linkedin.com/in/ashleyeastman/ или Instagram @ashleybee.tech

— Эшли