spam-detector/README.md
2024-10-29 00:23:13 +03:00

106 lines
3.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Spam Detector
ПО для борьбы со спамом
## Компоненты
### Диаграмма компонентов
![c4model.png](docs/c4model.png)
### Dataset
- необходим первоначальный датасет (ham/spam) в формате CSV
### Model
- использует датасет
- модели генерируются https://pypi.org/project/spam-detector-ai/
- naive_bayes_model.joblib
- random_forest_model.joblib
- svm_model.joblib
- logistic_regression_model.joblib
- xgb_model.joblib
### Decision Maker
- компонент, который принимает решения
- представлен в виде Web-сервера
- реализует API
- POST `/check-spam` - открытый для пользователей
- auth: none
- request
- body `{ "text": "SOME TEXT" }
- response
- status code 200
- body `{ "is_spam": true }`
- POST `/update-model` - служебный, добавляет текст в датасет
- auth: TOKEN
- request
- body: `{ "text": "SOME TEXT", "is_spam": true }`
- response
- status code 200
- body `{ "status": "OK" }`
- POST `/restart` - служебный, перезапускает данный компонент
- auth: TOKEN
- request
- body: none
- response
- status code 200
- body `{ "status": "OK" }`
#### Sequence diagram
![sequence](docs/sequence.png)
### Model Updater
- добавляет в датасет новые тексты из базы дообучения
- запускается по графику, выполняет
- сделать бэкап модели
- запустить дообучение
- при успешном результате дообучения
- вызывает POST `/restart` компонента Decision Maker
### Transport
- используется [Rabbit MQ](https://rabbitmq.com/)
## Use cases
### Телеграм-бот
- приходит сообщение в группу в телегу
- бот его читает (не входит в данный комплекс)
- отправляет на проверку
- получает результат: спам/не спам
- если спам - бот удаляет сообщение
### На почте
- та же схема, только должен быть работающий клиент почты, который читает каждое сообщение, и если обнаружился спам, то помечать его спамом (помещать в категорию спам)
## Дообучение с учителем
### Сбор доп.текстов через Телеграм
- владелец бота в телеге встречает сообщение, которое является спамом, но не было удалено
- это сообщение отправляется в ТГ бот спам-определителя (не реализовано)
- сообщение помещается в базу для дообучения
### Сбор доп.текстов через почту
- спам-письмо можно отправить на почту, которую читает бот (не реализовано)
- бот кладет текст письма в базу дообучения
### Дообучение
- 1 р/сут происходит вычитывание всех сообщений из базы дообучения за день
- если в базе дообучения за день что-то есть, то
- датасет обновляется
- запускается процесс дообучения
- перезапускается модель