1С: Документооборот, Data Science и Python

04.08.20

Разработка - Математика и алгоритмы

В статье рассказывается о создании и обучении модели Data Science на языке Python и интеграции с системой 1С: Документооборот

1С: Документооборот, Data Science и Python

 

На нашем предприятии внедрен 1С: Документооборот и нам приходится постоянно думать о повышении качества работы пользователей в системе. В 1С: Документообороте пользователи работают прежде всего с текстом и мы искали возможности «умного» анализа текстов для повышения эффективности работы программы.  Уверены, что использование машинного обучения позволит достичь поставленных задач и в конце концов мы придем к тому, что искусственный интеллект будет проверять тексты договоров и писать замечания вместо юристов и бухгалтеров)

Описание задачи

В статье в общих чертах описывается процесс обучения и применения модели машинного обучения. Возможно, данный пример подтолкнет кого-то для применения новых технологий в своей работе.

Для «пробы пера» и знакомства с машинным обучением нами была выбрана следующая проблема: в 1С: Документооборот активно используется постановка задач на исполнение. По каким-то задачам руководители ожидают получение ответного документа: письмо контрагенту, отчет или другой документ (например, «Прошу проработать вопрос и подготовить ответ покупателю»), а некоторые задачи не требуют, чтобы исполнитель прикладывал документ (например, «Для сведения»).

В 1С: Документооборот еще на этапе внедрения мы создали два шаблона задач: с подготовкой ответа и без. Шаблон с подготовкой ответа имеет заполняемый предмет и тем самым требует от исполнителя приложить документ исполнения, но практика показывает, что, те кто ставит задачи не всегда выбирают необходимый шаблон, они нажимают «Отправить на исполнение» и выбирают первый попавшийся шаблон и уже в описании задачи пишут «Подготовить ответ», «Подготовить отчет» и пр.  Исполнитель выполняет задачу не прикладывая файл, а постановщик не принимает ответ и требует приложить документ.  Такая переброска задачами затягивает процесс. Конечно, эту задачу можно решить «1С-ными» механизмами, например, добавить признак или каждый раз переспрашивать постановщика задач, ожидает ли он ответ и прочее.

Но мы решили на этом процессе протестировать возможности машинного обучения: если мы научим алгоритм определять по тексту постановки задачи, требуется ответ или нет, мы можем рекомендовать исполнителю приложить файл исполнения (или запретить выполнение без приложенного файла).

Подготовительная работа

Программировать будем на Python – это основный язык Data Science, он очень простой, лаконичный и для 1С-ника не должно составить серьёзных проблем с ним разобраться.  Устанавливаем Anaconda. Этот пакет установит и Python с основными библиотеками и Jupiter где мы будем писать код. В Jupiter код пишется в отдельный строках, исполняется построчно и показывает результат после выполнения строк (если нам есть, что показать) – это сначала кажется необычным – но в итоге оказывается очень и очень удобным.

Создание обучающей выборки

Для начала нам нужна обучающая выборка. Выбираем из 1С: Документооборот 5 000 задач исполнения и в отдельной колонке проставляем признак 1- поручение требует документального ответа, 0 – поручение не требует документального ответа.

У нас получается вот такая таблица (представлена часть таблицы):

text

priznak

Прошу  проверить, при отсутствии замечаний принять к учету.

0

Прошу рассмотреть  и подготовить ответ

1

В работу

0

Прошу собрать информацию у ОМ + КД.
подготовить СЗ со списком конференций

1

проработать, подготовить ответ

1

 

Загрузка и подготовка данных в Jupiter

После подготовки обучающей выборки начнем программирование на python.  Создаем новый файл в Jupiter и в первой строчке объявляем необходимые модули и переменные:

Загружаем файл

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

Подготовка включает следующие этапы:

  • Исключение из текста незначимых символов: цифр, знаков препинания. Они не влияют на текст поручения и будут мешать алгоритму.
  • Лемматизация – приведение слов в нормальную (словарную) форму. В русском языке (да и в других) фразы можно формулировать по-разному и от этого будет меняться форма слова, хотя смысл может оставаться неизменный. Для того, чтобы повысить эффективность работы алгоритма мы все слова приводим в нормальную форму. Уменьшиться количество различных слов и наш алгоритм будет эффективнее.

Для этого будем использовать функцию лемматизации:

По комментариям понятно, что именно делает эта функция.

Вызываем функцию для всей таблицы:

Теперь текст выглядит иначе:

text

priznak

просить проверить при отсутствие замечание принять к учёт

0

просить рассмотреть и подготовить ответ

1

в работа

0

просить собрать информация у ом кд подготовить сз с список конференция

1

проработать подготовить ответ

1

 

Формируем переменную текст

 

Создаем векторы слов

Дело в том, что системы машинного обучения понимают только числовые значения, в них нельзя загружать текст, картинки или другие типы и для обучения алгоритма необходимо перевести слова в цифровые значения.

Мы будем делать это с помощью механизма «Мешок слов».

Мешок слов — это модель текстов, в которой каждый документ или текст выглядит как неупорядоченный набор слов. Его можно представить в виде матрицы, каждая строка в которой соответствует отдельной строке текста, а каждый столбец — определенному слову. Ячейка на пересечении строки и столбца содержит количество вхождений слова в соответствующий документ.

Его работу лучше показать на примере:

Пусть у нас имеется текст в несколько строк.

Булок и чай

Кто хочет чай

Купи булок

 

Из текста мы строим матрицу уникальных слов. Где каждое слово закреплено строго за свои индексом

Индекс

Слово

0

Булок

1

И

2

Чай

3

Кто

4

Хочет

5

Купи

 

Далее по каждой фразе строится матрица

 

Булок

И

Чай

Кто

Хочет

Купи

Булок и чай

1

1

1

0

0

0

Кто хочет чай

0

0

1

1

1

0

Купи булок

1

0

0

0

0

1

 

«Мешок слов» игнорирует порядок слов. Но для нашей задачи этим можно пренебречь. Не так важно, что написал пользователь: «Подготовить ответ» или «Ответ подготовить до 15 августа»

Создаем векторы для нашего текста:

Теперь в переменной «X» хранится наш текст, разложенный в матрицу используя алгоритм «Мешок слов».

В переменную «y» записываем результаты нашей обучающей выборки

Теперь все готово для обучения.

Обучение модели

В этом примере мы упускаем анализ и оптимизацию различных алгоритмов. Обычно этот этап выглядит следующим образом:

  • Вся выборка разбивается на обучающую и тестовую (примерно 80% на 20%)
  • На обучающей выборке производится обучение (применяются различные алгоритмы или у алгоритмов меняются параметры), а на тестовой выборке проверяется качество предсказания, пока не будет получен приемлемый результат.

Мы будем обучать алгоритмом «Случайны лес». Он дал довольно хороший результат предсказаний и без дополнительных параметров (применяется один параметр random_state=241 для обеспечения повторяемости обучения).

Вообще все обучение сводится к двум строчкам:

Теперь в переменной clf мы имеем обученную модель и используя эту модель можем строить предсказания.

Проверим как работает наша модель:

Ответ [1] говорит, о том, что исполнитель должен приложить документальный ответ к исполнению задачи, что соответствует смыслу текста.

Сохраняем обученную модель и модель векторов в файл для последующего использования:

Далее встал вопрос как из 1С обращаться к обученной модели. Мы выбрали вариант -  организация веб-сервиса (используем веб-сервер flask) к которому обращается 1С:

  • 1С: Документооборот получает строку задачи
  • С этой строкой обращается к веб-серверу flask
  • Получает ответ от обученной модели
  • Отражает результат предсказания.

Если алгоритм решает, что исполнитель должен подготовить ответ, то 1С: Документооборот показывает вот такую надпись в задаче исполнителя:

 

Резюме

На этом примере мы убедились, что использование машинного обучения дает положительный эффект:

  1. Процесс подготовки и обучения технологичен (есть множество специализированных библиотек, большое количество информации по их использованию и готовых технологий работы с текстом)
  2. Для обучения и последующего переобучения достаточно добавить фразы или расставить иначе признаки в файле Excel
  3. Алгоритм работает очень быстро. Ответ от сервера мы получаем меньше чем за секунду
  4.  «Умные» подсказки помогают пользователям корректно оформлять документы

На данный момент с помощью механизма машинного обучения мы реализовали еще один проект: автоматическое создание связей документов (пользователи не всегда заполняют связи документов).  Робот анализирует тексты документов (файлы word) и, если текст документа содержит ссылки на другие документы 1С: Документооборота, находит и связывает документы.

 Предполагаем расширение применения механизмов машинного обучения в будущем. И кто знает, может быть скоро научим искусственный интеллект согласовывать договоры вместо бухгалтеров и юристов и процесс согласованию документов будет занимать несколько минут.  

 

Машинное обучение Python Machine Learning 1С: Документооборот

См. также

Документооборот и делопроизводство (СЭД) Типовые Бухгалтер Пользователь Руководитель проекта Платформа 1С v8.3 Управленческий учет Платные (руб)

Организуйте правильный оборот документов на вашем предприятии в 1С. Ведение учета и хранения документов. Управление потоками документации между подразделениями. Работа с договорами в компании. Автоматизация процессов подготовки, согласования и подписания документов. Сократите время и объем ошибок с 1С:ДО!

48500 руб.

19.02.2016    108546    121    5    

96

SALE! 30%

Загрузка и выгрузка в Excel Документооборот и делопроизводство (СЭД) Учет документов Распознавание документов и образов Бухгалтер Пользователь Управляемые формы 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление холдингом 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Бухгалтерский учет Управленческий учет Платные (руб)

Универсальная программа для распознавания сканов или фото товарных документов в 1С. Не требует указания параметров и предварительной настройки. Просто выбираете файл (PDF, JPG, DOC, XLS, HTML) выбираете документ 1С и нажимаете кнопку "Распознать и загрузить".

8400 5880 руб.

04.06.2019    106885    313    173    

326

Документооборот и делопроизводство (СЭД) Бухгалтер Платформа 1С v8.3 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Продукт "Апрель Софт: Бухгалтерия позаказного производства, ред. 3.0" предназначен для удобного и оперативного управления процессами производства, отгрузок и снабжения в производственных компаниях. Программный продукт открывает новые функциональные возможности для ведения документооборота.

11400 руб.

18.02.2016    22958    1    1    

5

Документооборот и делопроизводство (СЭД) Мессенджеры и боты Учет документов Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия государственного учреждения 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 Платные (руб)

Расширение для согласования справочников и документов в основных типовых конфигурациях. Ролевая адресация, условная маршрутизация, чат-бот telegram, интеграция с n8n, последовательное и параллельное согласование, уведомление о новых задачах на почту, блокировка объектов в зависимости от статуса, запрет проведения в зависимости от статуса, автозапуск процессов согласования, отчеты по исполнительской дисциплине. Не требуется снятие конфигурации с поддержки. Настройка без программирования. Версия для 1cfresh.com. Сертификат 1С-Совместимо.

14900 руб.

15.11.2018    30269    35    49    

71

Документооборот и делопроизводство (СЭД) ЭДО и ОФД Учет документов Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Мощный, единый инструмент для решения всех проблем, связанных с переходом на ЭДО. Экономит бумагу и время - организует архив оригиналов первичных документов прямо в базе 1С, в прикрепленных файлах к соответствующим документам. С помощью комплексного отчета по ошибкам в ЭДО позволяет выявить и исправить все возможные ошибки - ошибочно сопоставленные документы, не подписанные документы, подписанные, но не загруженные в 1С документы. Автоматически сопоставляет не сопоставленные между собой документы. Может работать по расписанию и присылать отчет о состоянии архива/по ошибкам на почту. Взаимодействует напрямую с сервисами Диадок/СБИС, имеет интуитивно понятный интерфейс и учитывает 3-х летний опыт 40+ клиентов.

14880 руб.

17.12.2018    45652    65    59    

79

Нейросети 8.3.6 1С:Управление торговлей 11 Управленческий учет Платные (руб)

Обработка подключения фотокамер Canon и Nikon к Управление торговлей 11.4 для потоковой загрузки фотографий в карточки товаров с автоматическим удалением фона

22800 руб.

24.06.2021    9819    3    4    

14

Нейросети Пользователь Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 Оптовая торговля, дистрибуция, логистика Россия Управленческий учет Платные (руб)

Расширение "Искусственный интеллект и нейросети в 1С: Работа с отзывами маркетплейсов" предназначено для применения искусственного интеллекта в повседневной деятельности селлеров на маркетплейсах. Среди функций - работа с отзывами, вопросами и чатами покупателей, диалог с нейросетями, генерация картинок, заполнение описаний номенклатуры и другое.

6000 руб.

03.04.2024    6371    4    0    

8
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. пользователь 08.08.20 17:18
(0) Все отлично сделали!

Захотелось самому с этим поработать :)
3. Vaganov_Alexey 62 10.08.20 10:54 Сейчас в теме
(1) спасибо. Если будут вопросы обращайтесь. Я не великий профессионал в Data Sience, но что знаю, подскажу. Уверен, что сам механизм машинного обучения рабочий и его можно и нужно использовать.
10. dill 15.04.22 09:18 Сейчас в теме
(3)Здравствуйте, отличная тема, хорошо раскрыли. А подскажите, как вы дальше используете обученную модель ? в коде пайтон просто загружаете из файла?
2. comol 5107 09.08.20 03:08 Сейчас в теме
Круть. А то мало практических примеров использования ML c 1С как выяснили.
Классификатор текстов мы в OneRPA универсальный делали... в подобном кейсе наверное прокатил бы.

В статье что-то больше "из учебника по ML в Python" - несколько вопросов:
1) На морфологию и очистку слов забили? Сначала же вроде чистят
2) DeepPavlov вроде несколько упростит эту историю если использовать
3) http сервис используется для классификации? Управляется через 1С? Или отдельно?
4) Дообучение с каким интервалом? И почему Excel а не "более приятный" источник данных?
5) Не пробовали дерево решений внутри 1С построить? В вашем кейсе может прокатило бы?
4. Vaganov_Alexey 62 10.08.20 11:08 Сейчас в теме
(2) спасибо. Машинное обучение интересно именно с точки зрения практического применения, поэтому и написал статью, чтобы показать, что это все работает и подход вполне технологичен. Может быть кого-то заинтересует ML, попробует и появится еще больше практического контента.

1) Морфологию? я привожу слова в нормальную форму. или что-то еще? В этом примере я не использовал стоп-слова и он дал качественный результат. Когда делал автоматическую связь документов, то пришлось вводить стоп-слова и общепринятые и те которые сильно сбивали алгоритм
2) deeppavlov - спасибо за информацию, почитаю.
3) http сервис поднят на flask, а 1С-ка обращается к нему. Да, в этом примере простая бинарная задача классификации
4) пока не дообучал. Не думаю, что в этом примере это актуально. Люди пишут как правило одно и тоже. Но если увижу, что сильно алгоритм врет, то, скорее всего обучу заново.
5) дерево решений внутри 1С? это как?
8. avryanovalexey 82 01.03.21 12:13 Сейчас в теме
(4) А зачем дерево решений внутри 1С? Это же как минимум вычислительно неэффективно. И трудоёмко с точки зрения разработки.
Я так понял автор использовал уже готовые популярные библиотеки для ML. Скорее всего эта библиотека написана на C++. Эта библиотека будет работать в 1000 раз быстрее и в десятки раз лучше и точнее, чем любая "самописная поделка" деревьев решений на языке 1С. 1С, прекрасная для своих учетных задач, но не надо на ней большие математические вычисления делать. Она для этого плоха.
5. avryanovalexey 82 28.02.21 09:29 Сейчас в теме
А какие метрики получились? На сколько точно предсказывает модель?

А так идея применения и реализация выглядят очень классно и не сложно
6. Vaganov_Alexey 62 01.03.21 11:39 Сейчас в теме
(5) Метрику использовал вот такую scoring = 'roc_auc', best_csore был вот такой 0.9736540311933585
Работает в общем-то довольно точно.

Но это была проба пера.

На данный момент настроил еще:
- автоматическую связь документов. система анализирует тексты документов, и если видит в тексте ссылку на другие документы, формирует связь документов
- автоматическую сепарацию документов по скан-образам. система по pdf скану определяет вид документа, и в зависимости этого выполнят те или иные действия.

В общем все это довольно эффективно работает
7. avryanovalexey 82 01.03.21 12:02 Сейчас в теме
хорошее значение метрики. Прикольный результат.

А в целом без ML задача решалась? Детерменированный алгоритм можно было написать? С четким условием классификации?
Я понял, что хотелось именно ML в учебных целях, но все-таки?
9. Vaganov_Alexey 62 02.03.21 08:35 Сейчас в теме
(7) Да, это был тестовый пример. Думаю, без ML именно эту задачу можно было решить. Составить список слов, парсить строки. Но с ML это эффективнее, я просто указываю нужные фразы, а алгоритм сам находит значимые признаки (слова), обучается по ним, и потом при получении новой фразы, которую он никогда не видел - правильно классифицирует. И делает это очень быстро.
11. sabob 37 13.12.22 17:17 Сейчас в теме
Здравствуйте! Спасибо за статью, интересно! Скажите пожалуйста каким образом реализован механизм анализа текстов документов (файлы word)?
12. Vaganov_Alexey 62 13.12.22 21:18 Сейчас в теме
(11) в 1С документооборот есть есть специальный типовой механизм, он сам вытаскивает тексты
13. Lusine 12.04.23 15:14 Сейчас в теме
Спасибо большое за офигенную статью :) Позвольте только про опечатку Вам написать: если написать, как у Вас указано, "Срочно предоставить отчет", то результат будет 0, что логично) А если написать "Срочно предоставить ответ", то будет 1, что тоже логично. Но возможно, что это я не до конца разобралась))
Оставьте свое сообщение