newsmode
search
Меню
arrow_back Назад

Mailbag: Parsing Fields from PDFs—When to Use Machine Learning?

auto_awesomeКраткое саммари

Разработчик K спрашивает, стоит ли применять машинное обучение для извлечения полей из PDF, если regex-скрипт ошибается примерно в 1 случае из 100 из-за опечаток в слове «Quote» или в самом номере котировки. Eugene Yan рекомендует вместо ML использовать детерминированные методы — расстояние Левенштейна и сравнение доли совпадающих символов — для обнаружения опечаток в ключевом слове, а для ошибок в номерах помечать подозрительные совпадения для ручной проверки. По его мнению, 99% recall — отличный результат, а ML вряд ли его улучшит, при этом будет сложнее и дороже в реализации.

Почтовый мешок: Извлечение полей из PDF — когда стоит применять машинное обучение?

[ machinelearning 📬 ] · 4 мин. чтения

K пишет:

Я скорее разработчик, чем специалист по data science или ML. У меня есть вопрос — и я не прошу ответа на закрытый вопрос. Скорее ищу направление для более открытого исследования. У меня есть ситуация: скрипт читает PDF и ищет определённый номер. Затем берёт этот номер котировки и, предполагая, что третья сторона ввела его правильно, ищет в моей базе данных соответствующую строку и ожидаемую итоговую сумму. После этого выполняется сравнение: совпадает ли итоговая сумма в PDF с ожидаемой суммой в базе данных? Вот и всё, что делает скрипт. Для поиска номера котировки в PDF скрипт использует regex. Всё прекрасно работает, пока PDF сгенерирован автоматически с единообразным форматированием. Однако примерно в 1 случае из 100 возникают проблемы — опечатки или орфографические ошибки. Из-за ошибки в написании номер не находится, хотя он на самом деле присутствует в документе. Логика подразумевает Quote: [Номер котировки на самом деле здесь], но встречаются написания вроде Qoute:[Номер котировки на самом деле здесь]. Я пытался исправить это, расширяя regex, но он никогда не покроет все варианты. Бывают также опечатки в самом номере котировки. Имеется в виду Quote: Q20-100011, но отображается Quote: Q20-100101. И к сожалению, иногда в базе данных существуют реальные строки, совпадающие с опечаткой, что приводит к неверным сравнениям. Я никогда не внедрял ML и не уверен, что оно вообще оправдано. Сейчас ошибки обнаруживаются людьми постфактум. Мой вопрос: как мне оценить, стоит ли рассматривать ML в подобной ситуации, и если да — на какое именно направление смотреть? Как мне взвесить компромиссы? Считайте, что я полный новичок в ML.

Привет, K, спасибо за вопрос! Думаю, в данном случае у тебя уже есть отличное решение — 99% recall (то есть ошибка в 1 из 100 случаев) — это превосходный результат.

Теперь насчёт этих ошибок:

Опечатки в слове «quote», мне кажется, можно в значительной мере решить с помощью расстояния Левенштейна. То есть для каждого слова считаем, сколько символов нужно изменить, чтобы оно стало словом «quote». Для «qoute» потребуется замена двух символов, а для «route» — одного. Можно также дополнить это вычислением доли символов, полностью совпадающих с «quote». Тогда у «qoute» будет 100%-е совпадение, а у «route» — 80%-е. Вместе оба подхода должны помочь в обнаружении опечаток в слове «quote».

Насчёт ошибок в самом номере котировки: тут сложнее.

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

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

Ответ K:

То есть, исходя из вашего рабочего опыта, можно не достигать 100% recall. Даже при использовании решений на основе глубокого обучения в вашей области принято мириться с тем, что 100% недостижимы, верно?

Да, конечно! На мой взгляд, 99% recall — это отличный результат.


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


Присоединяйтесь к 11 800+ читателям, которые получают обновления о машинном обучении, рекомендательных системах, LLM и инженерии.