Как стать автором
Обновить

Комментарии 10

Я бы на вашем месте поменял транспорт и сделал это подобием веб-сервиса. Вместо запуска файла - сделал бы общение через http json. Достоинства:

1) можно инициировать с любой стороны процесса 1с (клиент/сервер), и не только 1с

2) лучше кроссплатформенность (сейчас то бинарник должен быть в доступности платформы 1с). А так можете хоть на виртуалке линукса запустить.

3) модель можно загрузить один раз и использовать много раз (а время загрузки модели в память обычно кратно превышает время предсказания)

мм..) а то идея, не думал над этим!
Спасибо за наводку

Ещё один вариант, который очень простой, но довольно рабочий - использование байесовского классификатора.

Можно классифицировать на любое число классов, очень быстро работает

Найду время, обязательно попробую. Будет битва алгоритмов)

Функция ПочиститьПоле(ПреобразованноеПоле) Экспорт

Для удаления символов из строки можно делать так: СтрСоединить(СтрРазделить(строка, "!@#$%^&№", Ложь), Ложь)

Ок, принято

У вас получилась точность 94% на тестовой выборке (Test accuracy=)?..
Тогда это неплохая точность для сравнительно простой векторизации «tfidf». Спасибо, что поделились опытом.

Все так, 94% даже с копейками)

Я бы предложил несколько улучшений:

  1. В статье нет информации о сбалансированности классов. Т.к. если классы не сбалансированы, то метрика accuracy не лучший выбор.

  2. Я бы не стал делать предобработку текста на стороне 1С. 1С очень медленно работает со строками. TfidfVectorizer по умолчанию разбирает текст на слова при помощи регулярных выражений. Это намного быстрее чем через 1С.

  3. Попробуйте установить значение параметра ngram_range в TfidfVectorizer. Можно попробовать (1,2), (1,3) или (2,3). Суть этого параметра что кроме одиночных слов в модель добавляются еще и биграммы и/или триграммы. Т.е. выражение "проблема не решена" сейчас разбивается на "проблема", "не", "решена". А в случае использования биграмм в модель добавятся еще и словосочетания "проблема не" и "не решена".

  4. Модель и vectorizer можно упаковать в Pipeline. Тогда будет чуть проще обучение модели, в файл можно будет сохранять не два объекта, а один (pipeline) и вызов потом проще будет. https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.Pipeline.html

  1. Про сбалансированность пишу в коментах к коду обучения модели.

  2. Да, Вы правы подготовка данных у меня заняла часа два) надо бы переписать.

  3. Круто, не знал про это

  4. Попробую

    Спасибо, очень ценный отзыв!!!

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.