前几天,有一位用户使用OCR产品识别多栏论文后向我们询问:要怎么解决不合适的断句、分段以及错误阅读顺序的问题?

我们用一个相似案例为大家直观展示这位用户遇到的情况。

如图中的多栏期刊,如果用OCR识别,或直接在一些办公软件对文字进行复制黏贴,我们就会得到右侧的效果——按PDF排版而不是语义进行换行分段,对多栏文字直接从左向右排布,得到完全不通顺的文字段落。显然这样的效果是无法接受的。

于是,我们向用户推荐了文档解析产品,建议在处理多栏文件时使用文档解析来获得更好的识别结果。这是文档解析的同一篇期刊论文输出示例

可以看到,不论是自然段的划分,还是阅读顺序,甚至换页情况下的识别,都遵循了正确的阅读习惯。这正是我们在做文档解析过程中关注的重点之一,也是解析产品和过往纯OCR产品的不同之处:段落识别与阅读顺序还原

今天,我们也想和大家聊聊,在Markdown Tester中,这个维度的指标是如何设计的。再次指路我们的测评工具https://github.com/intsig/markdown_tester

段落维度的指标包含了段落识别率、召回率,指标的计算方式后文我们会进行展开说明。

直观上来说,段落识别能力指的是系统能够识别和区分PDF文档中的不同段落,理解每个段落的开始和结束

而阅读顺序的还原能力指的是系统能够根据PDF文档的布局和格式,推断出人类阅读时的顺序,而不仅仅是机械地判定为从左至右排序。

作为自然语言处理的利器,大模型需要的也正是与人类一致的阅读顺序,从预训练、调整到对话应用,正确、优质的语料能为大模型提供良好的工作基础。在实际情况中,文档智能应用场景往往包含着复杂的文档布局(如多栏、嵌套表格、不规则文本框等),正确识别段落和恢复阅读顺序是确保信息准确传达的关键要素之一。

以目前对PDF解析需求量相当高的RAG开发和数据清洗两个应用方向为例:在RAG(Retrieval-Augmented Generation)系统中,正确的阅读顺序还原有助于系统理解文档的逻辑结构和信息流,而正确的段落识别让系统能更准确地定位到文档中的关键信息段落,从而提高检索的准确性和生成内容的相关性。在优秀解析能力的辅助下,RAG分块(Chunking)策略也可以做进一步优化,用按段落分块取代固定长度切分,避免把完整的段落文字“拦腰斩断”、影响语义理解与生成的问题。而在数据清洗和模型训练过程中,解析工具能够保持文档的原始阅读顺序,段落识别则有助于将PDF文档分割成更小的、语义上独立的单元。这使得训练数据更加结构化,对于训练模型理解文档的层次结构和内容组织至关重要,能有效提高模型的训练效果、泛化能力和对复杂文档的理解能力。

来看看我们的Markdown Tester如何评估这两个维度的解析效果。此处涉及4个指标:平均阅读顺序指标=计算预测值和真值中,所有匹配段落的编辑距离(排版用正副标题)编辑距离的概念,我们在上一期文章《聊聊文档解析测评里的表格指标》里介绍过。(+链接)它指的是,对给定的两个字符串,最少要经历多少次插入、删除、替换操作,才能使两个字符串完全一样。在阅读顺序指标中,我们应用同样的概念对匹配段落进行检测,在这一项中得分越高,意味着解析结果中的阅读顺序与实际越匹配、差异越小,也即还原效果越好。段落识别率=段落匹配的个数(段落编辑距离小于0.2) / 预测出的总段落数段落识别率指的是被正确识别的段落数量占所有识别出的段落总数的百分比。它测量的是段落解析够不够“”。

举一个比较直观的例子来说明段落识别率和段落召回率分别代表的含义。现在我们有一篇需要识别的短文,它有3个段落,分别为:

+----------------+

段1:开头

+----------------+

+----------------+

段2:正文

+----------------+

+----------------+

段3:结尾

+----------------+

在解析过程中,段1、段2被正确识别,而段3被识别为了2个分开的段落。

即解析结果为:

+----------------+

段1:开头

+----------------+

+----------------+

段2:正文

+----------------+

+----------------+

段3:发展

+----------------+

+----------------+

段4:结尾

+----------------+

那么,在这个案例中,段落识别率=2/4=50%。段落识别率反映了产品正确识别段落的能力,即查准率。识别率越高,意味着系统在识别段落时的准确性越高。段落召回率=段落匹配的个数(段落编辑距离小于0.2)/ 总的段落数段落召回率是指被识别到的相关段落数量占实际总段落数的百分比。它测量的是段落解析是不是“”。

我们继续看前面的短文案例,此处的段落召回率=2/3=66.67%。简单来说,就是原文的3个段落中里,我们正确找到了其中的2个。它衡量了解析产品在识别文档时的查全率。召回率越高,意味着越能够正确找到所有段落。段落F1=2 * (段落识别率 * 段落召回率) / (段落识别率 + 段落召回率)F1值是识别率和召回率的调和平均值,它综合考虑了这两个指标,用于评估文档解析的整体性能。F1值越高,通常意味着文档解析的性能越好。

本期,我们主要介绍了PDF解析中段落与阅读顺序相关的指标及重要性。

关于公式、标题的讨论,我们也将继续深入。

之后,我们还会不断扩充测评的维度、厂商,更好地满足大家的需求。欢迎各位开发者随时给我们提出需求,包括但不限于对这个tester本身的优化建议,或者提供样本找我们对比测试,甚至是指定产品做对比测试~

TextIn文档解析产品目前正在内测计划中,为每位用户提供每周7000页的额度福利,关注公众号《合研社》即可申领。关于测评工具、产品或需求,都可以随时找我们沟通。我们欢迎所有探讨和交流!

所见即所得,赋能RAG:PDF解析里的段落识别的更多相关文章

  1. PDF解析记录——Pdfbox

    此文仅作记录[嫌放电脑里碍事-_-],内容为以前收集的一小段代码.   下面为pdf获取文本的简要代码片段: private string GetPDFText(string filename) { ...

  2. pdf解析与结构化提取

    #PDF解析与结构化提取##PDF解析对于PDF文档,我们选择用PDFMiner对其进行解析,得到文本.###PDFMinerPDFMiner使用了一种称作lazy parsing的策略,只在需要的时 ...

  3. 【PDF】手写字与识别字重叠

    [PDF]手写字与识别字重叠 前言 同学平时上课用iPad记笔记,考试之前导出为PDF发给我后,我用PDF打开,发现可以直接Ctrl+F搜索一些词语.一直不知道是怎么做到的,毕竟里面的字都是手写的,不 ...

  4. 温故知新,.Net Core利用UserAgent+rDNS双解析方案,正确识别并反爬虫/反垃圾邮件

    背景 一般有价值的并保有数据的网站或接口很容易被爬虫,爬虫会占用大量的流量资源,接下来我们参考历史经验,探索如何在.Net Core中利用UserAgent+rDNS双解析方案来正确识别并且反爬虫. ...

  5. 当页面是本地页面时,通过ajax访问tomcat里的action,传递的参数在action里并不能识别

    当页面是本地页面时,通过ajax访问tomcat里的action,传递的参数在action里并不能识别,这个问题困扰了我不少时间. 在测试时发现此问题

  6. PDF解析

    解析如下图PDF文件 using System; using System.Collections.Generic; using System.Linq; using System.Text; usi ...

  7. 如何将一个PDF文件里的图片批量导出

    假设我有下面这个PDF文件,里面有很多图片,我想把这些图片批量导出,而不是在Adobe Acrobat Reader里一张张手动拷贝: 本文介绍一种快捷做法. 用PDF-XChange Editor打 ...

  8. PDF解析帮助类

    public class ComPDFHepler { /// <summary> /// 正则获取字符串中两个字符串间的内容 /// </summary> /// <p ...

  9. PDF解析。。。

    解析出PDF中的文字.用项目名称作Key取对应的值.. 正则匹配 .....:..\n

  10. 如何添加、删除、合并PDF文件里的页面?

    使用Adobe Acrobat. Adobe中文官网http://www.adobe.com/cn/products/acrobat.html 能够自己下载破解版. watermark/2/text/ ...

随机推荐

  1. C++中的引用(Reference)

    1. 引用(Reference) 在 C++ 中,引用(Reference)是一个变量的别名. 它允许你通过不同的名字访问同一个变量. 与指针不同,引用在定义时必须被初始化,并且一旦绑定到某个变量,之 ...

  2. tp5生命周期

    https://www.kancloud.cn/manual/thinkphp5/118011 1.入口文件 用户发起的请求都会经过应用的入口文件,通常是 public/index.php文件.当然, ...

  3. 基于 Three.js 的 3D 模型加载优化

    作者:来自 vivo 互联网前端团队- Su Ning 作为一个3D的项目,从用户打开页面到最终模型的渲染需要经过多个流程,加载的时间也会比普通的H5项目要更长一些,从而造成大量的用户流失.为了提升首 ...

  4. JMeter While循环控制器应用之遍历获取文件参数

    While循环控制器应用之遍历获取文件参数 by: 授客 QQ:1033553122 测试环境 JMeter-5.4.1 应用 实现单线程在单次迭代内遍历获取文件参数 说明:上图仅给出关键配置信息 注 ...

  5. 对比python学julia(第二章)--(第一节)隔沟算样—枚举策略

    1.1.  问题描述 在明代数学家程大位的<算法统宗>著作中记载了这样一道数学题: 甲乙隔沟放牧,二人暗里参详. 甲云得乙九个羊,多你一倍之上. 乙说得甲九只,两家之数相当. 两边闲坐恼心 ...

  6. 【Docker】04 部署MySQL

    从官网上拉取最新MySQL镜像: docker pull mysql:latest 创建并运行一个MySQL镜像的容器 docker run -itd --name mysql-test -p 330 ...

  7. 读博期间的宿舍 && 行李打包 —— 大连开发区校区

    =============================================

  8. 为什么我们需要不断的开发不同的机器学习模型 —— Do we Need Hundreds of Classifiers to Solve Real World Classification Problems?

    引用: 作者:xyzh https://www.zhihu.com/question/26726794/answer/151282052 写给懒得看的人: 没有最好的分类器,只有最合适的分类器. 随机 ...

  9. 如何使用Python环境下的2D经典游戏仿真器(openai推出的)retro库运行游戏"刺猬索尼克" (SonicTheHedgehog-Genesis)

    很多资料上都有使用游戏仿真器(openai推出的)retro库运行游戏"刺猬索尼克"  (SonicTheHedgehog-Genesis),但是均没有给出详细的安装该款游戏的步骤 ...

  10. 证明: 设n阶方阵A相似于对角阵Λ, λ是A的k重特征值, 则r(λE-A)=n-k.

    命题: 设n阶方阵A相似于对角阵Λ, λ是A的k重特征值, 则r(λE-A)=n-k.证明: 由定理3.9: A~Λ <=> A有n个线性无关的特征向量, 知k重特征值λ存在k个线性无关的 ...