关于文档理解相关工作的一些总结

  过去四年时间,都在处理结构化数据的存储优化相关的工作。最近一段时间在做RAG相关的工作。非结构数据的存储与检索,接触的也越来越多。这篇文章聊聊最近一段时间关于文档理解方面的一些心得。

  

文档理解

文档理解旨在从非结构化文档中提取信息并将其转化为结构化数据。虽然计算机视觉和自然语言处理(NLP)是文档理解的重要组成部分,但它是一个独特的领域,需要两者的结合。

文档理解的重要性

我喜欢用一句经常说的话来概括:“进来的是垃圾,出去的也是垃圾” 。所以如何处理好非结构化的数据,就异常的重要。解析的好,处理的干净,才能给后边的过程省事。

文档解析需要的技术能力

NLP  、计算机视觉、多模态、一定的工程能力

通常使用计算机视觉方面的技术,来解决非结构话文件的版面分析工作,以获取页面的不同的元素包括但不限于标题,表格,图片,段落。以及位置信息。 通常我们拿到的文件可能是扫描件,这当前只有计算机视觉一种解决方法,就是使用OCR进行文字提取。

我们通常还想要从非结构化的文件中,提取超过文件本身的信息。例如抽取关键词,抽取事件,摘要,关系等等。

多模态始终是无法绕过的一个问题。当然,当前多模态可能需求量还不是那么大。我们通常也希望能识别图片中所描述的事情。这一般可以通过image2text来解决。入门级别的东西,可以在huggingface上去看看。https://huggingface.co/models?pipeline_tag=image-to-text&sort=trending

文档理解的挑战

在我日常工作中,感受到的文档理解,最困难的是文档解析。因为我们只能对已经看到的文件进行处理。测试很难覆盖到全部的文件。

文件类型太多了,txt、doc、excel、pdf、html、markdown、ppt等等。太多太多了。鬼知道究竟会有多少种文件类型。即使对于同一种文件类型,也会有非常多不同的文件。例如PDF文件,可能是论文,可能是简历,可能是法律文件,可能是财务报表。又例如excel文件,有的是类似于数据库数据的,有的是财务报表的,还有奇奇怪怪的,例如单个sheet里边存了多个表格。形式不一的表格再加上单元格合并问题,会非常麻烦。

现有的解决方案,以及最新的解决方案

这里分享一个很有意思的感受。国内老板特别喜欢自己搞,就算有现成的,只要不开源不免费,即使已经很廉价了,也要自己搞。这会非常浪费时间。过来的老板更注重产品形态,快速的出东西,所以选择已有的saas云服务。这也是国外环境更好的一个原因吧,在国外即使一个很小的点,可能都有小的团队已经在提提供saas服务了。

我个人的经验。在文档解析方面,三个人几个月过去了,也不会有什么好的结果。文档解析就是一个无底洞大坑。如果刚开始做,真的劝退。如果我是老板,我宁可花点小钱,去买saas服务。这块我们调研了几家,其中庖丁和阿里云的文档解析不错。

当然,如果真的下决心就要自己搞,也不是不行,只是时间问题。这里我分享一些开源的方案吧。可能有限推荐百度开源的paddlepaddle,它已经有OCR和版面分析了,效果也还不错。但是要知道只要是模型,就不太可能做到百分之百。PaddleOCR/ppstructure/recovery/README_ch.md at main · PaddlePaddle/PaddleOCR · GitHub

 对于程序可以读取的文件,例如非扫描件PDF,我们是可以读取到内容的。这些需要依靠规则去解析,还蛮复杂的。后去文件的fulltext很容易,但是想要解析出来标题绝对不是一件容易的事情。想要解析出来表格也很困难。无法通过规则来定位哪里是表格,这里推荐使用计算机视觉的版面分析来定位,然后再用专门的工具去对定位后的表格进行解析。

这里还是想要分享新的玩法:现在是24年,大模型的的时代,文档解析多和大模型去结合,通常能够让事情变简单很多。当然成本会有点、不够我个人觉得这不是太大的问题。大模型的token卖的越来越便宜了。

文档解析几个重要的点

标题是非常重要的信息

文件数据的标准化转换比较重要

表格解析很重要,很多知识和消息藏在表格中,特别是财报类。

对于文档,不同粒度蕴含着不同的知识。例如句子里边可能包含的原子问题就一两个。对于段落,很有可能几个段落在描述一个件事情。

相关推荐

  1. 关于C语言提高一些总结

    2024-07-16 02:54:02       51 阅读
  2. 关于自动驾驶概念学习和一些理解

    2024-07-16 02:54:02       50 阅读
  3. C++关于拷贝构造函数一些理解

    2024-07-16 02:54:02       26 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-16 02:54:02       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-16 02:54:02       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-16 02:54:02       57 阅读
  4. Python语言-面向对象

    2024-07-16 02:54:02       68 阅读

热门阅读

  1. GitHub每日最火火火项目(7.15)

    2024-07-16 02:54:02       19 阅读
  2. std::getline

    2024-07-16 02:54:02       21 阅读
  3. ARIMA模型(AutoRegressive Integrated Moving Average Model)

    2024-07-16 02:54:02       19 阅读
  4. linux高级编程(sqlite数据库调用)

    2024-07-16 02:54:02       22 阅读
  5. 欠拟合与过拟合

    2024-07-16 02:54:02       21 阅读
  6. [C/C++入门][输入输出]2、字符三角形

    2024-07-16 02:54:02       22 阅读
  7. Unsloth 微调 Llama 3

    2024-07-16 02:54:02       19 阅读
  8. Pyinstaller打包后__file__定位当前绝对路径错误

    2024-07-16 02:54:02       20 阅读