Состав команды: Кварацхелия А.Г, Рахимов Д.Ф., Мангушева А.Р.
- На основе документов тестового набора строится матрица расстояний с использованием word2wec [1] и Word Mover's Distance [2];
- Для каждого нового документа расчитываем вектор расстояний от данного документа до каждого документа из обучающего набора.
- Применяем классификатор K-ближайших соседей с параметром количества соседей, равным 10-и.
[1] Tomas Mikolov, Kai Chen, Greg Corrado, Jeffrey Dean Efficient Estimation of Word Representations in Vector Space https://arxiv.org/abs/1301.3781
[2] Matt Kusner M, Yu Sun, Nicholas Kolkin, Kilian Weinberger "From Word Embeddings To Document Distances" http://mkusner.github.io/publications/WMD.pdf
Результаты
Категории | Исполнители | Темы | |
---|---|---|---|
Успех | 1076 (60.2%) | 1127 (63.0%) | 792 (44.3%) |
Топ-3 | 411 (23.0%) | 357 (20.0%) | 80 (15.7%) |
Ошибка | 301 (16.8%) | 304 (17.0%) | 716 (40.0%) |
Кроссплатформенное решение: Linux, Windows, macOS Язык программирования: Python 3.6 Библиотеки и компоненты: NTLK, Gensim, RNNmorph (TensorFlow), Scikit-learn, семантические модели русского языка с https://rusvectores.org/ru/models/ (ruscorpora_upos_cbow_300_20_2019)
Склонировать репозиторий
Перейти в корневую директорию репозитория
Скачать модель ruscorpora_upos_cbow_300_20_2019 с rusvectores и распаковать содержащиеся файлы в поддиректорию classification-appeals/models/180
mkdir -p classification-appeals/models/180; wget http://vectors.nlpl.eu/repository/11/180.zip -O tmp.zip; unzip -o -d classification-appeals/models/180 tmp.zip; rm -rf tmp.zip
Собрать и запустить
docker-compose build
docker-compose up -d
Остановить
docker-compose down
Проверить можно, перейдя в браузере на http://127.0.0.1
Работающее решение для тестирования находится по адресу http://104.238.128.209
POST /classify
Content-Type: application/json
curl --request POST \
--header "Content-Type: application/json" \
--data '{"appeal_text":"Сегодня, выйдя из дома, обнаружила следующую картину. Около подъезда очень много неубранного снега, наледь около входной двери."}' \
127.0.0.1/classify
POST /classify HTTP/1.1
Accept: application/json
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 252
Content-Type: application/json
Host: localhost
User-Agent: HTTPie/0.9.4
{
"appeal_text": "Сегодня, выйдя из дома, обнаружила следующую картину. Около подъезда очень много неубранного снега, наледь около входной двери."
}
HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 728
Content-Type: application/json
Date: Wed, 31 Jul 2019 11:10:42 GMT
Server: nginx/1.17.0
{
"top3_categories": [
[
"Дворовая территория",
0.5
],
[
"Многоквартирные дома",
0.4
],
[
"Дороги",
0.1
]
],
"top3_executors": [
[
"Администрация/префектура района/города/округа",
0.6
],
[
"Управление благоустройства города",
0.2
],
[
"Госжилинспекция",
0.2
]
],
"top3_themes": [
[
"Неубранная дворовая территория (мусор/снег)",
0.4
],
[
"Прочие нарушения правил пользования жилыми помещениями",
0.2
],
[
"Проблемы свободного проезда и прохода для транспорта и пешеходов",
0.1
]
]
}