Mailbag: Parsing Fields from PDFs—When to Use Machine Learning?
Разработчик K спрашивает, стоит ли применять машинное обучение для извлечения полей из PDF, если regex-скрипт ошибается примерно в 1 случае из 100 из-за опечаток в слове «Quote» или в самом номере котировки. Eugene Yan рекомендует вместо ML использовать детерминированные методы — расстояние Левенштейна и сравнение доли совпадающих символов — для обнаружения опечаток в ключевом слове, а для ошибок в номерах помечать подозрительные совпадения для ручной проверки. По его мнению, 99% recall — отличный результат, а ML вряд ли его улучшит, при этом будет сложнее и дороже в реализации.
Mailbag: Parsing Fields from PDFs—When to Use Machine Learning?
Почтовый мешок: Извлечение полей из PDF — когда стоит применять машинное обучение?
[ machinelearning 📬 ] · 4 мин. чтения
K writes:
K пишет:
I am more a developer than a data science or ML person. I got a question to ask and I am not exactly asking for an answer to a close-ended question. More like I am asking for directions for a more open-ended quest.
I have a situation where I have a script that reads a PDF to look for a particular . It then takes that quote number and assumes it's correctly inputted from the 3rd party and then looks up a database that I control to find the corresponding data row and its expected total value.
Then performs a comparison: is the total value in the PDF the same as the total value expected in the database?
That’s all the script does. And to look for the quote number in the PDF the script uses regex.
Now this is all fine and dandy if the PDF is machine generated with a consistent formatting. However, I faced occasional issues (like around 1 in 100 cases) where there’s typo or misspelling.
The misspelling causes the not to be found even though it is actually there.
The logic is Quote: [The quote number is actually here] but I get misspellings such as Qoute:[The quote number is actually here]. I have tried to patch this with increasing the regex but it will never be exhaustive.
There are also typos in the quote number itself.
They mean
Quote: Q20-100011
But they show
Quote: Q20-100101
And the unfortunate thing is sometimes, there are actual data rows that match the typo causing the wrong comparisons.
I have never implemented any ML before and I also not sure whether it’s even worth it. Right now it’s more like human discovery of error after the fact to correct this kind of mistakes.
So my question is: How do I evaluate if I should consider ML in a situation like the above and if so what kind should I be looking at? HOw do I consider the tradeoffs? Assume I am totally new to ML.
Я скорее разработчик, чем специалист по data science или ML. У меня есть вопрос — и я не прошу ответа на закрытый вопрос. Скорее ищу направление для более открытого исследования. У меня есть ситуация: скрипт читает PDF и ищет определённый номер. Затем берёт этот номер котировки и, предполагая, что третья сторона ввела его правильно, ищет в моей базе данных соответствующую строку и ожидаемую итоговую сумму. После этого выполняется сравнение: совпадает ли итоговая сумма в PDF с ожидаемой суммой в базе данных? Вот и всё, что делает скрипт. Для поиска номера котировки в PDF скрипт использует regex. Всё прекрасно работает, пока PDF сгенерирован автоматически с единообразным форматированием. Однако примерно в 1 случае из 100 возникают проблемы — опечатки или орфографические ошибки. Из-за ошибки в написании номер не находится, хотя он на самом деле присутствует в документе. Логика подразумевает Quote: [Номер котировки на самом деле здесь], но встречаются написания вроде Qoute:[Номер котировки на самом деле здесь]. Я пытался исправить это, расширяя regex, но он никогда не покроет все варианты. Бывают также опечатки в самом номере котировки. Имеется в виду Quote: Q20-100011, но отображается Quote: Q20-100101. И к сожалению, иногда в базе данных существуют реальные строки, совпадающие с опечаткой, что приводит к неверным сравнениям. Я никогда не внедрял ML и не уверен, что оно вообще оправдано. Сейчас ошибки обнаруживаются людьми постфактум. Мой вопрос: как мне оценить, стоит ли рассматривать ML в подобной ситуации, и если да — на какое именно направление смотреть? Как мне взвесить компромиссы? Считайте, что я полный новичок в ML.
Hey K, thanks for reaching out! I think in this case, you have an excellent solution already—99% recall (i.e., error in 1 out of 100) is a great result.
Привет, K, спасибо за вопрос! Думаю, в данном случае у тебя уже есть отличное решение — 99% recall (то есть ошибка в 1 из 100 случаев) — это превосходный результат.
Now, about those errors:
Теперь насчёт этих ошибок:
Опечатки в слове «quote», мне кажется, можно в значительной мере решить с помощью расстояния Левенштейна. То есть для каждого слова считаем, сколько символов нужно изменить, чтобы оно стало словом «quote». Для «qoute» потребуется замена двух символов, а для «route» — одного. Можно также дополнить это вычислением доли символов, полностью совпадающих с «quote». Тогда у «qoute» будет 100%-е совпадение, а у «route» — 80%-е. Вместе оба подхода должны помочь в обнаружении опечаток в слове «quote».
About errors in the quote number itself: This is tricky.
Насчёт ошибок в самом номере котировки: тут сложнее.
Если в базе данных удаётся найти котировку, достаточно близкую к котировке из PDF (по двум описанным выше подходам) и с идентичной суммой, это стоит пометить. Тем не менее, лучше всего помечать такие случаи для проверки человеком, который вручную подтвердит или отклонит исправление ошибки. Мы не хотим ошибочно находить котировки, которых нет в базе данных. Это зависит от того, насколько уникальны значения котировок в вашей базе. Если встречаются повторяющиеся котировки с одинаковыми суммами, возможно, придётся дополнительно сопоставлять по дате.
In both cases, I think using deterministic logic is far simpler, faster, and easier than machine learning. ML will have some error, and would be unlikely to improve on the 99% recall that you already have.
В обоих случаях, на мой взгляд, детерминированная логика гораздо проще, быстрее и удобнее, чем машинное обучение. ML будет давать некоторую погрешность и вряд ли улучшит те 99% recall, которые у вас уже есть.
K’s reply:
Ответ K:
So from your working experience, it’s okay not to achieve 100% recall.
So even with deep learning solutions, there’s an acceptance within your field not to hit 100% yes?
То есть, исходя из вашего рабочего опыта, можно не достигать 100% recall. Даже при использовании решений на основе глубокого обучения в вашей области принято мириться с тем, что 100% недостижимы, верно?
Yes, of course! IMO 99% recall is excellent.
Да, конечно! На мой взгляд, 99% recall — это отличный результат.
Have a question for me? Happy to answer concise questions via email on topics I know about. More details in How I Can Help.
Есть вопрос ко мне? Буду рад ответить на краткие вопросы по электронной почте по темам, в которых разбираюсь. Подробнее — в разделе Чем я могу помочь.
Join 11,800+ readers getting updates on machine learning, RecSys, LLMs, and engineering.
Присоединяйтесь к 11 800+ читателям, которые получают обновления о машинном обучении, рекомендательных системах, LLM и инженерии.