Comments 10
Я бы на вашем месте поменял транспорт и сделал это подобием веб-сервиса. Вместо запуска файла - сделал бы общение через http json. Достоинства:
1) можно инициировать с любой стороны процесса 1с (клиент/сервер), и не только 1с
2) лучше кроссплатформенность (сейчас то бинарник должен быть в доступности платформы 1с). А так можете хоть на виртуалке линукса запустить.
3) модель можно загрузить один раз и использовать много раз (а время загрузки модели в память обычно кратно превышает время предсказания)
Ещё один вариант, который очень простой, но довольно рабочий - использование байесовского классификатора.
Можно классифицировать на любое число классов, очень быстро работает
Функция ПочиститьПоле(ПреобразованноеПоле) Экспорт
Для удаления символов из строки можно делать так: СтрСоединить(СтрРазделить(строка, "!@#$%^&№", Ложь), Ложь)
Я бы предложил несколько улучшений:
В статье нет информации о сбалансированности классов. Т.к. если классы не сбалансированы, то метрика accuracy не лучший выбор.
Я бы не стал делать предобработку текста на стороне 1С. 1С очень медленно работает со строками. TfidfVectorizer по умолчанию разбирает текст на слова при помощи регулярных выражений. Это намного быстрее чем через 1С.
Попробуйте установить значение параметра ngram_range в TfidfVectorizer. Можно попробовать (1,2), (1,3) или (2,3). Суть этого параметра что кроме одиночных слов в модель добавляются еще и биграммы и/или триграммы. Т.е. выражение "проблема не решена" сейчас разбивается на "проблема", "не", "решена". А в случае использования биграмм в модель добавятся еще и словосочетания "проблема не" и "не решена".
Модель и vectorizer можно упаковать в Pipeline. Тогда будет чуть проще обучение модели, в файл можно будет сохранять не два объекта, а один (pipeline) и вызов потом проще будет. https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.Pipeline.html
Классификатор обращений пользователей (1C + python)