微信扫码
添加专属顾问
在私有领域知识问答和企业知识管理领域,结合检索增强型生成模型(Retrieval-Augmented Generation, RAG)大模型(Large Language Model, LLM)已成为一种趋势。然而,在RAG系统的文档预处理阶段和检索阶段,经常碰到三个主要问题。
本文将先探讨下文档解析的准确性对RAG系统的影响;然后介绍下智能文档解析关键技术,并介绍闭源的通用文档解析服务——TextIn,还介绍了一款开源的文档解析质量评测工具-Markdown Tester,最后介绍下合合信息开发的向量表征模型-acge_text_embedding。
在RAG的预处理阶段,文档解析的准确性是至关重要的。如果文档解析不准确,这将直接影响到后续的检索和生成阶段,导致整个RAG系统的性能下降。以下是文档解析不准确可能带来的具体问题及其影响:
内容识别错误:如果文档中的文本、图像或格式被错误识别,将导致原始信息的丢失或错误。例如:(1)表格数据可能被错误地解析为普通文本,表格的行列关系混乱等:导致表格数值类问题无法进行精准的回答和RAG系统可能无法正确理解数据间的关联性。(2)图像中的文字(OCR)被错误识别:如果文档中的文本或图像被错误识别,系统接收到的数据质量会下降,这将影响系统生成的输出质量。
布局信息丢失:PDF文件的布局信息,如页面布局、段落、标题层级等,在解析过程中可能会丢失,这会影响对文档结构的把握,进而影响分块(chunks)。为了适应模型的输入要求,文档需要被分割成小块。如果分块策略不当,可能会导致语义信息的丢失,影响模型对文档内容的理解。
编码问题:PDF文件可能包含多种字符编码、水印等,一些pdf解析工具不能正确处理这些编码,可能会导致乱码。乱码的文本内容如果解析出来混合在文本中,会给知识库带来大量的噪声,这也会影响RAG系统的性能。
文档复杂性:(1)复杂的文档结构,如多栏布局、阅读顺序恢复、混合文本和图像等,可能会给解析带来额外的挑战,增加解析错误的风险。(2)文档元素的复杂性:文档中包含各种元素类型,如:段落、表格、公式和图表。错误的解析这些元素内容,也会给RAG系统的知识库带来大量噪声。
因此,对于C端文档问答的RAG系统应用产品,迫切的需要对文档进行精准解析。理想情况下,文档解析器应具备以下关键特征:
对于简单的文档解析,langchain 和 llama_index 中集成了各种基于规则引擎的解析工具(如:解析pdf的pdfplumber,pyPDF2等)或者简单的开源的ocr工具(如:paddleocr),能够对多种文件类型进行解析。
对于复杂的文档解析,常基于深度学习的方法进行解析,在上篇文章中(《【文档智能 & RAG】RAG增强之路:增强PDF解析并结构化技术路线方案及思路》)也讲解了文档解析的一些关键的开源技术路径及方案。
然而,对于通用文档解析而言还存在着一些挑战:
版面分析指的是对文档进行区域划分,通过bounding box定位其中的关键区域,如:文字、标题、表格、图片等。
版式分析的优势:
通过大量标注的数据,准确的划分出文档关键区域。如:
能对复杂的版式进行区块识别
版式分析的缺点,目前基本都是通过目标检测的形式进行版式分析,因此其挑战也是伴随着特定场景的标注数据,尤其是通用场景的版式分析,难度巨大。
表格识别与解析的难点一般如下:
表格的多样性和复杂性:表格的形式多种多样,包括有线表、无线表和少线表,这使得检测和分割单元格变得复杂 。
表格单元格的合并与拆分:某些表格中的单元格可能跨行或跨列,甚至跨页,需要准确识别这些合并的单元格并将其恢复成标准单元格 。
表格内容的识别和解析:表格中可能包含图像、公式、符号等非文本内容,需要将它们转换成文本或保留格式 。
表格结构的表示和输出:不同的应用场景可能需要不同的表格结构表示方式,如 HTML、JSON、CSV 等,需要将识别结果转换成适合目标应用的格式,并保留数据和样式信息。
数学公式识别与解析是一个技术挑战性很高的领域,主要难点包括:
公式结构的复杂性:数学公式往往包含复杂的嵌套结构,这些结构的识别需要算法能够准确理解公式的层次关系,例如多层的分数、根号等 。
形近字的识别难度:在手写识别中,相似形状的字符如大写X和小写x,大写Z和数字2,希腊字母γ和字母r等容易混淆,增加了识别的难度 。
非常规符号的识别:比赛中添加的非常规符号组合可能会与公式混淆,增加了识别的复杂度。
由于文档布局的复杂性,包括多栏、嵌套表格、不规则的文本框等,这增加了阅读顺序恢复的难度。往期中也介绍了阅读顺序相关内容(《【文档智能】符合人类阅读顺序的文档模型-LayoutReader及非官方权重开源》)
小结:以上文档解析的每个环节无论是数据标注、模型训练、实验,都需要投入巨大的成本和精细化的优化,在工业落地场景,在保证解析效果的同时,还需要关注文档的解析速度。尤其是OCR过程,文字密集型文档的解析速度影响特别大。
针对以上痛点,笔者深度体验了一下合合信息自研文档解析技术-TextIn。该技术深度融合了文字识别(OCR)、计算机图形图像技术以及智能图像处理引擎,使得纸质文档或图片中的文字信息能够迅速、精准地转化为计算机易于处理的文本格式。
TextIn文档智能关键技术如下:
测试样例:
TextIn解析输出:
可以看到,TextIn将pdf文件解析成markdown格式,并将标题、段落、行内公式及行间公式准确解析。
值得关注的是,标题,段落的准确解析、并按照阅读顺序进行输出,这是生成文档目录及文档树的基础。
快速上手代码:
import requests
import json
def get_file_content(filePath):
with open(filePath, 'rb') as fp:
return fp.read()
class TextinOcr(object):
def __init__(self, app_id, app_secret):
self._app_id = app_id
self._app_secret = app_secret
self.host = 'https://api.textin.com'
def recognize_pdf2md(self, image, options):
"""
pdf to markdown
:param options: request params
:param image: file bytes
:return: response
options = {
'pdf_pwd': None,
'dpi': 72,
'page_start': 0,
'page_count': 24,
'apply_document_tree': 0,
'markdown_details': 0,
'table_flavor': 'md',
'get_image': 'none',
'parse_mode': 'auto',
}
"""
url = self.host + '/ai/service/v1/pdf_to_markdown'
headers = {
'x-ti-app-id': self._app_id,
'x-ti-secret-code': self._app_secret
}
return requests.post(url, data=image, headers=headers, params=options)
def write_file(markdown_result, filepath = 'test.md'):
f = open(filepath, 'w')
f.write(markdown_result)
f.close()
if __name__ == "__main__":
textin = TextinOcr('app-id', 'app-secret')
image = get_file_content('test.pdf')
resp = textin.recognize_pdf2md(image, {
'page_start': 0,
'page_count': 14,
'table_flavor': 'html',
'parse_mode': 'auto',
'apply_document_tree': 1,
'markdown_details': 1,
# 'get_image': 1,
})
print("request time: ", resp.elapsed.total_seconds())
json_data = json.loads(resp.text)
write_file(json_data['result']['markdown'], 'test2.md')
目前,基于多模态大模型技术的快速发展,文档解析可以通过多模态大模型进行解决,如:gpt-4o等,但是,基于多模态大模型的解决方案,成本大、非常耗时、容易产生幻觉问题,尤其是表格的解析,数值上的幻觉问题是灾难性的。
笔者在体验TextIn时,感觉解析速度非常快,这对于RAG系统的增益可以从离线和在线两个方面展开讲:
在文档解析中,有了解析工具后,对于开发者,针对文档解析的解析效果,需要一款比较好用的评价工具来客观对解析效果进行评价;对于购买解析服务的c端客户,同样也需要评价文档解析服务的效果,在自建数据集上先评测一下,然后有针对性的进行解析服务选购。因此,下面介绍一下 Markdown Tester:
该评测工具用于评价markdown文档相似性,从段落、标题、表格和公式四个维度进行评价,相关评价指标的定义如下表:
对于RAG中文档解析,必须强调为什么使用markdown进行表示:Markdown格式因其简洁性和易于解析的特点,被广泛认为是LLM(大型语言模型)友好的文档格式。Markdown通过明确的标记语法,帮助模型更好地理解文档结构和内容,从而提高信息提取的准确性和效率。特别在存在大量公式、表格的学术论文场景下,Markdown可能是更合适的格式选择。这种格式选择的原因主要包括:
step1:
git clone https://github.com/intsig/markdown_tester.git
cd markdown_tester
./install.sh
step2:
Markdown Tester的仓库中给出了一些22份文档的grounding truth用于评测各种解析工具效果。待测评样本按照下述方式放置:
dataset/
├── pred/
│ ├── gpt-4o/
│ ├── vendor_A/
│ ├── vendor_B/
│ ├── ...
├── gt/
step3:
python run_test.py --pred_path path_to_pred_md --gt_path path_to_gt_md
笔者在评测过程中发现,自研模型对于识别准确率较高,但召回率普遍不行。
由于LLM固有的问题,如:LLM的知识不是实时更新的;LLM无法回答私域知识问题。因为,LLM的专长在于生成和理解复杂的自然语言查询。嵌入模型(比如Embedding)的专长在于将文本映射到高维空间中,以便进行相似性比较;生成可用于高效检索的密集向量。
因此,目前主流的实现方式都是通过RAG的方式对上述问题进行解决。text embedding在RAG中充当重要的角色,主要有以下几个作用:
下面介绍一个效果比较好的文本向量嵌入的表征模型-acge_text_embedding
acge_text_embedding是由合合信息研发的向量表征模型,技术架构上,acge_text_embedding采用了俄罗斯套娃表示学习(Matryoshka Representation Learning,MRL)编码不同粒度的信息,并让一个编码能够适应不同计算资源的下游任务。MRL的目的是学习许多个小于等于 的前 维表征,即总维度的前 维。在训练时,MRL根据指定维度的向量来计算多个。
一种比较高效的做法是将每个投射头看成是一个大投射头的的一部分,即 ,这种做法在大输出空间时尤其重要,称之为Efficient Matryoshka Representation Learning (MRL–E)。
因此,该表示学习框架的核心思想是学习不同粒度的信息,允许一个嵌入向量在保持准确性和丰富性的同时,适应不同计算资源的需求,并可以无缝地适应大多数表示学习框架,并且可以扩展到多种标准计算机视觉和自然语言处理任务。
acge_text_embedding通过应用多模态表示学习(MRL)技术,能够实现一次训练过程,从而获得丰富多样的表征维度。特别值得一提的是,自适应粗粒度到细粒度表示(acge)模型,它采用了一种层次化的方法,从宏观到微观逐步深化表征的深度和精度。这种方法不仅在推理和部署阶段无需额外成本,还提供了一种灵活且高效的表征方式。在具体的实践应用中,为了更好地适应不同任务的需求,acge模型采用了策略学习的训练方法。这种方法通过针对性地调整学习策略,显著提升了模型在检索、聚类和排序等任务上的性能表现。此外,模型还引入了持续学习的训练机制,有效解决了神经网络在学习过程中可能出现的灾难性遗忘问题。这使得模型能够在训练迭代中达到更加优秀的收敛状态,为持续优化和提升模型性能奠定了基础。
在sentence-transformer库中的使用:
from sentence_transformers import SentenceTransformer
sentences = ["数据1", "数据2"]
model = SentenceTransformer('acge_text_embedding') # 替换成你下载的权重地址
print(model.max_seq_length)
embeddings_1 = model.encode(sentences, normalize_embeddings=True)
embeddings_2 = model.encode(sentences, normalize_embeddings=True)
similarity = embeddings_1 @ embeddings_2.T
print(similarity)
在sentence-transformer库中的使用方法,选取不同的维度:
from sklearn.preprocessing import normalize
from sentence_transformers import SentenceTransformer
sentences = ["数据1", "数据2"]
model = SentenceTransformer('acge_text_embedding') # 替换成你下载的权重地址
embeddings = model.encode(sentences, normalize_embeddings=False)
matryoshka_dim = 1024
embeddings = embeddings[..., :matryoshka_dim] # Shrink the embedding dimensions
embeddings = normalize(embeddings, norm="l2", axis=1)
print(embeddings.shape)
# => (2, 1024)
性能优势:
框架优势:
本文主要探讨了检索增强型生成模型(RAG)在私有领域知识问答和企业知识管理中的应用,重点分析了文档解析的准确性对RAG系统性能的影响,介绍了智能文档解析的关键技术,并介绍了合合信息自研的文档解析服务TextIn,以及开源的文档解析质量评测工具Markdown Tester。此外,还介绍了合合信息开发的文本向量嵌入模型acge_text_embedding,强调了其在RAG系统中的作用和优势。整体而言,文档解析的准确性、速度和质量对RAG系统的性能至关重要,而TextIn和acge_text_embedding等工具能够显著提升文档解析的效果和效率。
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业
2026-07-05
AI 知识库为什么总答不准?不是模型笨,是资料没整理好
2026-07-05
AI知识库RAG演进:上一代解决「找得到」,下一代解决「记得住、连得起、信得过」
2026-07-04
大模型支持的上下文已超 1M, RAG 是不是没有意义了?
2026-07-03
RAG 检索优化策略:从命中率到答案质量的一套工程打法
2026-07-03
RAG 落地总翻车?全球赛事冠军架构,改造适配企业级生产
2026-07-01
提升 RAG 准确率全攻略 让你的 AI 知识库 真正靠谱起来!
2026-06-30
教程:如何用AutoRAG + Milvus避免RAG 与Agent 中出现串租问题
2026-06-30
知识库不是文件堆——我把RAG准确率从60%调到了92%
2026-04-27
2026-04-23
2026-04-20
2026-04-09
2026-04-12
2026-04-22
2026-04-10
2026-05-14
2026-04-30
2026-04-27
2026-07-04
2026-06-23
2026-06-23
2026-06-15
2026-06-10
2026-06-10
2026-05-20
2026-05-18
欢迎您使用【53AI 官方网站】(以下简称“本网站”或“我们”)。本《会员服务协议》(以下简称“本协议”)是您(以下简称“会员”或“用户”)与【深圳市博思协创网络科技有限公司】之间关于注册、登录及使用本网站会员服务所订立的法律协议。
在您注册或登录前,请务必审慎阅读、充分理解各条款内容,特别是免除或限制责任的条款、知识产权条款、争议解决条款等。此类条款将以加粗形式提示您注意。 当您通过微信公众号授权、手机验证码验证或其他方式成功登录本网站时,即视为您已完全理解并同意接受本协议的全部内容。
一、 定义
本网站:指由【深圳市博思协创网络科技有限公司】运营的,域名为【53ai.com】的网站及相关移动端页面。
会员服务:指本网站向注册会员提供的知识库文章查阅、内容检索及其他相关增值服务。
知识库内容:指本网站发布的包括但不限于文字、图表、数据、研究报告、行业分析等数字化内容资源。
二、 账号注册与登录
登录方式:本网站支持以下登录方式,您可根据实际情况选择:
微信公众号授权登录:您同意将您的微信OpenID信息授权给本网站,用于创建或关联会员账号。
手机验证码登录:您需提供真实有效的手机号码,并通过短信验证码完成身份验证与登录/注册。
账号安全:您的账号仅限您本人使用,禁止赠与、借用、租用、转让或售卖。因您保管不善导致的账号被盗、密码泄露等损失,由您自行承担。
实名认证:根据相关法律法规要求,我们可能要求您在特定功能下完成实名认证。如您拒绝提供,可能无法使用部分或全部服务。
未成年人保护:若您未满18周岁,请在法定监护人的陪同下阅读本协议,并在征得监护人同意后使用本服务。
三、 服务内容与规范
知识库查阅权限:会员登录后,有权按照其会员等级对应的权限范围,在线浏览、检索本网站知识库中的相关文章及内容。
服务变更:我们有权根据业务发展需要,调整、变更或终止部分服务内容,并将以网站公告、公众号消息等方式提前通知。
禁止行为:您在使用服务时不得实施以下行为:
利用技术手段批量爬取、下载、转存知识库内容;
将知识库内容用于商业目的或未经授权地向第三方传播;
干扰本网站正常运行或侵犯其他用户合法权益;
发布违法违规信息或从事违反公序良俗的活动。
四、 知识产权声明
权利归属:本网站知识库中的排版设计、软件代码等内容的知识产权均归【公司全称】或原权利人所有,受《中华人民共和国著作权法》等法律保护。
有限许可:本网站授予会员一项非独占、不可转让、不可转授权的普通许可,仅限于个人学习、研究之目的在线查阅知识库内容。
侵权追责:未经书面许可,任何单位或个人不得以任何形式复制、转载、摘编、镜像、汇编或以其他方式使用上述内容。一经发现,我们保留追究其法律责任的权利。
五、 个人信息保护
我们重视对您个人信息的保护。关于我们如何收集、使用、存储和保护您的个人信息,请单独阅读 《隐私政策》。
您通过微信公众号授权或手机号验证所提供的信息,我们将严格按照《个人信息保护法》的规定处理,仅用于身份识别、服务提供及安全验证等必要用途。
您可以随时通过网站设置或联系客服行使查阅、更正、删除个人信息及撤回授权同意的权利。
六、 免责声明
内容准确性:知识库内容仅供参考,不构成专业建议。我们不对其完整性、准确性、时效性作任何明示或暗示的保证,您应自行判断并承担使用风险。
不可抗力:因自然灾害、政策法规变化、网络故障、第三方平台接口异常(如微信接口维护、运营商短信通道故障)等不可抗力导致的服务中断或延迟,我们不承担违约责任。
第三方链接:本网站可能包含指向第三方网站的链接,该等网站的内容和服务不受我们控制,请您自行甄别风险。
七、 违约责任
如您违反本协议约定,我们有权视情节采取警告、限制功能、暂停服务、注销账号等措施,并保留要求赔偿损失的权利。
如因您的违约行为导致我们遭受行政处罚、第三方索赔或商誉损失,您应承担全部赔偿责任(包括但不限于罚款、赔偿金、律师费、公证费等)。
八、 法律适用与争议解决
本协议的订立、执行和解释均适用中华人民共和国大陆地区法律。
因本协议产生的或与本协议有关的任何争议,双方应友好协商解决;协商不成的,任何一方均可向【公司所在地】有管辖权的人民法院提起诉讼。
九、 其他
本协议构成双方就本服务达成的完整协议,取代此前任何口头或书面约定。
本协议任一条款被认定为无效或不可执行的,不影响其他条款的效力。
我们对本协议享有最终解释权,并在法律允许的范围内保留随时修改的权利。修改后的协议一经公布即生效,继续使用服务即视为同意修订内容。