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

news2024/11/15 7:52:09

  过去四年时间,都在处理结构化数据的存储优化相关的工作。最近一段时间在做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卖的越来越便宜了。

文档解析几个重要的点

标题是非常重要的信息

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1927078.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DockerSecret+DockerConfig介绍及使用

DockerSecret 查看官网介绍,Secret是daemon API 1.25之后引入的,它运行在swarm上的命令。 生产环境下,为了安全,我们不能把各项目的配置密码写入到配置文件。 我们可以引入docker的secret方式保护密码。 场景: 用…

java数组之——了解十大排序算法(动画版)

详细的冒泡排序和快速排序请查看文章:java数组之冒泡排序、快速排序-CSDN博客https://blog.csdn.net/weixin_44554794/article/details/140361078 一、插入排序 二、希尔排序 三、选择排序 四、堆排序 五、冒泡排序 六、快速排序 七、归并排序 八、计数排序 九、桶…

家庭海外仓怎么拓客:策略落地方法汇总

家庭海外仓因为其高度灵活性和独有的价格优势,还是受到很多跨境卖家欢迎的。不过作为家庭海外仓的经营者,想在这么激烈的竞争下稳定、持续的拿到客户,还是有一定难度的。今天我们就专门来聊一下家庭海外仓的拓客问题。 家庭海外仓在拓客上面临…

【开源】开源数据库工具推荐

Mysql开源工具推荐 dbeaver下载网速太慢了,这么好用的开源工具,可以从镜像站中下载: 下载地址: https://mirrors.nju.edu.cn/github-release/dbeaver/dbeaver/24.1.1/ Redis开源工具推荐 好看好用,UI真是做的很不…

MyBatis where标签内嵌foreach标签查询报错‘缺失右括号‘或‘命令未正确结束‘

MyBatis <where>标签内嵌<foreach>标签查询报错’缺失右括号’或’命令未正确结束’ <where>标签内嵌<foreach>标签 截取一段脱敏xml&#xff0c;写明大概意思 <select id"queryLogByIds" resultMap"BaseResultMap">SELE…

ts使用typeorm实现db创建

1.新建基础架构 ①创建项目文件名, mkdir ‘名称’ ->cd ‘文件名’ -> mkdir ‘src’->npm init mkdir fileName cd fileName mkdir src npm init在当前项目名目录下执行npm init,按照默认执行就会创建package.json. 之后执行 npm i jest/globals casl/ability bcr…

如何快速区分电子原件极性

表贴式电阻电容无极性 1表贴式.二极管 如图所示:有横杠的表示负极&#xff08;竖杠标示&#xff09;&#xff0c;注意一定要查阅数据手册在引脚信息栏一般会有 铝电解电容 手册一般会对正负极有说明 钽电容有极性 发光二极管 芯片 一般规律&#xff1a;1.看丝印朝向正对丝印的…

【C++】静态成员变量和静态成员函数(static)

为了实现多个类公用一个成员变量或函数诞生了static&#xff0c;静态成员变量和静态成员函数。 static成员变量 格式 class A { public:static 静态成员变量类型 静态成员名; } }静态成员变量必须在类外进行初始化&#xff0c;类内初始化会报错 class A { private:st…

氢气传感器TGS2616在氢燃料电池行业的应用

氢燃料电池是一种将氢气和氧气的化学能直接转换成电能的发电装置。其基本原理是电解水的逆反应&#xff0c;把氢和氧分别供给阳极和阴极&#xff0c;氢通过阳极向外扩散和电解质发生反应后&#xff0c;放出电子通过外部的负载到达阴极。 氢燃料电池具有无污染、噪声低、高效率…

excel根据数据批量创建并重命名工作表

需求 根据一列数据&#xff0c;批量创建并重命名工作表 做法 1. 右键该sheet&#xff0c;选择查看代码 2. 输入VBA代码 正向创建 Sub create_sheets_by_col()Dim num% 定义为integer*num Application.WorksheetFunction.CountA(Sheet1.Range("A:A")) num是非空…

unity宏编译版本

在写c程序的时候我们通常可以用不同的宏定义来控制不同版本的编译内容&#xff0c;最近有个需求就是根据需要编译一个完全体验版本&#xff0c;就想到了用vs的那套方法。经过研究发现unity也有类似的控制方法。 注意这里设置完后要点击右下的应用&#xff0c;我起先就没有设置…

Docker 安装ros 使用rviz 等等图形化程序

Docker 安装ros 使用rviz 等等图形化程序 ubuntu 版本与ros 发行版本对应 如何安装其它版本ros 此时考虑使用docker 易于维护 地址&#xff1a; https://hub.docker.com/r/osrf/ros 我主机是 ubuntu22.04 使用这个标签 melodic-desktop-full 1 clone 镜像到本机 docker pu…

云原生简单综合实验

需求&#xff1a;左边服务器搭建一个web服务&#xff0c;名字为www.rhce.com&#xff0c;目录/nfs/rhce为右边服务器共享的/rhce目录 搭建一个dns解析rhce.com域 右边开启autofs服务为左边服务器提供目录 第一步下载相关软件 左边服务器 [rootnode ~]# yum install nginx…

Vue 新指令 v-memo 案例精析与性能优化

v-memo 用于缓存组件的渲染结果。它通过指定依赖项来决定何时重新渲染组件&#xff0c;只有当依赖项的值发生变化时&#xff0c;组件才会重新渲染&#xff0c;从而提高性能。 使用场景&#xff1a;v-memo 适用于组件的渲染结果在依赖项不变的情况下不应该频繁更新的场景&#x…

Windows 虚拟机服务器项目部署

目录 一、部署JDK下载JDK安装JDK1.双击 jdk.exe 安装程序2.点击【下一步】3.默认安装位置&#xff0c;点击【下一步】4.等待提取安装程序5.默认安装位置&#xff0c;点击【下一步】6.等待安装7.安装成功&#xff0c;点击【关闭】 二、部署TomcatTomcat主要特点包括&#xff1a;…

抖音视频图文根据ID获得评论信息网站源码

抖音视频图文根据ID获得评论信息单页源码&#xff0c;id是视频的id&#xff0c;可以自定义第几条评论开始&#xff0c;不填默认为0&#xff0c;评论数量最大数量50&#xff0c;默认是20。 接口返回参数&#xff1a; "comments": 评论信息集合 { "uid": 评…

【Android面试八股文】请描述一下 android 的系统架构?

Android 是一个基于 Linux 的开源软件堆栈,针对多种不同设备类型打造。下图显示了 Android 平台的主要组件。 早期的Android架构如下图所示 官方网站最新的Android平台架构图,如下所示: Linux 内核 Android 平台的基础是 Linux 内核。例如,Android 运行时 (ART) 依赖…

重生奇迹MU 群战王牌

圣导师是重生奇迹MU游戏中八大职业之一&#xff0c;拥有风度翩翩、潇洒自如的形象和神一样的实力。无论是刷怪、PK、打boss还是混战&#xff0c;圣导师都表现出压制其他职业的强大气势。因此&#xff0c;这个职业在游戏中备受欢迎&#xff0c;人气非常高。 实力强大的二代隐藏…

<数据集>钢板缺陷检测数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;1986张 标注数量(xml文件个数)&#xff1a;1986 标注数量(txt文件个数)&#xff1a;1986 标注类别数&#xff1a;7 标注类别名称&#xff1a;[crescent gap, silk spot, water spot, weld line, oil spot, punchin…

代码检查规则语言CodeNavi中代码语句的节点和节点属性

本文分享至华为云社区《CodeNavi 中代码语句的节点和节点属性》。作者&#xff1a;Uncle_Tom 1. 前期回顾 《寻找适合编写静态分析规则的语言》 根据代码检查中的一些痛点&#xff0c;提出了希望寻找一种适合编写静态分析规则的语言。 可以满足用户对代码检查不断增加的各种需求…