В своем последнем посте я использовал библиотеку с открытым исходным кодом spacy, чтобы делать прогнозы на основе анализа настроений. В этом посте я намерен делать прогнозы для того же набора данных, используя средства обработки естественного языка sklearn, NLP. Причина, по которой я делаю прогнозы на одном и том же наборе данных, заключается в том, что я хотел бы провести сравнительную проверку, чтобы увидеть, какой алгоритм работает лучше всего. Мой последний пост об анализе настроений, в котором я делал прогнозы с использованием spacy, можно найти по адресу :- https://medium.com/mlearning-ai/conduct-a-twitter-sentiment-analysis-test-using-spacy-7715db4b2c97

Sklean имеет свои собственные функции для анализа настроений, в данном случае это TfIdfVectorizer. TfIdfVectorizer преобразует набор необработанных документов в матрицу функций tf-idf. Tf-idf расшифровывается как «термин частотно-обратная частота документа» и представляет собой метод количественного определения слова в документах. Вычисляется вес каждого слова, что означает важность слова в корпусе документа. Этот метод широко используется в интеллектуальном анализе текста и поиске информации.

Набор данных Sentiment Analysis, который будет использоваться в этой сравнительной проверке, можно найти здесь: https://www.kaggle.com/arkhoshghalb/twitter-sentiment-analysis-hatred-speech.

Поскольку набор данных был сохранен в каталоге Kaggle, я решил написать программу в бесплатном онлайн-блокноте Kaggle Jupyter Notebook, который освобождает много места на моем ноутбуке.

Постановку задачи для этого проекта можно найти на снимке экрана ниже:

Когда я создал скрипт, мне пришлось сначала импортировать библиотеки, которые мне понадобятся для его выполнения. Библиотеки, которые я изначально импортировал, были numpy, pandas, matplotlib, seaborn и os. Numpy создает массивы и выполняет алгебраические вычисления, pandas создает кадры данных и манипулирует ими, os переходит в операционную систему, а matplotlib и seaborn отображают точки данных на графиках.

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

По мере развития программы я продолжал импортировать другие библиотеки, такие как sklearn, nltk, re, collections и itertools. Sklearn содержит множество разнообразных функций машинного обучения Python, nltk — это набор инструментов для работы с естественным языком, повторно проверяет, соответствует ли заданная строка другой строке, а коллекции и itertools выполняют подсчет словесных процессов:

Как только файлы csv были загружены в программу, я использовал pandas для их чтения и преобразования в фреймы данных:

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

Я определил переменную, метку, а затем удалил ее из кадра данных поезда: -

Когда метка была удалена из кадра данных поезда, я добавил тест для обучения, чтобы сформировать один большой кадр данных, комби: -

Я определил переменную tweets и поместил в нее столбец tweet:

Затем я использовал библиотеки re и nltk для очистки текста до того, как он был предсказан.

Все слова были переведены в нижний регистр.

Из текста убрали спецсимволы и хештеги.

Все слова меньше двух символов удалялись.

И, наконец, из твитов были удалены стоп-слова:

Я решил удалить 25 часто используемых слов, потому что они мало что значат в прогнозах:

Я также удалил редкие слова из твитов, потому что по ним нельзя делать прогнозы:

Именно в этот момент, когда твиты были полностью предварительно обработаны, я определил независимую и зависимую переменные, такие как X и y соответственно. Переменная X состоит из твитов, а переменная y — это ярлык.

Затем я использовал функцию sklearn train_test_split, чтобы разделить переменные X и y на наборы данных для обучения и проверки:

Именно в этот момент я использовал TdidfVectorizer sklearn для преобразования слов в векторы.

Затем я выбрал модель и, поскольку я выполнял сравнительную проверку между spacy и sklearn, я использовал ту же модель, что и с spacy-алгоритмом, sklearn LogisticRegression. Я набрал 93%, используя этот алгоритм: -

Затем я сделал прогнозы на проверочном наборе и также набрал 93%:

Как только предсказания были завершены, я смог сравнить два алгоритма, spacy или sklearn. Я обнаружил, что точность spacy примерно на 1% выше, чем у sklearn, так что, возможно, эту библиотеку лучше использовать при работе с НЛП.

Код для этого сообщения можно полностью найти в моей личной учетной записи Kaggle, ссылка находится здесь: https://www.kaggle.com/tracyporter/twitter-sentiment-analysis-sklearn?scriptVersionId=7506441