当前位置: 首页 > news >正文

用户的声音 | 文档结构化信息提取方案测评:LLM、开源模型部署与云端API,谁是合适选择?

文档预处理之文本化

近日,我们收到来自专业用户的使用心得,浅析结构化信息提取技术、技术选型及一些个人测试。

结构化信息提取的重要性

数据作为大模型时代的核心生产资料,其结构化处理能力直接影响AI系统的实用价值。尽管知识图谱、RAG等技术依赖海量文本资源,但现实中的历史档案、法律文书等重要数据多以扫描件、图像等非结构化形式存在,导致信息抽取、语义解析等环节面临显著技术障碍。

当前结构化信息提取技术虽呈现多样化发展,但对于开发者而言,结构化信息提取的“落地”与“可用性”才是真正的考验,研究论文中的指标和高精度模型在生产环境中可能面临性能瓶颈、成本过高、部署难度大等现实挑战。

本文将梳理主流技术方案,立足实际需求,结合一系列实测数据与实践经验,评估各方法在不同场景下的表现与优劣势。从技术指标到生产可行性,我们将为开发者提供一份实用的兼顾算法效能与部署成本的参考指南。

评价标准

作为测评,首先确定标准,目标输出格式设定为markdown。

Markdown 作为一种增强的文本格式,相较纯文本而言,为数据保有了其中固有的结构(表格、标题、列表等)。同时作为大模型原生支持的文本格式,使用markdown作为输入格式也能让输出效果更好。

对于测试结果要求,首先,最重要的标准是结果可用。我们定了3个正确性指标:其中,文本准确性是所有文本解析的基础,有研究[1]指出,解析正确性将显著影响RAG的效果;表格准确性则是一个难点,尤其是有多个单元格合并的情况下,很难识别准确;标题正确性主要考察标题层级是否正确。其次需要评估识别速度、成本等问题。考虑到有些组织内信息不能上传外网,添加了隐私性,即能否本地部署这一指标。最后考虑到有些方法路径尚不成熟,部署复杂度大,因此能否便捷使用也是需要考察的点。最终得到的评价表格如下:

评价表格:*

名称

访问地址

文本正确性

表格正确性

标题正确性

识别速度

成本

本地部署

便捷使用

  • 由于参与后处理的是LLM,所以关于文本识别准确有一定容错,如果需要关于正确性的量化评价,可以采用Markdown Tester。

测评

使用的待测试pdf:随机选取的一份上交所上市公司的2023年年报,全文193页。

金融年报是电子文档中相对复杂的一类,文字密度大,表格复杂度高,标题层级多,对模型能力有较大考验。遂选取之作为测试素材。

基于大模型的识别方案举例

市面上流行的几个开源pdf转markdown方法,大体可以分为两种,一类走传统版面分析+公式表格识别+OCR方案,另一类则是走视觉大模型路线。

利用大模型执行pdf转markdown算是一种逻辑上比较容易的办法,借助大模型本身强大的视觉识别能力,进行力大砖飞的转换。

从原理上,这种方法可以自如地进行转换,同时可以在转换过程中保留尽可能多的视觉信息,基础的诸如标题层级,进阶的还可以对图片进行一定的语义解释。

视觉大模型的接口也容易获得,有条件的情况下可以本地部署。

本次实验采取识别能力靠前[2]且常用的gpt-4o模型配合 gptpdf 来进行实验:

测试

gptpdf的封装度较高,且依赖较少,一次pip即可安装。

如果是使用openai服务的话,只需填写上自己的key即可。如果自己有大模型部署的话,也可改成自己的代理地址,也可使用本地的视觉模型。

测试代码用的是单线程,由于速度较慢远低于预期,遂只拆出前30页进行测试。效果如下:

可以看到,问题还是比较多的,比如幻觉问题:

大模型幻觉出了一些奇怪的标题。

识别结构不稳定:

此处本应是一个表格。

我使用的是gptpdf默认的prompt,可能有优化空间。但是效果的确不尽如人意。

而且速度也是有够慢,仅仅三十页运行了477.34s,就算可以多线程,单页16s的开销也使其很难用于快速文档解析场景。

小结

名称

访问地址

文本正确性

表格正确性

标题正确性

识别速度

成本

本地部署

便捷使用

gptpdf

https://github.com/CosmosShadow/gptpdf

偶有差错

语义正确

格式错误

基本无误

16s/页

本地算力/gpt4o 约0.112¥/页(含读取和输出)

可行(基于视觉大模型,显存要求高)

部署便捷

本次测试还有一些可以优化的点,例如使用经过调试的提示词,或者换用对中文视觉支持更好的大模型。但该方案整体上价格偏高,单管道处理速度也较慢,除非和一些基于大模型的预处理进行步骤合并,否则不推荐使用。

基于本地OCR的识别方案举例

相对视觉大模型方案,OCR方案则小巧且复杂,其使用较小的模型各司其职,并对结果进行拼接。其算力要求相对低的特点也使其适用于本地部署,一个广受好评的解决方案是MinerU,作为开源的数据提取工具,目前在github上已经有24.3k stars.

测试

minerU的安装相对复杂些,且如果要安装gpu版本需要额外的步骤。

该方案是完全开源的,好消息是有些组件可以根据需求定制化更改。坏消息是,可能有一些bug,需要查issues自行修复。

解析速度还算过关,在i7-2700+3090上运行,平均4.52s每页。在不同阶段使用的算力硬件也不同,多线程情况下速度或许会更快。

值得注意的是,由于markdown格式表格不易于显示复杂表,minerU的默认表格识别将会把表格转换为html格式,从纯文本打开的话会像是这样:

issues中有人给出了能转换为markdown格式的替代方案,但是这同样需要额外的配置,在此暂不讨论。

来看看效果:

标题只有一层,即是标题/不是标题。在表格识别能力上偏弱,偶尔会出现例如:

无限复读机;

换页时文本错误/表格结构错误。

小结

名称

访问地址

文本正确性

表格正确性

标题正确性

识别速度

成本

本地部署

便捷使用

MinerU

https://github.com/opendatalab/MinerU

基本正确

较差

只能简单区分是否为标题,且识别准确性不高

正相关于硬件算力(i7-2700+3090上4.52s/页)

本地部署(硬件折旧+电力损耗)

可本地部署

不甚便捷

大概是开源领域最好的ocr方案了,如果有本地算力且文件保密要求高的话还是比较推荐的。默认的html格式个人认为有些鸡肋,不能保证准确性,同时也不利于大模型读取。先前提到的转换为markdown格式的替代方案我也尝试过,能一定程度减少识别错误,但会增加使用难度,且还是有较多错误。

基于云端OCR的识别方案举例

如果项目没有本地部署需求,那么云端OCR是个好方案,价格相对大模型方法低廉许多,且响应速度快。横评了一众中文OCR方案,Textin的数据是最好的。

测试

速度奇快,一份193页的pdf文件仅消耗了13s,几乎是其余方案的百倍。

几乎没有错误,只是偶有标题会被漏标:

只有极复杂的表格才能使其产生小错误:

原表格:

识别后:

小结

名称

访问地址

文本正确性

表格正确性

标题正确性

识别速度

成本

本地部署

便捷使用

TextIn

https://www.textin.com/document/pdf_to_markdown

基本正确

基本正确

层级支持,偶有错误

极快,平均0.07s/页

0.05¥/页

可定制

非常便捷

综合下来是速度且效果最好的OCR方案了,适用大多数场景,非常推荐。

大结论

总表:

名称

访问地址

文本正确性

表格正确性

标题正确性

识别速度

成本

本地部署

便捷使用

gptpdf

https://github.com/CosmosShadow/gptpdf

偶有差错

语义正确

格式错误

基本无误

16s/页

可行(基于视觉大模型,显存要求高)

可行

部署便捷

MinerU

https://github.com/opendatalab/MinerU

基本正确

较差

只能简单区分是否为标题,且识别准确性不高

正相关于硬件算力(i7-2700+3090上4.52s/页)

本地部署(硬件折旧+电力损耗)

可本地部署

不甚便捷

TextIn

https://www.textin.com/document/pdf_to_markdown

基本正确

基本正确

层级支持,偶有错误

极快,平均0.07s/页

详见官网

可定制

非常便捷

从效果上,几种方法都在可接受的范围内。

视觉大模型方案成本高昂且可靠性较差,尽管近来有较多类似功能的开源仓库,但效果较差,价格高,速度慢,因此不建议使用此类方案。

从部署成本来说,如果有较强的本地算力,用量大且成本有限,建议使用本地OCR识别方案;如果对精确度要求高,资金充足,则建议使用云端OCR的识别方案;如果对精确度和数据安全都有较高的要求,可以选择TextIn本地部署。

最后附上测试代码和结果,也可以帮助你便捷完成批量转换。

mdfy_test:https://github.com/RwandanMtGorilla/mdfy_test

参考文献

[1] OCR Hinders RAG: Evaluating the Cascading Impact of OCR on Retrieval-Augmented Generation https://arxiv.org/abs/2412.02592v1

[2] llm的基础OCR识字能力 CC-OCR: A Comprehensive and Challenging OCR Benchmark for Evaluating Large Multimodal Models in Literacy https://arxiv.org/pdf/2412.02210

[3] Document Parsing Unveiled: Techniques, Challenges,and Prospects for Structured Information Extraction 文档解析综述 https://arxiv.org/pdf/2410.21169

[4] A Comparative Study of PDF Parsing Tools Across Diverse Document Categories https://arxiv.org/pdf/2410.09871

相关文章:

用户的声音 | 文档结构化信息提取方案测评:LLM、开源模型部署与云端API,谁是合适选择?

文档预处理之文本化 近日,我们收到来自专业用户的使用心得,浅析结构化信息提取技术、技术选型及一些个人测试。 结构化信息提取的重要性 数据作为大模型时代的核心生产资料,其结构化处理能力直接影响AI系统的实用价值。尽管知识图谱、RAG等…...

vite调试node_modules下面插件

在使用vite进行开发的时候,我们可能想要修改node_modules中插件的源码.特别是集成一个SDK,需要调试去判断问题时,或者研究第三方源码时后; vite默认是走缓存的,所以当修改后不会看到你打印的日志,这个时候有几种方法可以选择; 方式…...

ES12 weakRefs的用法和使用场景

ES12 (ECMAScript 2021) 特性总结:WeakRef 1. WeakRef 概述 描述 WeakRef 是 ES12 引入的一个新特性,用于创建对对象的弱引用。弱引用不会阻止垃圾回收器回收对象,即使该对象仍然被弱引用持有。WeakRef 通常与 FinalizationRegistry 结合使…...

【Python】集合set详细讲解(语法、操作、集合运算、性能、使用场景)

文章目录 1. 语法1.1 使用 {} 定义1.2 使用 set() 定义 2. 特点3. 常用操作3.1 访问元素3.2 查找数据3.3 添加元素3.3.1 add() 方法3.3.2 update()方法 3.4 删除元素3.4.1 remove()方法3.4.2 discard()方法3.4.3 pop()方法3.4.4 clear()方法 3.5 集合运算3.5.1 并集&#xff1a…...

网络安全大数据架构 网络安全之数据安全

🍅 点击文末小卡片 ,免费获取网络安全全套资料,资料在手,涨薪更快 网络安全和数据安全 从狭义来说,网络安全指网络系统的硬件、软件及其系统中的数据受到保护,不因偶然的或恶意的原因遭到破坏、更改、泄露&…...

(前端基础)CSS(一)

了解 Cascading Style Sheet:层叠级联样式表 CSS:表现层(美化网页)如:字体、颜色、边框、高度、宽度、背景图片、网页定位、网页浮动 css优势: 内容和表现分离网页结构表现统一,可以实现复用…...

Redis数据类型全景解析:从底层编码到应用反模式

一、核心数据类型矩阵 1.1 基础类型对比表 类型底层结构最大容量时间复杂度典型场景StringSDS/Embstr/Raw512MBO(1)读写缓存/计数器ListQuickList(ziplist)2^32-1元素头尾操作O(1)消息队列Hashziplist/hashtable2^32-1键值对O(1)平均对象存储Setintset/hashtable2^32-1成员O(…...

(蓝桥杯——10. 小郑做志愿者)洛斯里克城志愿者问题详解

题目背景 小郑是一名大学生,她决定通过做志愿者来增加自己的综合分。她的任务是帮助游客解决交通困难的问题。洛斯里克城是一个六朝古都,拥有 N 个区域和古老的地铁系统。地铁线路覆盖了树形结构上的某些路径,游客会询问两个区域是否可以通过某条地铁线路直达,以及有多少条…...

TypeScript跟js,es6这些的区别

TypeScript 一、TypeScript 是什么 想象 JavaScript 是一个自由奔放的艺术家,它在创作(编写代码)时不受太多约束,非常灵活,但有时也容易犯错且难以调试。而 TypeScript 就像是给这位艺术家配备了一套精确的工具和规范…...

flink-cdc同步数据到doris中

1 创建数据库和表 1.1 数据库脚本 这样直接创建数据库是有问题,因为后面发现superset连接使用doris://root:12345610.101.12.82:9030/internal.eayc?charsetutf8mb4 -- 创建数据库eayc create database if not exists ods_eayc; -- 创建数据表2 数据同步 2.1 f…...

Kubernetes:EKS 中 Istio Ingress Gateway 负载均衡器配置及常见问题解析

引言 在云原生时代,Kubernetes 已经成为容器编排的事实标准。AWS EKS (Elastic Kubernetes Service) 作为一项完全托管的 Kubernetes 服务,简化了在 AWS 上运行 Kubernetes 的复杂性。Istio 作为服务网格领域的佼佼者,为微服务提供了流量管理…...

Golang教程

1. go 环境与命令 1.1 go 环境搭建 SDK 安装 Go 官网:golang.orgGo 中文社区:https://studygolang.com/dlGo API文档:https/golang.org 或 https://studygolang.com/pkgdoc 目录 api :api 存放bin:go命令src&#…...

AI 百炼成神:线性回归,预测房价

我们开始第一个项目——线性回归:预测房价。这是一个经典的机器学习入门项目,可以帮助你理解如何使用线性回归模型来预测连续的数值。 第一个项目:线性回归预测房价 项目目标 学习线性回归的基本概念。使用历史房价数据建立一个预测模型。理解如何评估模型的性能。项目步骤…...

企业软件合规性管理:构建高效、安全的软件资产生态

引言 在数字化转型的浪潮下,企业的软件使用方式日益多元化,涉及云端、订阅制、永久授权及浮动许可等多种模式。然而,随着软件资产的增多,企业面临着合规性管理的严峻挑战:非法软件使用、许可证管理不当、软件资产闲置…...

每日一题——编辑距离

编辑距离 参考资料题目描述示例 解题思路动态规划(DP)方法 代码实现复杂度分析示例详解示例1:"nowcoder" → "new"示例2:"intention" → "execution" 总结与心得 参考资料 建议先参考下…...

TensorFlow项目GPU运行 安装步骤

以下是在 Linux 系统 下搭建完整 GPU 加速环境的详细流程(适配 CUDA 11.2 和 Python 3.9): 1. 前置检查 1.1 验证 NVIDIA 驱动 # 检查驱动版本(需 ≥ 450.80.02) nvidia-smi 输出示例: CUDA Version: 11.2…...

c++进阶———继承

1.引言 在一些大的项目中,我们可能要重复定义一些类,但是很麻烦,应该怎么办呢?举个简单的例子,我要做一个全校师生统计表,统计学号,教师编号,姓名,年龄,电话…...

FreeSwitch的mod_translate模块详细,附带场景案例及代码示例

mod_translate 模块详细介绍 mod_translate 是 FreeSWITCH 中的一个拨号计划应用程序模块,用于对电话号码或字符串进行格式转换和翻译。它可以根据预定义的规则对输入的内容进行匹配和转换,常用于号码格式化、路由选择、号码屏蔽等场景。 主要功能 号码…...

前端504错误分析

前端出现504错误(网关超时)通常是由于代理服务器未能及时从上游服务获取响应。以下是详细分析步骤和解决方案: 1. 确认错误来源 504含义:代理服务器(如Nginx、Apache)在等待后端服务响应时超时。常见架构:前端 → 代理服务器 → 后端服务,问题通常出在代理与后端之间。…...

在 .NET 8/9 中使用 AppUser 进行 JWT 令牌身份验证

文章目录 一、引言二、什么是 JSON Web 令牌?三、什么是 JSON Web 令牌结构?四、设置 JWT 令牌身份验证4.1 创建新的 .NET 8 Web API 项目4.2 安装所需的 NuGet 软件包4.3 创建 JWT 配置模型4.4 将 JWT 配置添加到您的 appsettings.json 中4.5 为 Config…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

Git常用命令完全指南:从入门到精通

Git常用命令完全指南:从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...

深入浅出Diffusion模型:从原理到实践的全方位教程

I. 引言:生成式AI的黎明 – Diffusion模型是什么? 近年来,生成式人工智能(Generative AI)领域取得了爆炸性的进展,模型能够根据简单的文本提示创作出逼真的图像、连贯的文本,乃至更多令人惊叹的…...

Python 训练营打卡 Day 47

注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...

基于stm32F10x 系列微控制器的智能电子琴(附完整项目源码、详细接线及讲解视频)

注:文章末尾网盘链接中自取成品使用演示视频、项目源码、项目文档 所用硬件:STM32F103C8T6、无源蜂鸣器、44矩阵键盘、flash存储模块、OLED显示屏、RGB三色灯、面包板、杜邦线、usb转ttl串口 stm32f103c8t6 面包板 …...

机器学习复习3--模型评估

误差与过拟合 我们将学习器对样本的实际预测结果与样本的真实值之间的差异称为:误差(error)。 误差定义: ①在训练集上的误差称为训练误差(training error)或经验误差(empirical error&#x…...

Linux信号保存与处理机制详解

Linux信号的保存与处理涉及多个关键机制,以下是详细的总结: 1. 信号的保存 进程描述符(task_struct):每个进程的PCB中包含信号相关信息。 pending信号集:记录已到达但未处理的信号(未决信号&a…...

TMC2226超静音步进电机驱动控制模块

目前已经使用TMC2226量产超过20K,发现在静音方面做的还是很不错。 一、TMC2226管脚定义说明 二、原理图及下载地址 一、TMC2226管脚定义说明 引脚编号类型功能OB11电机线圈 B 输出 1BRB2线圈 B 的检测电阻连接端。将检测电阻靠近该引脚连接到地。使用内部检测电阻时,将此引…...