Spam python что это
Мы собираемся использовать NLTK для обработки сообщений, WordCloud и matplotlib для визуализации и pandas для загрузки данных, NumPy для генерации случайных вероятностей для разделения поезда и теста.
2. Загрузка данных

Нам не требуются столбцы «Безымянный: 2», «Безымянный: 3» и «Безымянный: 4», поэтому мы удаляем их. Мы переименовываем столбец «v1» как «label», а «v2» как «message». «Ham» заменяется на 0, а «spam» заменяется на 1 в столбце «label». Наконец, мы получаем следующий кадр данных.

3. Поезд-тест Сплит
Чтобы протестировать нашу модель, мы должны разбить данные на набор данных поезд и тестовый набор данных. Мы будем использовать набор данных поезда t0 train модель, а затем он будет проверен на тестовом наборе данных. Мы будем использовать 75% набора данных в качестве набора данных для поезда, а остальные — в качестве тестового набора данных. Выбор этих 75% данных является равномерно случайным.

4. Визуализация данных
Давайте посмотрим, какие слова наиболее повторяются в спам-сообщениях! Мы собираемся использовать Wordcloud библиотека для этого.

Это приводит к следующему

Как и ожидалось, эти сообщения в основном содержат такие слова, как «БЕСПЛАТНО», «звонок», «текст», «рингтон», «выигрыш» и т. Д.
Точно так же Wordcloud сообщений ветчины выглядит следующим образом:

5. Обучение модели
Мы собираемся реализовать два метода: мешок слов и TF-IDF. Я объясню их один за другим. Давайте сначала начнем с Мешка слов.
предварительная обработка: Перед началом обучения мы должны предварительно обработать сообщения. Прежде всего, мы будем делать все символы в нижнем регистре. Это потому, что слова «бесплатный» и «бесплатный» означают одно и то же, и мы не хотим рассматривать их как два разных слова.
Затем мы маркируем каждое сообщение в наборе данных. Токенизация — это задача разбить сообщение на части и выбросить знаки препинания. Например:

Такие слова, как «идти», «идет», «идти» указывают на то же действие. Мы можем заменить все эти слова одним словом «идти». Это называется Мы собираемся использовать Портер Стеммер, который является известным алгоритмом stemming


Затем мы переходим к удалению стоп-слов. Стоп-слова — это те слова, которые встречаются чрезвычайно часто в любом тексте. Например, такие слова, как «’ »,« a »,« a »,« is »,« to »и т. Д. Эти слова не дают нам никакой информации о содержании текста. Таким образом, не должно иметь значения, удаляем ли мы эти слова для текста.
Необязательно: Вы также можете использовать n-граммы для повышения точности. На данный момент мы имели дело только с 1 словом. Но когда два слова вместе, значение полностью меняется. Например, «хорошо» и «не хорошо» противоположны по значению. Предположим, что текст содержит «не хорошо», лучше рассматривать «не хорошо» как один знак, а не «не» и «хорошо». Поэтому иногда точность повышается, когда мы разбиваем текст на токены из двух (или более) слов, а не только слова.

Мешок словВ модели мешка слов мы находим «частоту термина», то есть количество вхождений каждого слова в наборе данных. Таким образом, для слова w


TF-IDF: TF-IDF означает термин «частота, обратная частоте документа». В дополнение к Term Frequency мы вычисляем инверсную частоту документов.

Например, в наборе данных есть два сообщения. «Привет, мир» и «Привет, Foo Bar». TF («привет») — 2. IDF («привет») — журнал (2/2). Если слово встречается много, значит, оно дает меньше информации.
В этой модели каждое слово имеет оценку, которая равна TF (w) * IDF (w). Вероятность каждого слова считается как:


Аддитивное сглаживание: Так что, если мы встретим слово в тестовом наборе данных, которое не является частью набора данных поезда? В этом случае P (w) будет равно 0, что сделает P (спам | w) неопределенным (поскольку нам придется делить на P (w), что равно 0. Помните формулу?). Чтобы решить эту проблему, мы вводим аддитивное сглаживание. В аддитивном сглаживании мы добавляем число альфа к числителю и добавляем число раз альфа, в котором вероятность найдена в знаменателе.

При использовании TF-IDF

Это сделано для того, чтобы наименьшая вероятность любого слова теперь была конечным числом Добавление в знаменателе состоит в том, чтобы сделать итоговую сумму всех вероятностей слов в электронных письмах со спамом равной 1.
Когда альфа = 1, это называется сглаживанием Лапласа.
6. Классификация
Для классификации данного сообщения сначала мы его предварительно обработали. Для каждого слова w в обработанном сообщении мы находим произведение P (w | spam). Если w не существует в наборе данных train, мы принимаем TF (w) за 0 и находим P (w | spam), используя приведенную выше формулу. Мы умножаем этот продукт на P (спам). Результатом является P (спам | сообщение). Точно так же мы находим P (ham | message). Какая бы из этих двух вероятностей ни была выше, соответствующая метка (спам или хам) присваивается входному сообщению. Обратите внимание, что мы не делим на P (w), как указано в формуле. Это потому, что оба числа будут разделены на это, и это не повлияет на сравнение между ними.
7. Конечный результат

Ресурсы
- Dataset: https://www.kaggle.com/uciml/sms-spam-collection-dataset
- http://machinelearning.wustl.edu/mlpapers/paper_files/icml2003_RennieSTK03.pdf
- лексемизация: https://nlp.stanford.edu/IR-book/html/htmledition/tokenization-1.html
- Сдерживание: https://nlp.stanford.edu/IR-book/html/htmledition/stemming-and-lemmatization-1.html
- Стоп слова: https://nlp.stanford.edu/IR-book/html/htmledition/dropping-common-terms-stop-words-1.html
- https://www.youtube.com/watch?v=PrkiRVcrxOs
- Ссылка на код: https://github.com/tejank10/Spam-or-Ham
Пошаговая инструкция: создание спам-бота для Discord

Социальная платформа Дискорд позволяет пользователям общаться, играть и координировать действия в различных группах и сообществах. Вместе с тем, она также стала целью для различных мошенников и спамеров. В этой статье мы рассмотрим способы создания спам-бота для Дискорда.
Спам-бот – это программа или скрипт, которая автоматически отправляет большое количество сообщений или выполняет другие действия на платформе Дискорд. Он может быть использован для различных целей, от назойливой рекламы до массового распространения вредоносных ссылок или фейковых новостей. Создание спам-бота может быть весьма сложной задачей, но некоторые основные принципы мы рассмотрим в этой статье.
Важно отметить, что создание и использование спам-ботов является нарушением правил Дискорда и может привести к блокировке вашей учетной записи или даже правовым последствиям. Данная статья предоставляется исключительно в информационных целях и не призывает к использованию спам-ботов.
Одним из способов создания спам-бота для Дискорда является использование различных библиотек программирования, таких как Discord.js для JavaScript или discord.py для Python. Эти библиотеки позволяют вам взаимодействовать с API Дискорда и автоматизировать действия бота, включая отправку сообщений и управление каналами.
Кроме того, для создания спам-бота для Дискорда можно использовать различные онлайн-сервисы или программы, предназначенные специально для этой цели. Однако, важно помнить, что эти сервисы и программы зачастую незаконны и могут представлять угрозу для вашей учетной записи и компьютера.
Разработка спам-бота на Python
Создание спам-бота на Python для Дискорда может показаться сложной задачей, однако с использованием определенных инструментов и библиотек это становится возможным. Для разработки спам-бота на Python вам понадобятся:
- Python. У вас должна быть установлена последняя версия Python, чтобы начать разработку спам-бота.
- Библиотека Discord.py. Discord.py — это библиотека на языке Python, которая позволяет вам взаимодействовать с API Дискорда и разрабатывать ботов.
- Токен бота. Чтобы создать своего бота для Дискорда, необходимо зарегистрировать его на официальном сайте Дискорда и получить токен.
После установки Python и библиотеки Discord.py вы можете начать разработку спам-бота. Весь процесс разработки будет основан на использовании Discord.py и его функций. Первым шагом будет подключение вашего бота к серверу Дискорда:
import discord # Создание клиента Discord client = discord.Client() # Событие подключения бота к серверу Дискорда @client.event async def on_ready(): print('Бот успешно подключился к серверу!') # Запуск бота client.run('ваш_токен_бота')
После успешного подключения бота вы можете начать разрабатывать функции спама. Например, вы можете создать функцию, которая будет отправлять сообщение в определенный канал:
async def spam(channel_id, message, count): channel = client.get_channel(channel_id) for _ in range(count): await channel.send(message)
Данная функция будет отправлять сообщение, указанное в аргументе «message», в канал с заданным идентификатором «channel_id». Она будет выполняться «count» раз. Вы можете вызывать эту функцию в других функциях или в основном коде вашего бота, чтобы добиться нужного результата.
Кроме функции спама, вы также можете разрабатывать другие функции для управления ботом, например, функцию для отправки сообщений в определенное время или функцию для реагирования на определенные команды пользователей.
Важно помнить, что использование спам-ботов может нарушать правила использования Дискорда, и их разработка может быть незаконной. Перед разработкой спам-бота на Python убедитесь, что соблюдаете все правила и руководства Дискорда и не нарушаете приватность или безопасность других пользователей.
Использование API Дискорда для спама
API Дискорда предоставляет разработчикам возможность создавать ботов, которые могут автоматизировать различные задачи в платформе, включая отправку сообщений.
Однако, стоит отметить, что использование API Дискорда для спама является нарушением правил платформы и может привести к блокировке вашего аккаунта или даже правовым последствиям.
Если вы всё же решили создать спам-бота с использованием API Дискорда, есть несколько важных моментов, которые стоит учитывать:
1. Получение токена
Для работы с API Дискорда необходимо получить токен доступа. Токен предоставляет доступ к вашему аккаунту и должен быть обрабатывается с особой осторожностью, чтобы не попасть в руки злоумышленникам.
2. Ограничения API
API Дискорда имеет ряд ограничений для предотвращения злоупотреблений. Например, есть ограничение на количество сообщений, которое можно отправить в течение определенного периода времени. Превышение этих ограничений может привести к блокировке вашего аккаунта.
3. Разработка бота
Создание бота для спама включает в себя программирование на языке, который поддерживается API Дискорда, таком как Python, JavaScript и других. Вам понадобится изучить документацию и ознакомиться с примерами кода для создания спам-бота.
4. Этика использования
Необходимо всегда помнить о том, что спам является нежелательным и неправильным действием. Использование API Дискорда для спама может нанести вред другим пользователям и нарушает правила платформы. Рекомендуется использовать API для создания полезных и интересных ботов, которые будут приносить пользу сообществу.
Использование API Дискорда для спама является негативным и неправомерным действием, и не рекомендуется. Разработка полезных и этичных ботов будет намного более полезной для себя и других пользователей платформы.
Создание спам-бота с использованием библиотеки discord.js
Для создания спам-бота для Дискорда мы будем использовать библиотеку discord.js, которая предоставляет удобные инструменты для взаимодействия с API Дискорда.
Шаги по созданию спам-бота с использованием discord.js:
| Шаг 1: | Установите библиотеку discord.js с помощью команды npm install discord.js в командной строке. |
| Шаг 2: | Создайте новое приложение на сайте разработчика Дискорда и получите токен бота. |
| Шаг 3: | Создайте новый файл вашего бота и подключите библиотеку discord.js. |
| Шаг 4: | Создайте новый клиент discord.js и авторизуйте его с использованием токена вашего бота. |
| Шаг 5: | Добавьте обработчик событий ready и message, чтобы ваш бот реагировал на запуск и получение сообщений. |
| Шаг 6: | Добавьте логику для создания спама, например, можете использовать цикл для отправки сообщений в канале или перебирать участников сервера и отправлять им сообщения. |
| Шаг 7: | Запустите вашего бота с помощью команды node ваш_файл.js в командной строке. |
После завершения всех этих шагов вы получите работающего спам-бота для Дискорда, который будет отправлять сообщения в каналы или персональные сообщения участникам сервера.
Важно помнить, что создание и использование спам-бота может нарушать правила Дискорда и приводить к блокировке вашего аккаунта или сервера. Рекомендуется использовать бота только для легитимных целей и с согласия администрации сервера.
Изучение основных функций спам-ботов
1. Массовая рассылка сообщений: Спам-боты могут отправлять большое количество сообщений на различные серверы Discord или пользователям. Они могут использовать разные методы автоматизации, такие как циклы, чтобы отправлять сообщения в бесконечном цикле или использовать списки сообщений для массовой рассылки.
2. Повторение сообщений: Некоторые спам-боты могут повторять сообщения в чатах Discord с заданной периодичностью или после определенного события. Это может быть использовано для навязчивого или назойливого повторения определенного содержания.
3. Отправка нежелательных файлов: Спам-боты могут также отправлять нежелательные файлы, такие как вирусы, трояны или попытки фишинга, другим пользователям. Это может представлять опасность для безопасности и конфиденциальности получателя.
4. Создание фейковых аккаунтов: Спам-боты могут быть использованы для создания множества фейковых аккаунтов на Discord. Это может быть использовано для распространения спама, манипуляции с голосованием или фальшивых репутаций.
5. Взлом аккаунтов: Некоторые спам-боты могут использоваться для взлома аккаунтов пользователей Discord. После взлома аккаунта бот может отправлять спам сообщения от имени его владельца или получать доступ к конфиденциальным данным.
Изучение этих основных функций спам-ботов может помочь в защите от неблагонадежных пользователей и создания безопасной и устойчивой среды на платформе Discord.
РАСПОЗНАВАНИЕ СПАМ-СООБЩЕНИЙ С ИСПОЛЬЗОВАНИЕМ МЕТОДОВ МАШИННОГО ОБУЧЕНИЯ Текст научной статьи по специальности «Компьютерные и информационные науки»
машинное обучение / методы классификации / спам / векторы признаков / текст на естественном языке / Python / Weka / machine learning / classification methods / spam / feature vectors / natural language text / Python / Weka
Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Хаммасова Луиза Шамилевна, Нестеров Сергей Александрович
В работе решается задача классификации текстов с целью обнаружения спама . Использованы различные алгоритмы машинного обучения и подходы к предобработке входных данных: нормализация исходных данных путем разделения текста по униграммам и триграммам, векторизация в соответствии с моделями «мешка» слов и TF-IDF. В качестве программных средств для решения поставленной задачи выбраны Python и Weka . Полученные модели машинного обучения , протестированные на данных, независимых от обучающих наборов, дают высокую точность.
i Надоели баннеры? Вы всегда можете отключить рекламу.
Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Хаммасова Луиза Шамилевна, Нестеров Сергей Александрович
АНАЛИЗ ТОЧНОСТИ МОДЕЛЕЙ МАШИННОГО ОБУЧЕНИЯ С ИСПОЛЬЗОВАНИЕМ МЕТОДОВ ВЕКТОРИЗАЦИИ ДЛЯ ЗАДАЧ КЛАССИФИКАЦИИ РАЗНОРОДНЫХ ТЕКСТОВЫХ ДАННЫХ
КЛАССИФИКАЦИЯ НАУЧНЫХ ТЕКСТОВ ПО СПЕЦИАЛЬНОСТЯМ МЕТОДАМИ МАШИННОГО ОБУЧЕНИЯ
Выбор алгоритмов машинного обучения для классификации текстовых документов
ВЫБОР СИСТЕМЫ РОБОТИЗИРОВАННОЙ АВТОМАТИЗАЦИИ ПРОЦЕССОВ НА ПРОИЗВОДСТВЕ
Реализация эффективных моделей классификации медицинских данных методами интеллектуального анализа текстовой информации
i Не можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.
RECOGNITION OF SPAM MESSAGES USING MACHINE LEARNING METHODS
The paper describes the solution of the problem of text classification for spam detection. Various machine learning algorithms and approaches to preprocessing the input data were used: normalization of the initial data by dividing the text into unigrams and trigrams, vectorization using “bag of words” and TF-IDF models. Python and Weka were chosen as software tools for solving the problem. The machine learning models were tested on new data and provided high accuracy.
Текст научной работы на тему «РАСПОЗНАВАНИЕ СПАМ-СООБЩЕНИЙ С ИСПОЛЬЗОВАНИЕМ МЕТОДОВ МАШИННОГО ОБУЧЕНИЯ»
2. Юревич Е.И. Основы робототехники. — Л.: Машиностроение. Ленинградское отделение, 1985.
3. Корсункий В.А., Машков К.Ю., Наумов В.Н. Выбор критериев и классификация мобильных робототехнических систем на колесном и гусеничном ходу: Учебное пособие. — М.: МГТУ им. Н. Э. Баумана, 2014.
4. Корягин А. В. Образовательная робототехника Lego WeDo: Сборник методических рекомендаций и практикумов. — М.: ДМК Пресс, 2016.
5. Хиросэ Ш. Бионические роботы. Змееподобные мобильные роботы и манипуляторы / Шигео Хиросэ. — М.: Институт компьютерных исследований, 2014.
6. Тывес Л.И. Механизмы робототехники. Концепция развязок в кинематике, динамике и планировании движений. — М.: СИНТЕГ, 2014.
7. Потапова Р.К. Речевое управление роботом. Лингвистика и современные автоматизированные системы. — М.: Гостехиздат, 2012.
8. Краснова С.А. Блочный синтез систем управления роботами-манипуляторами в условиях неопределенности. — М.: Мир, 2014.
9. Информационные системы виртуальной реальности в мехатронике и робототехнике. Учебное пособие / Г.В. Алферов и др. — М.: Издательство СПбГУ, 2009.
Хаммасова Луиза Шамилевна \
Нестеров Сергей Александрович ,
доцент, канд. техн. наук, доцент
РАСПОЗНАВАНИЕ СПАМ-СООБЩЕНИЙ С ИСПОЛЬЗОВАНИЕМ МЕТОДОВ МАШИННОГО ОБУЧЕНИЯ
Санкт-Петербургский политехнический университет Петра Великого,
1 2 hammasova.lsh@edu.spbstu.ru, nesterov@spbstu.ru
Аннотация. В работе решается задача классификации текстов с целью обнаружения спама. Использованы различные алгоритмы машинного обучения и подходы к предобработке входных данных: нормализация исходных данных путем разделения текста по униграммам и триграммам, векторизация в соответствии с моделями «мешка» слов и TF-IDF. В качестве программных средств для решения поставленной задачи выбраны Python и Weka. Полученные модели машинного обучения, протестированные на данных, независимых от обучающих наборов, дают высокую точность.
Ключевые слова: машинное обучение, методы классификации, спам, векторы признаков, текст на естественном языке, Python, Weka.
Luiza S. Khammasova \
Sergey A. Nesterov ,
Candidate of Technical Sciences, Associate Professor
RECOGNITION OF SPAM MESSAGES USING MACHINE
‘ Peter the Great St. Petersburg Polytechnic University,
St. Petersburg, Russia, 1 2 hammasova.lsh@edu.spbstu.ru, nesterov@spbstu.ru
Abstract. The paper describes the solution of the problem of text classification for spam detection. Various machine learning algorithms and approaches to preprocessing the input data were used: normalization of the initial data by dividing the text into unigrams and trigrams, vectorization using «bag of words» and TF-IDF models. Python and Weka were chosen as software tools for solving the problem. The machine learning models were tested on new data and provided high accuracy.
Keywords: machine learning, classification methods, spam, feature vectors, natural language text, Python, Weka.
По данным Лаборатории Касперского [1] каждый год спам занимает примерно половину объема всего мирового почтового трафика. Сначала спам рассылался напрямую на единичные адреса пользователей, и его было легко блокировать. Со временем появились сложные системы массовой рассылки и высокоскоростные интернет-каналы, которые позволили быстро и дешево осуществлять рассылку спама.
В связи с этим были разработаны различные методы распознавания спам-сообщений. Обнаружение спама в электронной почте может быть выполнено как с использованием методов машинного обучения, так и с помощью других средств [2]. В представляемой работе используется подход, основанный на использовании алгоритмов машинного обучения для классификации текстов.
1. Постановка задачи и используемые алгоритмы
Пусть L= — множество писем электронной почты с метками (обычное письмо или спам), а U= — неразмеченное множество писем, где Ui соответствует i-му письму. Предполагается, что элементы L и U отличны друг от друга. Письмо представляется в виде вектора признаков, размерность которого равна размеру словаря V, xi=(xi1,xi2. xi|v|), где xij=1, если i-е письмо содержит j-е слово и xij=0 -иначе. На этих данных строится фильтр F: U—>, который классифицирует письмо как спам или реальное письмо.
Для классификации текстов в работе использовались следующие алгоритмы:
-упрощенный алгоритм Байеса [4] — вероятностный классификатор, основанный на теории Байеса с допущением о независимости признаков;
— метод опорных векторов (англ. support vector machine, SVM) [5], который строит в w-мерном пространстве признаков такую гиперплоскость, чтобы она разделяла объекты выборки наиболее точно;
— метод к ближайших соседей (англ. k-nearest neighbors, kNN) [6], суть которого заключается в том, что находятся к соседей, которые наиболее близко расположены к рассматриваемому объекту с неизвестной меткой. Далее новый объект относят тому классу, который является наиболее распространённым среди к соседей;
— многослойный персептрон (англ. multilayer perceptron, MLP) [7] — один из вариантов нейронной сети прямого распространения. Под процессом обучения нейронной сети понимается поиск таких значений весов и порогов сети, которые минимизирую ошибку. На основе собранных исторических данных веса и пороговые значения корректируются автоматически. В процессе корректировки происходит расчет ошибки путем вычисления выходных сигналов и сравнения их с целевыми.
2. Обзор данных и предобработка текста
В работе использовался набор данных Spam Email, опубликованный на платформе Kaggle [3]. В нем содержится 86,6 % реальных сообщений (4825 строк) и 13,4 % спама (747 строк), эти два вида сообщений перемешаны между собой. Для работы алгоритмов классификации требуется произвести нормализацию и векторизацию исходных сообщений, для чего использовался язык программирования Python и программная библиотека NLTK.
Нормализация текста включает в себя следующие действия:
1) приведение всех документов к нижнему регистру;
2) удаление слов, не содержащих смысловой информации;
3) удаление знаков пунктуации;
4) разбиение документов на токены; в работе для сравнения используются униграммы (токен состоит из одного слова) и триграммы (токен состоит из трех слов);
5) лемматизация текста, иными словами, приведение слова к начальной форме, учитывая морфологию слова.
Алгоритмы машинного обучения не имеют функционала для работы с текстом на естественных языках. По этой причине текст должен быть преобразован в числовые векторы. Распространенным методом извлечения признаков из текста является формирование множества, элементами которого являются отдельные слова, встречающиеся в тексте.
В качестве входных данных модели векторизации принимают токе-низированные текстовые данные, над ними могут производиться не все этапы нормализации. В случае использования «мешка» слов [9] вместо
токена обозначена его частота использования в отдельном документе. В случае TF-IDF — подсчитывается важность каждого токена в документах [9]. В работе используются следующие вариации векторизации:
1) модель «мешка слов», документы разбиты на униграммы (первый вариант);
2) модель «мешка слов», документы разбиты на триграммы (второй вариант);
3) модель TF-IDF, документы разбиты на униграммы (третий вариант);
4) модель TF-IDF, документы разбиты на триграммы (четвертый вариант).
3. Полученные результаты
Обучение проводилось на 70 % данных для всех алгоритмов классификации. Распределение происходило следующим образом: тренировочному набору соответствует первые 70 % документов, остальные 30 % документов относятся к тестовому набору.
Подбор параметров алгоритмов осуществлялся методом перебора. В итоге были использованы следующие параметры:
• в качестве классификатора для реализации алгоритма Байеса взят «MultinomialNB»;
• для алгоритма SVM использовалась линейная функция ядра;
• в алгоритме KNN для обучения было выбрано 3 «соседа»;
• в MLP было 2 скрытых слоя по 2 нейрона, функция активации скрытого слоя — «logistic», функция оптимизации весов «adam», постоянная скорость обучения.
В таблицах 1 и 2 представлены лучшие результаты для каждого метода, полученные с использованием Python с библиотекой Scikit-learn и WEKA соответственно. Для оценки моделей использовались следующие показатели (используются общепринятые англоязычные названия, т. к. перевод на русский может внести неоднозначность) [9]: accuracy, recall, precision, F1-score, specificity, time.
Результаты тестирования моделей, созданных ^ на Python _
Метод и харак- Accuracy Recall Precision F1_score Specificity Time
Метод Байеса, 0.967 0.973 0.988 0.98 0.93 3.1s
SVM, «мешок» 0.972 0.992 0.976 0.984 0.847 17.2s
KNN, TF-IDF, 0.949 0.983 0.959 0.971 0.738 5s
MLP, «мешок» 0.971 0.987 0.978 0.982 0.856 67.29s
Результаты тести рования моделей, We ia
Метод и харак- Accuracy Recall Precision F1_score Specificity Time
Метод Байеса, 0.964 0.97 0.985 0.979 0.985 0.65s
SVM, «мешок» 0.982 0.996 0.984 0.99 0.984 1.3s
KNN, «мешок» 0.951 0.987 0.947 0.967 0.947 83.27s
MLP, «мешок» 0.963 0.994 0.981 0.987 0.985 23.46s
В таблицах 1 и 2 в столбце «time» указано суммарное время обучения и тестирования модели. Из полученных результатов следует, что модели, обученные на данных с унарной токенизацией, производят классификацию точнее, а обучение производится быстрее. Скорость работы связана с тем, что в наборах с унарной токенизацией меньше элементов, поэтому параметр времени не учитывался при сравнении моделей, построенных на данных с разным содержанием токенов.
4. Тестирование на новых данных и анализ результатов
Дополнительно было произведено тестирование моделей классификации с добавлением новых данных, не входящих в первоначальный набор текстовых сообщений. Данный набор взят с платформы Kaggle [8]. Из набора были выбраны первые 2000 строк, документы были нормализованы и преобразованы в векторы признаков аналогично основному набору. После добавления новых документов общее их количество составило 7555. После нормализации и удаления документов, полностью состоящих из стоп-слов, количество документов составило 6833.
Тестирование проводилось для тех сочетаний алгоритмов, параметров и методов предобработки, которые показали лучшие результаты на предыдущей проверке для языка Python. В таблице 3 отображены значения метрик для каждого случая.
Тестирование на новых данных показало эффективность рассмотренных моделей классификации. Метод опорных векторов показал наилучшие результаты. При этом скорость работы у него не такая высокая, как у методов Байеса или KNN.
i Не можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
Результаты классификации на новых данных__
Метод и харак- Accuracy Recall Precision F1_score Specificity Time
Метод Байеса, 0.985 0.989 0.993 0.99 0.958 4.4s
SVM, «мешок» 0.996 0.999 0.996 0.998 0.974 28.8s
KNN, TF-IDF, 0.994 0.998 0.995 0.996 0.968 6.4s
MLP, «мешок» 0.989 0.993 0.992 0.993 0.951 84.69s
Таким образом, если требуется высокая скорость обучения, стоит выбирать один из следующих методов: полиномиальный метод Байеса или KNN. Если обучение моделей производится редко или есть потребность в очень высокой точности классификации, стоит использовать метод опорных векторов.
В исследовании Н. Сутта, З. Лю, Х. Чжан [10] было проведено сравнение методов SVM, KNN, Байеса и других методов для выявления наиболее точных классификаторов. В указанной публикации для анализа тоже использовались два набора данных: первый состоял из одного набора сообщений, второй — из двух разных. Данные были представлены в виде векторов признаков по схеме TF-IDF, использовались уни-граммы, биграммы и триграммы. Наибольшая точность была достигнута при обучении модели SVM c линейной функцией ядра на втором виде набора данных, с токенизацией при n = 1 и n = 2. Точность (англ. accuracy) модели SVM ~ 0.99. KNN показал точность меньше, при этом максимальная точность достигается при использовании биграмм. Классификатор, построенный по модели Байеса, показал худший результат по всем проверенным n-граммам практически среди всех моделей, проверенных в работе.
Результаты анализа, произведенного в исследовании [10], близки к тем, что были получены в представляемой работе: высокие точности достигаются при обучении на данных, состоящих из разных наборов сообщений, в обоих случаях SVM показывает более высокую точность по сравнению с другими алгоритмами. В работе Н. Сутта, З. Лю, Х. Чжан модели, обученные на n-граммах (при n >1), показывали высокие результаты, что может быть объяснено большим объемом использованного набора данных (более 100 тысяч сообщений).
В работе были построены классификаторы для определения спама в текстовых сообщениях. В качестве предварительной обработки текстов были проведены нормализация данных и представление полученных документов в векторы признаков по схемам «мешка» слов и TF-IDF.
В работе была выявлена неэффективность обучения на данных с триграммной токенизацией. Это связано с относительно небольшим набором данных для обучения. Словосочетания, состоящие из нескольких слов, встречаются реже в предложениях, чем отдельно взятые слова.
Ко второй проблеме можно отнести скорость обучения и тестирования моделей. При увеличении объема данных время, затрачиваемое на обучение модели классификации, будет увеличиваться. В таком случае требуется использовать программные реализации на языках с высокой скоростью работы. В работе были рассмотрены реализации на двух языках: Python и Java (Weka). Скорость выполнения классификации на Java выше, чем на Python. Следовательно, если требуется высокая скорость обучения и классификации, лучше использовать Java.
Высокой точности удалось достичь при обучении модели SVM на документах, разбитых на униграммы и с векторизацией «мешка слов» в Weka и Python: значения меры F1 равны 0.984 и 0.99 соответственно, что является неплохим результатом. После добавления новых документов для тестирования, значения точностей и других метрик моделей возросли. Мера F1 модели SVM стала равна 0.998.
1. Отчеты по спаму и фишингу | SecureList. [Электронный ресурс]. — URL: https://securelist.ru/category/spam-and-phishing-reports/ (дата обращения: 06.11.2022).
2. Мироненко А. Н. Метод распознавания спам-сообщений на основе анализа заголовка письма // МСиМ. 2010. №1 (21). — URL: https://cyberleninka.ru/article/n/metod-raspoznavaniya-spam-soobscheniy-na-osnove-analiza-zagolovka-pisma (дата обращения: 06.11.2022).
3. Spam Email | Kaggle [Электронный ресурс]. — URL: https://www.kaggle.com/mfaisalqureshi/spam-email?select=spam.csv (дата обращения: 06.11.2022).
4. Вьюгин В. В. Математические основы теории машинного обучения и прогнозирования. — М.: МЦМНО, 2013. — 387 с.
5. Журавлев Ю.И., Рязанов В.В., Сенько О.В. Распознавание. Математические методы. Программная система. Практические применения. — М.: Изд-во ФАЗИС, 2005 — 157 с.
6. Метод ближайших соседей. machinelearning.ru. [Электронный ресурс]. — URL: http://www.machinelearning.ru/wiki/index.php?title=KNN (дата обращения: 06.11.2022).
7. Raschka S., Mirjalili V. Machine learning and deep learning with Python, scikit-learn, and TensorFlow 2. — Mumbai: Packt Publishibg, 2019 — 848 p.
8. SMS Spam Collection | Kaggle [Электронный ресурс]. — URL: https://www.kaggle.com/datasets/assumewisely/sms-spam-collection (дата обращения: 06.11.2022).
9. Мюллер А., Гвидо С. Введение в машинное обучение с помощью Python. -СПб: Альфа-книга, 2017. — 480 с.
10. Sutta N., Liu Z., Zhang X. A study of machine learning algorithms on email spam classification // CATA 2020. EPiC Series in Computing. — Vol. 69. — Pp. 170-179. — URL: https://doi.org/10.29007/qshd.
УДК 004.852, 004.62 doi:10.18720/SPBPU/2/id23 -501
Гальченко Юлия Вадимовна 1,
Нестеров Сергей Александрович ,
доцент, канд. техн. наук, доцент
КЛАССИФИКАЦИЯ ТЕКСТОВ ПО ТОНАЛЬНОСТИ МЕТОДАМИ МАШИННОГО ОБУЧЕНИЯ
, Россия, Санкт-Петербург, Санкт-Петербургский политехнический
университет Петра Великого, 1 2 artyuhova.yuv@edu.spbstu.ru, nesterov@spbstu.ru
Аннотация. В данной статье рассмотрены существующие методы классификации текстов по тональности, создана модель нейронной сети, которая успешно решает поставленную задачу классификации. Нейросеть была обучена на наборах данных, которые включают отзывы о различных услугах и местах, а также рецензии на фильмы. Полученная модель нейросети показала высокий результат в задаче классификации текстов по тональности на тестовых данных.
Ключевые слова, классификация, машинное обучение, нейронные сети, сеть LSTM, методы классификации текстов, тональность текста, интеллектуальный анализ данных.
Yuliia V. Galchenko 1,
Sergey A. Nesterov ,
Associate Professor, PhD in Technical Sciences
SENTIMENT ANALYSIS WITH MACHINE LEARNING
, Peter the Great St. Petersburg Polytechnic University,
St. Petersburg, Russia, 1 2 artyuhova.yuv@edu.spbstu.ru, nesterov@spbstu.ru
Abstract. In this article, the existing methods for sentiment analysis were considered, a neural network model that successfully solves the task of classification was created. The neural network was trained on datasets that include reviews of various services and
Pythonista. Привет, Python
Доброго времени суток, Хабр. Запускаю короткий курс статей, который охватывает ключевые навыки Python, необходимые для изучения Data Science. Данные статьи подойдут для тех, кто уже имел опыт в программировании и хочет добавить Python в свою копилку навыков.
Привет, Python!
Python был назван в честь популярного британского комедийного телешоу 1970-х «Летающий цирк Монти Пайтона», поскольку автор был поклонником этого телешоу.
Просто ради удовольствия попробуйте прочитать приведенный ниже код и предсказать, что он будет делать при запуске. (Если вы не знаете, это нормально!) Он приурочен скетчу Монти Пайтона про спам.
spam_amount = 0 print(spam_amount) # Заказ спам, яйца, спам, спам, бекон и спам (еще 4 порции спама) spam_amount = spam_amount + 4 if spam_amount > 0: print("But I don't want ANY spam!") viking_song = "Spam " * spam_amount print(viking_song)
But I don`t want ANY spam!
Spam Spam Spam Spam
Эта забавная программа демонстрирует многие важные аспекты того, как выглядит код Python и как он работает. Давайте подробнее рассмотрим код.
spam_amount = 0
Присвоение переменной: здесь мы создаем переменную с именем spam_amount и присваиваем ей значение 0 используя = , что называется оператором присваивания.
Обратите внимание: если вы программировали на других языках (например, Java или C ++), вы могли заметить некоторые вещи, которые Python не требует от нас здесь:
• нам не нужно объявлять spam_amount перед присвоением ему значения
• нам не нужно указывать Python, на какой тип значения будет ссылаться spam_amount . Фактически, мы даже можем переназначить spam_amount для обозначения другого типа вещей, таких как строка или логическое значение.
print(spam_amount)
Вызов функций: print — это функция Python, которая отображает на экране переданное ей значение. Мы вызываем функции, добавляя круглые скобки после их имени и помещая входные данные (или аргументы) функции в эти скобки.
# Заказ спам, яйца, спам, спам, бекон и спам (еще 4 порции спама) spam_amount = spam_amount + 4
Первая строка выше — это комментарий. В Python комментарии начинаются с символа # .
Далее мы видим пример переопределения. Переопределение значения существующей переменной выглядит так же, как создание новой переменной — по-прежнему используется оператор присваивания = .
В этом случае значение, которое мы присваиваем spam_amount , включает простое арифметическое действие с его предыдущим значением. Когда он встречает эту строку, Python оценивает выражение в правой части = (0 + 4 = 4), а затем присваивает это значение переменной в левой части.
if spam_amount > 0: print("But I don't want ANY spam!") viking_song = "Spam Spam Spam" print(viking_song)
Мы будем говорить об «условных выражениях» позже, но, даже если вы никогда раньше не программировали, вы, вероятно, можете догадаться, что тут происходит. Python ценится за его комфортность кода и простоту.
Обратите внимание, как мы указываем, какой код принадлежит if . «But I don’t want ANY spam! » выведется, только если spam_amount положительный. Но дальше (например, print (viking_song) ) код должен выполняться несмотря ни на что. Как мы (и Python) это различаем?
Двоеточие ( : ) в конце строки if указывает, что начинается новый «блок кода». Последующие строки с отступом являются частью этого блока кода. Некоторые другие языки используют < фигурные скобки >для обозначения начала и конца блоков кода. Использование в Python значимых пробелов может удивить программистов, которые привыкли к другим языкам, но на практике это приводит к более согласованному и читаемому коду, чем языки, которые не требуют отступов блоков кода.
Последующие строки, относящиеся к viking_song , не имеют отступа с дополнительными 4 пробелами, поэтому они не являются частью блока кода if . Мы увидим больше примеров блоков кода с отступом позже, когда мы будем определять функции и использовать циклы.
Этот фрагмент кода также является нашим первым знакомством со строками в Python:
"But I don't want ANY spam!"
Строки можно помечать двойными или одинарными кавычками. (Но поскольку эта конкретная строка содержит символ одинарной кавычки, мы можем запутать Python, пытаясь заключить ее в строку, если мы не будем осторожны.)
viking_song = "Spam " * spam_amount print(viking_song)
Оператор * можно использовать для умножения двух чисел ( 3 * 3 равно 9), но, что довольно интересно, мы также можем умножить строку на число, чтобы получить версию, которая повторяется столько раз. Python разрешает несколько маленьких трюков, подобных этому, где операторы типа * и + имеют разное значение в зависимости от того, к чему они применяются. (Технический термин для этого — перегрузка оператора)
Числа и арифметика в Python
Мы уже видели пример переменной, содержащей число выше:
spam_amount = 0
«Число» — неформальное название для такого рода вещей, но если мы хотим быть более техническими, мы можем спросить Python, как он описывает тип вещи, которым является spam_amount :
type(spam_amount)
Здесь int — сокращение от integer. Есть еще один вид чисел, с которым мы часто сталкиваемся в Python:
type(19.95)
float
float — это число с плавающей точкой, которое очень полезно для представления таких вещей, как вес или пропорции.
type() — еще одна встроенная функция, которую мы встречаем (после print() ), и ее следует запомнить. Очень полезно иметь возможность спросить Python «к какому типу вещей относиться это?».
Естественное желание действий с числами — выполнять арифметические операции. Мы видели оператор + для сложения и оператор * для умножения. Python также покрывает остальные основные кнопки вашего калькулятора:
Оператор
Название
Описание
