100 lines
3.5 KiB
Markdown
100 lines
3.5 KiB
Markdown
# 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
|
||
|
||
### Телеграм-бот
|
||
|
||
- приходит сообщение в группу в телегу
|
||
- бот его читает (не входит в данный комплекс)
|
||
- отправляет на проверку
|
||
- получает результат: спам/не спам
|
||
- если спам - бот удаляет сообщение
|
||
|
||
### На почте
|
||
|
||
- та же схема, только должен быть работающий клиент почты, который читает каждое сообщение, и если обнаружился спам, то помечать его спамом (помещать в категорию спам)
|
||
|
||
## Дообучение с учителем
|
||
|
||
### Сбор доп.текстов через Телеграм
|
||
|
||
- владелец бота в телеге встречает сообщение, которое является спамом, но не было удалено
|
||
- это сообщение отправляется в ТГ бот спам-определителя (не реализовано)
|
||
- сообщение помещается в базу для дообучения
|
||
|
||
### Сбор доп.текстов через почту
|
||
|
||
- спам-письмо можно отправить на почту, которую читает бот (не реализовано)
|
||
- бот кладет текст письма в базу дообучения
|
||
|
||
### Дообучение
|
||
|
||
- читает из RabbitMQ и дописывает в конец dataset CSV
|
||
- 1 р/сут переобучивает модель
|