web analytics

Анализ сентиментов в три этапа: использование функции quick_sentiments в Python.

Sztuczna Inteligencja (ИИ/AI)

Что если бы вы могли запустить полный, сквозной конвейер анализа настроений — от исходного текста до окончательного прогноза — всего за три простых шага? Именно для решения этой проблемы я и разработал свой новый пакет на Python, quick_sentiments . Он обрабатывает все сложные и трудоемкие задачи очистки текста, векторизации и машинного обучения «под капотом» , позволяя вам сосредоточиться на результатах, а не на рутинной работе.

Если вы создавали проект анализа настроений с нуля, вы знаете, с чего начать. Вам приходится одновременно импортировать библиотеки из nltk, scikit-learn и других, и вы надеетесь, что обновление библиотеки не нарушит вашу среду. quick_sentiments разработан для решения этой проблемы. Он абстрагирует процесс настройки, управляя всеми зависимостями и сложными вызовами функций за вас.

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

!pip install quick-sentiments 
#ИЛИ
 git clone https://github.com/AlabhyaMe/quick_sentiments.gitp

ШАГ 1: Предварительная обработка

Итак, перейдем к первому шагу: предварительной обработке. Прежде чем модель сможет понимать текст, его необходимо очистить. Это критически важный, но трудоемкий этап, включающий в себя целый ряд задач: удаление HTML-тегов, удаление эмодзи и знаков препинания, обработка стоп-слов, лемматизация и стандартизация регистра. Чистый текст — это необходимая основа для любой высококачественной векторизации и, в конечном итоге, для точной модели.

Как видно из примера, использование pre_processфункций невероятно просто.

import polars as pl 

#IMPORT pre_process from quick_sentiments 
from quick_sentiments import pre_process 

df_train = pl.read_csv( "yourpath.csv" ,encoding= 'ISO-8859-1' ) 
response_column = "reviewText" 
 sentiment_column = "sentiment" 

#USING pre_process
 df_train = df_train.with_columns( 
    pl.col(response_column).map_elements( lambda x: pre_process(x, remove_brackets= True )).alias( "processed" )   #add inside the map_elements
 )

Подумайте, что обычно требуется для очистки текста с нуля. Вам придётся импортировать reрегулярное выражение для обработки URL-адресов, ещё одно регулярное выражение для HTML-тегов, импортировать модуль nltkдля загрузки и инициализации списка стоп-слов, ещё один nltk модуль для лемматизатора… это долгая и утомительная настройка, которую приходится писать для каждого проекта.

quick_sentimentsЭтот инструмент сводит весь процесс к одной легко настраиваемой функции. Просто посмотрите на возможности управления, которые открываются сразу после установки:


def pre_process ( doc, 
                  remove_brackets = True , 
                  remove_urls = True , 
                  remove_html = True ,                   lemmatize = True ,                   remove_stop_words = True ,                   remove_nums = False , ... # и многое другое                   return_string = True ) : #КОД ДЛЯ ВСЕГО ЭТОГО НАПИСАНО ВАМИ ВНУТРИ ПАКЕТА.



                   


Вы также можете посмотреть код здесь .

Эта единственная функция представляет собой полный конвейер очистки. В нашем polarsпримере мы использовали значения по умолчанию, но специально установили remove_brackets=True. Что делать, если вашей конкретной задаче необходимо сохранять числа в тексте? Просто передайте remove_nums=False. Хотите пропустить этап лемматизации, чтобы ускорить процесс? lemmatize=False.

От нормализации символов Юникода и удаления эмодзи до токенизации и лемматизации — pre_processобрабатывает весь список задач одним простым и понятным вызовом.

Эта чистая, токенизированная строка теперь является идеальной основой для нашего следующего шага: векторизации.

ШАГ 2: Разделение данных, запуск векторизации, модели машинного обучения, точность.

Теперь перейдём к мощной части пакета quick_sentiments. После предварительной обработки остаётся «сложная середина» машинного обучения: разделение данных, векторизация, обучение модели и оценка. Именно здесь большинство проектов замедляются, и здесь вступает в действие функция run_pipeline() .

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

Вам нужно лишь предоставить данные, назвать столбцы и — что наиболее важно — выбрать эксперимент.

Хотите протестировать классический TF-IDF с помощью логистической регрессии? Или сразу перейти к 100-мерным эмбеддингам GloVe с использованием нейронной сети? Или пойти дальше и использовать 300-мерный Word2Vec? Просто спросите.

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

  • Методы векторизации ( vectorizer_name):
  • "bow"Мешок слов
  • "tf"Частота терминов
  • "tfidf": TF-IDF
  • "wv": Word2Vec (обучено на ваших данных) (Загрузится, если у вас его еще нет)
  • "glove_25""glove_50""glove_100""glove_200": Предварительно обученные эмбеддинги GloVe в различных измерениях
  • Модели машинного обучения ( model_name):
  • "logit": Логистическая регрессия
  • "rf": Случайный лес
  • "xgb": XGBoost
  • "nn"Простая нейронная сеть

Вся эта мощь заключена в одном простом вызове функции:

dt = run_pipeline( 
    vectorizer_name = "glove_25" , # BOW, tf, tfidf, wv, glove_25,glove_50, glove_100, gl0ve_200
     model_name = "logit" , # logit, rf, XGB, nn
     df = df_train, 
    text_column_name = "processed" ,   # это имя столбца текстовых данных,
     sentiment_column_name = "sentiment" , 
    perform_tuning = False  # установите значение true, если хотите выполнить настройку гиперпараметров, это займет больше времени и 
                            # может привести к нехватке памяти, если набор данных большой
 )

Код можно найти здесь .

#ЭТО ТО, ЧТО возвращает run_pipeline. Это важно для прогнозирования.     
return { 
        "model_object" : trained_model_object, 
        "vectorizer_name" : vectorizer_name, 
        "vectorizer_object" : fitted_vectorizer_object, 
        "label_encoder" : label_encoder, 
        "y_test" : y_test, 
        "y_pred" : y_pred, 
        "accuracy" : accuracy_score(y_test, y_pred), 
        "report" : classification_report(y_test, y_pred, output_dict= True , target_names=label_encoder.classes_) 
    }

Ещё одна ключевая особенность функции run_pipeline заключается не только в том, что она делает, но и в том, что она вам возвращает. После завершения функция возвращает единый, мощный словарь Python, содержащий все ваши обученные «артефакты».

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

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

Но как насчет прогнозирования на совершенно новых данных? Именно здесь quick_sentiments упрощает следующий шаг. Хотя вам, конечно, потребуется пропустить ваш новый необработанный текст через ту же функцию pre_process, вам не придется ничего переобучать. Объект «artifact», который возвращает run_pipeline, содержит все необходимые компоненты для мгновенного применения правильной векторизации и модели к вашим новым данным, обеспечивая согласованность всего процесса от начала до конца.

ШАГ 3: Результат — Прогнозирование на основе новых, ранее не встречавшихся данных

#ПРЕДВАРИТЕЛЬНАЯ ОБРАБОТКА НОВЫХ ДАННЫХ
 new_data = new_data.with_columns( 
    pl.col(response_column).map_elements( lambda x: pre_process(x, remove_brackets= True )).alias( "processed" )   #добавьте внутрь map_elements
 )

Мы успешно обучили и оценили модель на нашем наборе данных, и наша run_pipeline()функция вернула словарь Python (который мы сохранили как dt), содержащий все наши обученные «артефакты».

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

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

# Объект 'dt' — это словарь, возвращаемый вызовом run_pipeline()
 predictions_df = make_predictions( 
    new_data=new_data, 
    text_column_name= "processed" , 
    vectorizer=dt[ "vectorizer_object" ], 
    best_model=dt[ "model_object" ], 
    label_encoder=dt[ "label_encoder" ], 
    prediction_column_name= "sentiment_predictions"   # Вы можете присвоить имя выходному столбцу
 )

Что происходит «под капотом»?

Именно в этом одном make_predictions()вызове проявляется вся мощь конвейера. Давайте рассмотрим аргументы, чтобы понять, почему он так надежен:

  • vectorizer=dt["vectorizer_object"]Вы передаете фактический обученный векторизатор , созданный на ваших данных.
  • best_model=dt["model_object"]Вы передаете фактически обученную модель .
  • label_encoder=dt["label_encoder"]Вы передаете в качестве входных данных кодировщик меток , чтобы правильно сопоставить выходные данные с вашими исходными метками (например, «положительный», «отрицательный»).

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

Как? Передавая подобранные детали , вы исключаете возможность ошибки. Вам не о чем беспокоиться:

  • «Я случайно перенастроил векторизатор под новые данные?»
  • «Использую ли я те же самые данные ngram_rangemax_featuresчто и для обучения?»
  • «Использую ли я модель с наилучшими гиперпараметрами или только с параметрами по умолчанию?»

Эта make_predictions()функция гарантирует, что ваши новые данные будут обработаны точно таким же, согласованным способом, как и исходные обучающие данные. Риск ошибки здесь сводится к нулю, поскольку вся сложная работа выполняется за вас «под капотом».

Таким образом, у вас появляется новый фрейм данных с новым столбцом прогнозов. Всего за три основных шага — pre_process()run_pipeline(), и make_predictions()— мы завершили весь процесс анализа настроений, от исходного текста до реальных, надежных прогнозов.

Полный исходный код можно найти по адресу: https://github.com/AlabhyaMe/quick_sentiments

Источник:
https://alabhya.medium.com/sentiment-analysis-in-3-steps-using-quick-sentiments-in-python-8350abe35a32

Оцените статью
( Пока оценок нет )

Добавить комментарий