TextIn团队的文档解析测评工具Markdown Tester在Github发布后,我们陆续与大家探讨了目前业内对PDF解析工作的评判标准与我们各项测评指标的设计原理,包括段落、表格、公式、阅读顺序等维度。
今天,我们将介绍另一项重要指标,也是业内面对的一项普遍性难点:标题识别,以及它如何影响数据清洗与RAG系统开发。
 
我们依旧从指标设计出发

 
 
 
 
此前,我们在讨论段落检测维度的文章《所见即所得,赋能RAG:PDF解析里的段落识别与阅读顺序还原》(+link)中详细说明过识别率、召回率与F1的设计原理。
标题检测中,相关指标通过相似规则构建:标题识别率测量的是标题解析是否足够准确,即被识别为标题的项目中有多少是正确的;而标题召回率测量的是段落解析是否足够全面,能不能避免长文档中有没被找到的“漏网之鱼”;F1值是识别率和召回率的调和平均值,它综合考虑了这两个指标,用于评估文档解析的整体性能。
树状编辑距离的概念,可以参考《聊聊文档解析测评里的表格指标》(+link)。相对于表格树状结构,标题会更易于理解。凡长文档,大部分会包含多层级标题,将标题层级以树状结构的方式表达,并测量预测值与真值间的编辑距离,即可评判各层级标题的解析准确程度。
简而言之,如果解析产品将一篇论文中的二级标题检测为三级子标题,在这项指标里就会被扣分。
 
标题检测是PDF解析的主要维度之一,在长文档解析中尤为重要。
TextIn团队研发了文档树引擎这一关键技术,针对性提升标题检测能力。
物理版面分析技术支持对目标区块的检测与元素识别,并利用标题区块的高度(即字号)判断一级、二级、三级、......N级标题。这种方法解决了一部分问题,但较难在文档格式多样的复杂场景中保持良好表现。在此基础上,文档树引擎从语义出发,增强了标题识别率与召回率。
TextIn文档树引擎遵循以下路径工作:
一、输入
  • 整份文档的段落内容,以序列化形式传入模型
二、预测
  • 提取当前段落的embedding值
  • 预测每个段落和上一个段落的关系,分为子标题、子段落、合并、旁系、主标题、表格标题
  • 如果是旁系类型,则再往上找父节点,并判断其层级关系,直到找到最终的父节点
三、输出
  • 基于每个段落的情况,构造该文档的文档树,并按 JSON 结构输出(右图中未渲染段落节点)

 
 
 
 
正确的标题检测结果输出与文档树构建对数据质量有重要的提升作用,对后续数据清洗、大模型语义理解与RAG开发应用场景意义尤为明显。
简单来说,当AI对长文档进行检索与理解,清晰的标题及层级识别,能帮助机器快速读取全文的逻辑结构,并锚定我们希望查找或归纳的信息位置。不论我们需要LLM帮助快速阅读、生成摘要,还是提取细节内容,标题目录都能起到重要作用。
以RAG(Retrieval-Augmented Generation)这一主要场景为例,在系统开发过程中,Chunking(分块)对整体性能有着显著的影响。RAG在进行信息检索的时候需要将检索出来的有价值的文本段送给模型,模型才能生成可靠有用的内容。分块是将整篇文本分成小段的过程,当我们使用LLM embedding内容时,分块可以帮助优化从向量数据库被召回的内容的准确性,因此文本段的质量也是RAG中比较重要的一环。良好的分块能够减少计算资源的消耗,提高检索效率,并提升生成质量。
常见的Chunking方式包括以下几种:
1、固定长度切分:将文本按固定长度进行切分,例如每1000或2000个字符切分为一个块。这种方法简单直接,便于快速处理,但可能无法充分考虑文本的实际语义结构,导致上下文断裂,影响重要的语义信息。
2、基于句子的切分:按照句子粒度进行切分,比如以句号、点号等标点符号进行切分。该方法能保证每个句子的完整性、上下文连贯性。但如果句子过长,可能丢失一些细节,或由于切分不准确影响检索效果。
3、滑动窗口切分:创建一个重叠的滑动窗口,比如设置窗口大小为500,步长为100。这种方法可以减少因固定长度或句子边界切分可能引入的信息丢失问题,在一定程度上平衡文本的连续性和语义完整性,但上下文重叠导致信息重复,增加计算量,而窗口的开始和结束可能会在句子或短语中间,导致语义不连贯。
不同的Chunking策略和参数设置会导致生成Chunk的特点差异,进而影响RAG模型在下游任务中的性能表现。在常规方法之外,也存在对文档要求更高的分块方式:按文档结构切分。这种策略要求文档具有明确的结构化信息,可以有效利用文档的层次信息,保持语义的连贯性。
基于语义分割的优化使用各级子标题作为分块依据,能够最大程度锚定完整内容。优化的实现需要充分的前提条件:文档解析工具能为RAG提供结构清晰、机器可读的长文档,例如自带标题层级的Markdown文本。
好的文档解析工具能让分块处理“不打没准备的仗”,为语义分割提供良好基础。
 
目前,TextIn文档解析工具已在RAG知识库问答中发挥重要功能,文档树引擎在年报、财报、行研报告等金融文件领域展现了较为明显的优势。
对于文档解析工具在RAG、LLM场景下的效果,欢迎各位开发者随时向我们提出其他需求,与我们共同交流您当下的用途和需要~
TextIn文档解析产品目前正在提供开发者福利,添加合合信息企V,即可申领!
关于测评工具、产品或需求,都可以找我们沟通。我们欢迎所有探讨和交流!

TextIn文档树引擎,助力RAG知识库问答检索召回能力提升的更多相关文章

  1. bs4--官文--搜索文档树

    搜索文档树 Beautiful Soup定义了很多搜索方法,这里着重介绍2个: find() 和 find_all() .其它方法的参数和用法类似,请读者举一反三. 再以“爱丽丝”文档作为例子: ht ...

  2. bs4--官文--遍历文档树

    遍历文档树 还拿”爱丽丝梦游仙境”的文档来做例子: html_doc = """ <html><head><title>The Dor ...

  3. bs4--官文--修改文档树

    修改文档树 Beautiful Soup的强项是文档树的搜索,但同时也可以方便的修改文档树 修改tag的名称和属性 在 Attributes 的章节中已经介绍过这个功能,但是再看一遍也无妨. 重命名一 ...

  4. 使用Python爬虫库BeautifulSoup遍历文档树并对标签进行操作详解(新手必学)

    为大家介绍下Python爬虫库BeautifulSoup遍历文档树并对标签进行操作的详细方法与函数下面就是使用Python爬虫库BeautifulSoup对文档树进行遍历并对标签进行操作的实例,都是最 ...

  5. Python爬虫系列(六):搜索文档树

    今天早上,写的东西掉了.这个烂知乎,有bug,说了自动保存草稿,其实并没有保存.无语 今晚,我们将继续讨论如何分析html文档. 1.字符串 #直接找元素soup.find_all('b') 2.正则 ...

  6. 使用requests爬取梨视频、bilibili视频、汽车之家,bs4遍历文档树、搜索文档树,css选择器

    今日内容概要 使用requests爬取梨视频 requests+bs4爬取汽车之家 bs4遍历文档树 bs4搜索文档树 css选择器 内容详细 1.使用requests爬取梨视频 # 模拟发送http ...

  7. MaltReport2:通用文档生成引擎

    UPDATED: 本文仅适用 MaltReport 2.x ,3.x 版本文档还在撰写当中,目前请参考项目中的 Samples. MaltReport 是我几年前写的开源单据.报表引擎,最近进行了较大 ...

  8. Linux 基础命令、文档树 和 bash

    最近发现了一个总结得更好的:bash cheatsheet 本文只是我对 linux 基础学习的一个总结,可能仅适用于复习用.算是我的 Linux 备忘录. 最基础 tab 补全 * 通配符 ctrl ...

  9. [整理] ES5 词法约定文档树状图

    将ES5 词法说明整理为了树状图,方便查阅,请自行点开小图看大图:

  10. smarty3.0中文手册文档API及使用指南

    1.安装Smarty3.0一.什么是smarty?smarty是一个使用PHP写出来的模板PHP模板引擎,它提供了逻辑与外在内容的分离,简单的讲,目的就是要使用PHP程序员同美工分离,使用的程序员改变 ...

随机推荐

  1. 关于ComfyUI的一些Tips

    关于ComfyUI的一些Tips 前言: 最近发的ComfyUI相关文章节奏不知道会不会很快,在创作的时候没有考虑很多,想着把自己的知识分享出去.后台也看到很多私信,有各种各样的问题,这是我欠缺考虑了 ...

  2. 文件系统(九):一文看懂yaffs2文件系统原理

    liwen01 2024.07.07 前言 yaffs 是专为nand flash 设计的一款文件系统,与jffs 类似,都是属于日志结构文件系统.与jffs 不同的是,yaffs 文件系统利用了na ...

  3. git 怎么将某个开发分支最近几次的提交合并成一次提交

    1. 切换到开发分支: git checkout dev 2. 运行交互式 rebase 命令,并指定要合并的提交数量(在这个例子中是最近的3次提交): git rebase -i HEAD~3 3. ...

  4. PHP中substr() mb_substr() mb_struct()的区别和用法

    PHP substr() 函数可以分割文字,但要分割的文字如果包括中文字符往往会遇到问题,这时可以用mb_substr()/mb_strcut这个函 数,mb_substr() /mb_strcut的 ...

  5. oeasy 教您玩转linux 之010208 满屏乱码 bb

    我们来回顾一下 上一部分我们都讲了什么? 黑客帝国 各种速度颜色参数 最后我们想找一个让人完全崩溃的软件包,这不就来了,话不多说,先试试. apt show bbapt search bbsudo a ...

  6. 第一节 线性数据结构 STL

    vector 容器 迭代器 vector<int> v{1, 0, 0, 8, 6}; for(vector<int>::interator it = v.begin(); i ...

  7. 仓颉编程语言技术指南:嵌套函数、Lambda 表达式、闭包

    本文分享自华为云社区<[华为鸿蒙开发技术]仓颉编程语言技术指南[嵌套函数.Lambda 表达式.闭包]>,作者:柠檬味拥抱. 仓颉编程语言(Cangjie)是一种面向全场景应用开发的通用编 ...

  8. 解决004--Loading local data is disabled; this must be enabled on both the client and server sides问题及解决

    因为下载了SQLyog的ultimate版本,现在就可以导入外部的数据了.有着之前使用insert into插入语句来添加近50条有着大概10个字段的记录的经历之后,本着能够导入现成的数据就导入的想法 ...

  9. SQL连续查询问题拓展—记上海拼多多非技术岗面试真题

    真巧,昨天刚写了关于数据库连续问题的解决方案,没想到今天下午两点就有朋友在上海拼多多面试非技术岗位中就遇到了相似的问题.下面是原题: 一个最大连续支付失败的次数 有一张支付流水表pay;字段如下 id ...

  10. 【DataBase】MySQL 05 基础查询

    MySQL数据库 05 基础查询 视频参考自:P18 - P27 https://www.bilibili.com/video/BV1xW411u7ax 配套的SQL脚本:https://shimo. ...