评估结构化文档中的信息提取

数据挖掘 评估 ocr
2022-02-26 19:58:50

我正在尝试寻找指标来评估多种算法,以便从已经 OCRed 发票中提取关键信息。例如,给定发票,这样的算法可以发现:

{
    "company": "STARBUCKS STORE #10208",
    "date": "14/03/2015",
    "address": "11302 EUCLID AVENUE, CLEVELAND, OH (216) 229-0749",
    "total": "4.95",
}

正式地,我将任务定义为一个函数f,它对于给定的发票文档D返回一个条目字典:{ field1 : value1 , field2 : value2 ,...}。

最初,我考虑使用精度、召回率和 F1 度量,假设如果字段及其值与基本事实完全匹配,则每个字典条目都被标记为正确。我从ICDAR 2019 Robust Reading Challenge on Scanned Receipts OCR and Information Extraction借用了这种方法

然而,基于精确字符串匹配的度量的问题在于,它们甚至会惩罚小错误:缺失/冗余的单词、字符和间距的单一差异。这些错误不仅可能源于不完善的信息提取算法,还可能源于错误的 OCR 算法。不幸的是,我无法单独测试信息提取(即,给定 100% 完美的 OCRed 输入)。

因此,我正在寻找一些更宽松的指标。我的可能性是什么?该领域使用了什么?

我想到的一些想法:

  • 使用字符/单词的 Levenstein 距离计算两个文本之间的距离
  • 如果距离小于阈值 X,则考虑两个文本匹配。
  • 或者在最终测量中包含有关距离的信息,例如对其进行标准化和对每个文档进行微平均。
1个回答

我曾使用 OCR 处理结构化文本。即使在读取内容时,OCR 也容易出错,字符串排列的微小变化会导致误报。我使用了余弦相似度和 Levenstein 距离。我使用pip install ftfyFlashtext blurwuzzy、 chardet 整理了数据,并设置了 97% 的阈值,并为可能是无意/错别字或 OCR 无法读取字符等的错误提供 2% 的缓冲区。使用这种方法,您只是放松在 2% 的误差上,您仍然可以使用相同的 Precision、Recall 或 Specificity 和 Accuracy 指标。我们基于新数据,您可以收集观察结果并调整运行时间的阈值。是的,使您的阈值可配置而不是硬编码,这将更容易运行多个实验。

我希望这有帮助。