OCR识别并提取关键内容:用大模型替换掉那繁琐的正则表达式吧
2024-9-12
| 2024-9-13
Words 1707Read Time 5 min
type
Post
status
Published
date
Sep 12, 2024
slug
summary
ocr提取具体的内容要写一大堆逻辑,看看如何用大模型一键解决吧
tags
开发
category
技术分享
icon
password
😀
背景: 假设有这样一个项目:识别出一张支付截图中的支付金额和支付时间。 常规思路: 1. 用ocr模型,比如ppocr v4,先识别出文字 2. 为了尽可能覆盖所有情况,写一堆正则表达式去匹配支付金额和支付时间 大模型出来之后,直接把ocr识别的内容丢给大模型,然后想要什么数据让大模型去提取,整个流程就会变得简短许多。
 
支付图片举例:
notion image
 
notion image
notion image
notion image
以第二张图片为例,先看看ocr识别的结果,ocr的识别逻辑是按照行进行的,不同行之间这里用\n分割:

📝 传统正则

支付金额

现在的支付金额大体上是 【几个数字.2位小数的形式】,所以可以用 r”\d+\.\d{2}” 这种形式的正则表达式去匹配,大体上又有些许的不同,所以需要写很多逻辑去囊括这些情况
  1. 第一张图片的金额下面有一个余额0.00,虽然满足正则表达是,但是不是我们要的数字;
  1. 第三张图片的金额千分位用逗号隔开了;
  1. …一些未知情况

支付时间

支付时间又有不同的样式,比如:
  1. 第一张图片 2024-06-28 09:50:46
  1. 第二张图片 2024年2月26日 14:25:34
  1. 第四张图片 2024-09-13 00:09
  1. … 一些未知情况
 
仅仅识别一个支付金额以及一个支付时间,要考虑的情况已经很多了。

🤗 大模型提取

将ocr识别的内容给到大模型,并指定大模型的输出格式,提示词如下:
在提示词中指定了支付金额要保留小数点两位,支付时间格式统一为[YYYY-mm-dd HH:MM:SS],这样大模型就会按照规定的格式进行内容输出。
以第二张图片为例,将{context}替换成ocr识别的内容:
这里我们将图片中的时间改一下,帮助我们更好的看一下大模型的效果,将2024年2月26日 14:25:34改成2024年2月26日14:25
qwen7b的回答:
可以看到按照规定的格式进行输出了,年和月分别替换成了-,缺少的秒自动补成了00。
这个时候只需要写一点小小的逻辑提取大模型回答的金额和时间即可。当然大模型有一定的概率可能没有按照我们给定的格式进行输出,这个时候我们逻辑解析金额和时间可能会报错。这个处理起来也很简单,多让大模型生成两次,直到解析对了。只要规定好相应的参数,大模型给定的结果一般都不会变的。7b的生成速度也很快,不会说识别了半天才出结果。

🍉 总结

使用大模型进行ocr识别后的关键内容提取,这里只是提供了一些思路,最终选择哪种方式还是要根据业务来。如果你要提取的内容很固定,不会变来变去的,当然可以使用正则,效果好还速度快。当然,如果你要提取的种类很多,而且还要考虑各种各样的情况,甚至有些情况还可能是未知的,不妨考虑考虑大模型这种方式。
甚至你可能还会选择多模态大模型,比如InternVL等,但综合下来,我认为OCR+LLM在大多数业务场景中或许都是一个更优的选择。

📎 参考文章

 
💡
有关文章上的问题,欢迎您在底部评论区留言,一起交流~
  • 开发
  • Qanything 2.0项目部署启动手把手教程QAnything 1.4.1 文档处理逻辑以及检索逻辑分析
    Loading...