Для бота добра разработано 2 модели:
- классификатор проектов добра персональный/системный
- классификатор сообщений пользователей на оскорбительность (возвращает predict_proba, не так всё однозначно)
В процессе были размечены данные по всем существующим проектам добра.
Сгенерироанные признаки - счетчик part of speech + hash vectorizer.
Проверка стабильности модели - kfold и bootstrap выборки.
Дов интервал roc-auc [0.9441858042464192, 0.9852705941914532]
Финальный класс - predictor.py
За векторайзер взята предобученная модель gensim word2vec "word2vec-ruscorpora-300". Перед предиктом моделью соощение проверяется на близость к словам из сета очень плохих слов d_associated.pickle, сгенерированным через w2v.most_similar(topn=50) с небольшого списка известных мне очень плохих слов. Дов интервал roc-auc [0.7386304795108573, 0.7624090920300678]
Финальный класс - msg_classifier.py
https://docs.docker.com/get-docker/
docker pull fogugy/dobro-ml
git clone https://github.com/fogugy/dobro_ml.git
settings -> resources -> file sharing (добавить директорию с проектом)
Актуально для Windows
bash runml.sh
Сервер запускается в докер-контейнере на 4444 порту.
/test - get метод для проверки сервера
/project_type - post метод для определения класса проекта. Возвращает json {"type": "personal"/"common"}
/msg_score - post метод для определения вероятности неприятного сообщения. Возвращает json {"score": float[0-1]} со скором типа float. 0 - норм, 1 - обсценная лексика.