ABBYY FastML: новый подход к машинному обучению на стороне клиента для обработки большого потока документов

image-loader.svg

Привет, Хабр!

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

Например, представим, что на обработку поступают десятки тысяч инвойсов от сотен разных контрагентов. Раньше, чтобы автоматизировать их классификацию и извлечение информации, требовалось наработать базу поставщиков, а для каждого из типов документов — создать вручную гибкое описание (задать информацию о линейных отношениях полей относительно друг друга). Внедрение такого решения у клиента длилось от 3 до 6 месяцев.

Чтобы упростить и ускорить эту задачу и в целом облегчить работу нашим заказчикам, мы создали новый механизм кластеризации и разработали технологию FastML, а затем объединили их работу.

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

Но обо всем по порядку.  

Когда нужна кластеризация

Сначала разберемся, в чем разница между классификацией и кластеризацией в сфере обработки документов.

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

Кластеризация нужна тогда, когда компания работает не с десятком, а с десятком тысяч разных контрагентов.  У заказчика нет точных знаний о содержании и структуре документов, а также о типах и количестве классов в них.

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

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

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

Алгоритм работы кластеризации

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

Эту задачу можно решить с помощью кластеризации. Ниже — примерный алгоритм, как это сделать.

1. Сначала строится функция похожести. Это механизм, который для пары документов возвращает значение в диапазоне [0; 1], отражающее степень похожести документов. Это нужно для последующего деления документов на кластеры. Кстати, саму функцию можно реализовать по-разному: как классификатор (например, на основе градиентного бустинга), как нейросеть или каким-либо другим способом.

Функция похожести может быть выражена аналитически или быть встроена в алгоритм. В качестве признаков могут использоваться Grid, SVD (singular value decomposition), Image и др., а также их комбинации.

  • Grid получают путем разбиения документа на зоны, напоминающие ячейки сетки, и нахождением признаков и их значений для каждой ячейки. Затем признаки каждой ячейки нового документа сопоставляются с признаками соответствующей ячейки документов кластера.

  • SVD — сингулярное разложение матрицы слов с соответствующими частотами. Каждый документ может быть охарактеризован множеством использованных в нем слов и их частотой употребления. Таким образом, документу может быть сопоставлена матрица, в левом столбце которой находятся слова (или их номера), а в правой — номера их позиций в документе (или просто число вхождений). Такая матрица довольно большой размерности может быть сведена к матрице меньшей размерности, значения элементов которой могут использоваться как признаки.

  • Image — это набор значений, представляющих результат работы сверхточной нейронной сети на документе. Строится векторное представление изображения (эмбеддинг). На вход в сеть поступает изображение документа, а на выходе получается массив чисел, которые как-то кодируют это изображение.

2. После построения функции похожести мы можем разложить все документы на группы с помощью метода кластеризации. Здесь можно выделить два основных подхода: объединяющий (Рис. 1) и разделяющий (Рис. 2).

Рис. 1Рис. 1

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

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

Рис. 2Рис. 2

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

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

Центроиды — центры тяжести кластеров. Каждый центроид — это вектор, элементы которого представляют собой средние значения соответствующих признаков, вычисленные по всем записям кластера.

В дальнейшем для похожих классов можно построить дифференциальные классификаторы второго уровня (например, SVM — Support Vector Machines) и переобучать их при изменении структуры кластеров.

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

Здесь расскажем подробнее.

Для того, чтобы определить, к какому классу (вендору) относится новый документ, необходимо провести поиск и найти наиболее близкий и похожий на него кластер. Для этого мы применяем механизм обратного индекса (Рис. 3).

Рис. 3Рис. 3

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

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

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

5. Если документ ошибочно попал не в свою группу (на практике мы узнаем это, когда пользователь вносит исправление, а в нашем примере — из разметки по вендорам), то фиксируем ошибку и переходим к пункту 4.

Если следовать этому алгоритму, то получится, что в каждой группе окажутся только представители одного вендора. При этом для одного вендора может быть создано несколько групп, например, в зависимости от признаков документа.

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

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

FastML — новый механизм обучения на стороне клиента для поиска полей в документах

К механизму кластеризации мы добавили нашу новую разработку — технологию FastML. Она заменяет обучение гибких описаний, работает быстрее предыдущего метода, лучше адаптируется к разнообразию структуры документов и имеет ряд других преимуществ, о которых расскажем в этом блоке.

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

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

Алгоритм работы FastML

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

Работу FastML можно разделить на два этапа: обучение модели на определенном кластере и запуск этой модели на документах этого кластера. Важно отметить, что у каждого кластера своя обученная модель.

Работает это так:

1 этап. На этапе обучениясначала пользователь самостоятельно размечает нужные в документе поля (все или выборочно) — из общего множества файлов ему нужно выбрать 3–5 документов каждого типа. Для каждого размеченного поля детектируются возможные устойчивые комбинации взаимного расположения других полей (heatmap, или тепловая карта) и различных ключевых (частотных) слов. Взаимное расположение полей может определяться абсолютным или относительным расположением, или зоной допустимого распределения тех или иных полей или ключевых слов. Все найденные поля делятся на три группы:

  • устойчивые и вероятно правильно размеченные (те поля, для которых находятся устойчивые комбинации других полей и ключевых слов, и для которых эти комбинации повторяются или коррелируют от документа к документу);

  • ошибочно размеченные или размеченные единичным образом (те поля, для которых не находятся никакие устойчивые закономерности);

  • поля одного типа (например, total) с разными устойчивыми структурами/комбинациями на разных наборах документов считаются или несогласованными (если документы одного кластера или вендора) или выявляют разнородность документов, на которых они расположены.

Такая связка технологий позволяет в том числе решать задачу валидации разметки.

Завершив обучение, модель применяется в том же кластере для детектирования полей новых документов.

2 этап. Процесс применения новой модели можно разделить на три шага:

A)   Когда в кластер попал новый документ, модель находит в нем опорные элементы и строит по ним вероятностную карту расположения каждого поля. Наиболее яркие области тепловых карт будут указывать на возможные зоны расположения искомых полей. В этих местах модель и будет искать нужную для пользователя информацию.

B)    После того, как модель определила зоны поиска, из нее берутся все найденные слова для построения гипотез полей. Это может быть формат слов, заданный пользователем справочник, количество слов в поле, порядок следования слов друг за другом и т.д. Сами гипотезы строятся на основе знаний, которые модель получила во время обучения. Для каждой гипотезы формируется оценка специальным классификатором, который также был обучен на первом этапе.

C)    Когда гипотезы всех полей и оценки «уверенности» сформированы, запускается переборщик гипотез. Он выберет непротиворечивый вариант совокупного набора полей, которые взаимно не пересекаются, выберет максимальное число найденных полей с максимальной совокупной оценкой. Это и есть конечный вариант поиска нужных полей, который увидит пользователь.

Гибкие описания vs FastML

Изначальная идея обучения гибких описаний и FastML схожая — обе технологии учатся на загруженных документах. Однако принцип (и результат) их работы различен. Ниже наглядно это показали в таблице.

Этапы обработки документов

Гибкие описания + база данных

FastML + кластеризация

Загрузка документов

Качество работы технологии зависит от объема документов клиентов, на которых мы учимся

Минус: модель лучше работает на небольшом количестве документов

Работает одинаково хорошо на любом объеме загруженных документов

Раскладка документов на группы

Раскладываются по вендору на основе базы данных (БД)

Минус: накопление БД занимает много времени

Раскладываются с использованием технологии кластеризации (без необходимости вести БД)

Процесс обучения модели на размеченных 1–2 документах

Модель учит геометрические отношения элементов относительно друг друга  

Минус: есть ограничения на сложность геометрического представления взаимного расположения полей

Модель учится на распределении вероятностей нахождения поля. Конфликтов в данном подходе не возникает

Процесс запуска обученной модели для обработки новых документов в определенном кластере (вендоре)

Модель находит ключевые слова и проверяет их геометрические отношения

Минус: долго, не всегда точно, есть риск возникновения ошибок при большом количестве разнородных документов в обучении

После нахождения ключевых слов и других опорных элементов модель строит вероятностное распределение поля, затем определяет регионы возможного расположения поля.

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

Далее алгоритм на основе заданных правил (и формата) проверяет, подходят ли найденные слова

Как показала сравнительная таблица, новая технология FastML в связке с кластеризацией (Рис. 4) работает быстрее, чем гибкие описания, не требует обязательного накапливания и расширения базы данных вендоров, а также повышает качество извлеченных данных.

Рис. 4Рис. 4

Заключение

Нам удалось создать принципиально новое решение по обработке большого массива документов. FastML вместе с кластеризацией является state-of-the-art технологией, которая заметно превосходит по скорости и качеству все предыдущие наработки в этой области. Кроме того, она может встраиваться в low-code/no-code системы — эти решения сейчас очень востребованы у компаний.

Кстати, FastML уже работает в нашей новой low-code/no-code платформе. Именно благодаря этой технологии наши клиенты могут самостоятельно обучать решение определять и распознавать нужные типы документов в режиме реального времени. Но об этом расскажем в другом посте.

Также отметим, что FastML — это только первый шаг к обучению на стороне клиента. Сейчас мы работаем над возможностью последовательного обучения и FastML, и нейросети. Об этом тоже расскажем чуть позже. Так что следите за обновлениями!  

Кстати, если вы хотите помогать нам развивать эту и другие технологии, то у нас открыто несколько горячих вакансий с ML. Например, сейчас мы ищем Senior Software Developer (C++, ML), Team Lead (C++ / ML), Software Developer (C++, ML).

© Habrahabr.ru