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

Введение

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

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

(Примечание. – Исходная статья была опубликована на Analytics Vidhya – крупнейшей в Индии платформе сообщества специалистов по данным. Вы можете ознакомиться со статьей, нажав здесь)

Оглавление:

  1. Что такое тематическое моделирование?
  2. Приложения тематического моделирования
  3. Что такое классификация настроений — контролируемая классификация?
  4. Различия между тематическим моделированием и контролируемой классификацией настроений
  5. Практическая реализация проекта: Тематическое моделирование и классификация настроений с использованием Python
  6. Заключение

Что такое тематическое моделирование?

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

Кроме того, мы изучим различные методы тематического моделирования, которые используются в отрасли. в основном доступны два типа методов тематического моделирования.

  1. Традиционное тематическое моделирование
  2. Нейронное тематическое моделирование

Давайте рассмотрим традиционные методы тематического моделирования и их применение в отраслях.

Традиционное тематическое моделирование

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

В методах матричной факторизации у нас есть модель Неотрицательная матричная факторизация (NNMF), а в статистических и вероятностных методах у нас есть Скрытое распределение Дирихле (LDA)

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

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

Использование показателя согласованности для измерения эффективности модели LDA

Метрика согласованности используется для измерения того, насколько достаточно тем определено в данном текстовом корпусе. когда мы говорим о «согласованности». мы говорим о характеристиках сотрудничества между справочным корпусом и определенными темами.

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

Интуиция, стоящая за показателем согласованности тем

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

Мы рассмотрим реализацию метрики согласованности в разделе практической реализации проекта.

Нейронное тематическое моделирование

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

Доступны два типа методов тематического моделирования:

  1. Контекстуализированное тематическое моделирование. Оно включает контекстуализированные вложения из текстового корпуса, такие как слова и их близость, для лучшего охвата тем.
  2. BERTopic — использует предварительно обученную модель BERT для встраивания слов в текстовый корпус для извлечения тем из больших коллекций документов.

Приложения тематического моделирования

Теперь, когда мы узнали, что такое тематическое моделирование, давайте рассмотрим некоторые приложения тематического моделирования в промышленности.

  1. Маркетинг. Тематическое моделирование можно использовать для анализа отзывов и отзывов клиентов, чтобы выяснить их настроения, а также выявить новые тенденции в наборе данных.
  2. Здравоохранение. Тематическое моделирование можно использовать для анализа медицинских записей, выявления закономерностей и извлечения соответствующей информации.
  3. Юридическая информация. Тематическое моделирование можно использовать для анализа юридических документов, выявления ключевых проблем и извлечения соответствующей информации. Эта информация может помочь юристам подготовиться к рассмотрению дел, более эффективно проводить исследования и выявлять новые правовые тенденции.

Что такое классификация настроений — контролируемая классификация?

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

Различия между тематическим моделированием и контролируемой классификацией настроений

Одно из основных различий между моделированием тем и классификацией настроений заключается в самом методе обучения. Тематическое моделирование — это метод обучения без учителя, тогда как классификация настроений — это метод обучения с учителем.

Некоторые из преимуществ тематического моделирования:

  1. Нет необходимости маркировать большие текстовые документы
  2. Abel для выявления сходства сложных слов в одном документе
  3. Снижение стоимости моделирования и логических выводов

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

Практическая реализация проекта: Тематическое моделирование и классификация настроений с использованием Python

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

Тематическое моделирование с использованием библиотеки «gensim»

Сначала мы загрузим набор данных твитов о киберзапугивании. Набор данных помечен как "нет", "расизм" и"сексизм"категории. метки присваиваются в наборе данных как «0» для твитов без травли и «1» для твитов с травлей.

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

# importing python libraries
import pandas as pd
import gensim
import nltk
import pyLDAvis.gensim
from gensim.models.coherencemodel import CoherenceModel
from nltk.stem import WordNetLemmatizer
nltk.download('stopwords')

# read the dataset using read_csv method
df = pd.read_csv("twitter_parsed_dataset.csv")
df

# write down following helper function in your python environment
# stop word removal function
stopwrds = set(stopwords.words('english'))
def remove_stowords(text, cores=2):
    
    sample = text
    sample = sample.lower()
    sample = [word for word in sample.split() if not word in stopwrds]
    sample = ' '.join(sample)
    
    return sample

# lemmatization function
lemmatizer = WordNetLemmatizer()
def lemma_clean_text(text, cores = 1):
 
    sample = text
    sample = sample.split()
    sample = [lemmatizer.lemmatize(word.lower()) for word in sample]
    sample = ' '.join(sample)
    
    return sample

Как видно из выходных данных набора данных, столбец «Текст» представляет собой серию твитов с аннотациями и метками. в наборе данных более 16000 строк, поэтому маркировка каждого твита была бы дорогостоящей задачей, и это увеличивает стоимость проекта по науке о данных, что необходимо учитывать. в то время как тематическое моделирование не требует меток как таковых, поэтому оно экономит затраты компании-клиента на определение наиболее распространенных тем в наборе данных.

Давайте реализуем конвейер моделирования темы на следующем шаге:

# define pre-processing function to model topics based on annotation
def preprocess_topic(df, topic):
    """ Preprocessing function to model text data based on give topics.
    
    args:
    df = input dataframe
    topic = input topic "nonn", "sexism", or "racism"
    
    returns:
    corpus of words under given topic
    """
    corpus=[]
    # topic wise division
    if topic == 'none':
        for doc in ndf[ndf['Annotation'] == 'none']['cleaned_text']:
            stop_word_removal = remove_stowords(doc)
            lemmmatized_sample = lemma_clean_text(stop_word_removal)
            words = lemmmatized_sample.split()
            corpus.append(words)
            
    elif topic == 'sexism':
        for doc in ndf[ndf['Annotation'] == 'sexism']['cleaned_text']:
            stop_word_removal = remove_stowords(doc)
            lemmmatized_sample = lemma_clean_text(stop_word_removal)
            words = lemmmatized_sample.split()
            corpus.append(words)
                
    elif topic == 'racism':
        for doc in ndf[ndf['Annotation'] == 'racism']['cleaned_text']:
            stop_word_removal = remove_stowords(doc)
            lemmmatized_sample = lemma_clean_text(stop_word_removal)
            words = lemmmatized_sample.split()
            corpus.append(words) 
            
    return corpus  

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

(Примечание. Приведенный выше код берет очищенный текст с предварительно обработанным текстом из исходного фрейма данных. Я связал репозиторий кода в конце этой статьи с более подробной информацией.)

# corpus of the words
corpus = preprocess_topic(ndf, 'sexism')

# creat BOW model from corpus
dic=gensim.corpora.Dictionary(corpus)
bow_corpus = [dic.doc2bow(doc) for doc in corpus]

# create LDA model using gensim library
lda_model = gensim.models.LdaMulticore(bow_corpus,
                                   num_topics = 4,
                                   id2word = dic,
                                   passes = 10,
                                   workers = 2)

lda_model.show_topics()

Приведенный выше код сохраняет корпус текстов в объекте ‘corpus’ и создает словарь корпуса текстов. На следующем этапе мы вызываем объект LdaMulticore модуля gensim.models, чтобы смоделировать текстовые данные и создать 4 темы в обучающем наборе данных. наконец, мы можем вызвать 'lda_model.show_topics()', чтобы увидеть 4 темы.

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

Визуальная интерпретация результатов тематического моделирования

# visualizing the topics
def plot_lda_vis(lda_model, bow_corpus, dic):
    pyLDAvis.enable_notebook()
    vis = pyLDAvis.gensim.prepare(lda_model, bow_corpus, dic)
    return vis

plot_lda_vis(lda_model, bow_corpus, dic)

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

Расчет метрики согласованности модели

#  assessing coherenece metric of the model
from gensim.models.coherencemodel import CoherenceModel

topics = [['prophet', 'slavery', 'violence', 'fear'],
           ['people', 'religion', 'slave', 'hate', 'like'],
           ['like', 'murder', 'people', 'prophet'],
           ['war', 'humanity', 'religion', 'salon', 'world']]

# Coherence model
cm = CoherenceModel(topics=topics, 
                    texts=corpus,
                    coherence='c_v',  
                    dictionary=dic)

coherence_per_topic = cm.get_coherence_per_topic()
coherence_per_topic

--------------------------------[output]--------------------------------------
[0.24646713695437958,
 0.17976752238536964,
 0.32051023235616505,
 0.33402730347565524]

Чтобы рассчитать показатель согласованности нашей тематической модели, мы можем использовать функцию CoherenceModel модуля gensim.models.coherencemodel. установив параметры функции, как показано выше, мы можем получить оценку согласованности каждой темы в нашем корпусе. функция реализует конвейер показателей когерентности под капотом, который мы видели в предыдущем разделе. Теперь давайте визуализируем показатель согласованности каждой темы, используя библиотеку seaborn.

# plotting coherenece score
topics_str = [ '\n '.join(t) for t in topics ]
data_topic_score = pd.DataFrame( data=zip(topics_str, coherence_per_topic), columns=['Topic', 'Coherence'] )
data_topic_score = data_topic_score.set_index('Topic')

# plottinh using matplotlib heatmap
fig, ax = plt.subplots( figsize=(2,6) )
ax.set_title("Topics coherence\n $C_v$")
sns.heatmap(data=data_topic_score, annot=True, square=True,
            cmap='Reds', fmt='.2f',
            linecolor='black', ax=ax )
plt.yticks( rotation=0 )
ax.set_xlabel('')
ax.set_ylabel('')
fig.show()

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

Классификация тональности с использованием векторизации TF-IDF

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

X = ndf['correct_text']
y = ndf['oh_label']

# train and test split the dataset
X_trn, X_tst, y_trn, y_tst = train_test_split(X,y, random_state=42)

# tfidf object
tfidf = TfidfVectorizer(stop_words='english', ngram_range=(1,2), 
max_features=5000)

# Vectorization using iftdf
X_trn_vect = tfidf.fit_transform(X_trn)
X_tst_vect = tfidf.transform(X_tst)

# converting sparse dataframe into pandas dataframe
x_t1 = pd.DataFrame(X_trn_vect.toarray(),columns=tfidf.get_feature_names())
x_t2 = pd.DataFrame(X_tst_vect.toarray(),columns=tfidf.get_feature_names())

# applying MultinomialNB algorithms
clf = MultinomialNB()
clf.fit(x_t1, y_trn)
pred = clf.predict(x_t2)

# LOG LOSS of the model
print("logloss: %0.3f " % log_loss(y_tst.values, pred))

-------------------------------[Output]-------------------------------------
logloss: 8.241 

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

Затем набор данных разбивается на обучающие и тестовые данные с последующей векторизацией TF-IDF с использованием библиотеки sklearn. после этого мы используем мультиномиальный наивный байесовский классификатор для построения модели классификации и проверки ее на тестовом наборе данных.

Заключение

В заключение можно сказать, что тематическое моделирование и анализ тональности являются двумя важными методами обработки естественного языка, используемыми для анализа больших массивов текстов. Хотя оба метода используются для извлечения информации из текстовых данных, они различаются по своему подходу и целям. Анализ настроений — это метод, используемый для классификации настроений, выраженных в фрагменте текста, как положительных или отрицательных. Это достигается с помощью алгоритмов обучения с учителем, таких как наивный байесовский метод или метод опорных векторов. С другой стороны, тематическое моделирование — это метод, используемый для определения основных тем или тем в большом корпусе текста. Это достигается с помощью алгоритмов обучения без учителя, таких как скрытое распределение Дирихле (LDA). Тематическое моделирование полезно для таких приложений, как анализ контента, анализ тенденций и кластеризация документов. давайте посмотрим на ключевые выводы из этой статьи.

  1. Тематическое моделирование — это метод обучения без учителя для выявления закономерностей и взаимосвязей в данных.
  2. Анализ настроений ограничен определением полярности настроений, тогда как тематическое моделирование может идентифицировать сложные темы и подтемы в данных, что делает тематическое моделирование предпочтительным для анализа больших текстовых корпусов.
  3. Мы узнали о метрике согласованности для измерения производительности модели.
  4. Практическая реализация конвейера тематической модели с использованием библиотеки Python gensim.