106 lines
3.8 KiB
Markdown
106 lines
3.8 KiB
Markdown
|
# AntiSpam complex
|
|||
|
|
|||
|
Комплекс ПО для борьбы со спамом
|
|||
|
|
|||
|
## Компоненты
|
|||
|
|
|||
|
### Диаграмма компонентов
|
|||
|
|
|||
|
![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 р/сут происходит вычитывание всех сообщений из базы дообучения за день
|
|||
|
- если в базе дообучения за день что-то есть, то
|
|||
|
- датасет обновляется
|
|||
|
- запускается процесс дообучения
|
|||
|
- перезапускается модель
|
|||
|
|
|||
|
|
|||
|
|