【高级RAG技巧】在大模型知识库问答中增强文档分割与表格提取

这篇具有很好参考价值的文章主要介绍了【高级RAG技巧】在大模型知识库问答中增强文档分割与表格提取。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

文档分割是一项具有挑战性的任务,它是任何知识库问答系统的基础。高质量的文档分割结果对于显著提升问答效果至关重要,但是目前大多数开源库的处理能力有限。
这些开源的库或者方法缺点大致可以罗列如下:

  • 只能处理文本,无法提取表格中的内容
  • 缺乏有效的分割策略,要么是一整个文档全部提取,要么是词粒度的获取

对于第一点,一般是把表格中的内容识别成文本,这样喂给大模型的时候就会出现一连串数字或者字母,这无疑会增大模型的理解难度;对于第二点,则是需要按照指定的长度对文档进行切分,或者把词按照一定的规则拼接到一块,这同样会损失到文本自身的上下文信息。

而本文接下来介绍的Open-parse这个库可以直接从文本中提取出多个节点,每个节点就是一个chunk,已经分好了,因此无需再按照长度进行split,这样同时也比单独提取一个词再进行合并又简化了不少操作;同时还支持同时提取表格和文字,无需分开提取。

快速开始

安装

pip install openparse

使用pip进行安装,同时这个库依赖Pymupdfpdfminer等其他库,也会同时安装。

识别文字

pdf = "c:\\人口.pdf"
parser = openparse.DocumentParser()
parsed_basic_doc = parser.parse(pdf)
for node in parsed_basic_doc.nodes:
    node
    print('\n--------------------\n')

【高级RAG技巧】在大模型知识库问答中增强文档分割与表格提取

可以看到每一页的pdf被分成多个chunk,且还能保留原始文本中的加粗斜体等信息。

print(parsed_basic_doc.nodes[0])

elements=(TextElement(text='Aging Research老龄化研究, 2022, 9(3), 26-34\nPublished Online September 2022 in Hans. http://www.hanspub.org/journal/ar \nhttps://doi.org/10.12677/ar.2022.93004 ', lines=(LineElement(bbox=(56.64, 739.57, 232.44, 750.01), spans=(TextSpan(text='Aging Research ', is_bold=True, is_italic=False, size=9.0), TextSpan(text='老龄化研究', is_bold=False, is_italic=False, size=9.0), TextSpan(text=', 2022, 9(3), 26-34 ', is_bold=True, is_italic=False, size=9.0)), style=None, text='Aging Research老龄化研究, 2022, 9(3), 26-34'), LineElement(bbox=(56.65, 728.28, 348.95, 737.28), spans=(TextSpan(text='Published Online September 2022 in Hans. http://www.hanspub.org/journal/ar ', is_bold=False, is_italic=False, size=9.0),), style=None, text='Published Online September 2022 in Hans. http://www.hanspub.org/journal/ar '), LineElement(bbox=(56.64, 717.36, 225.23, 726.36), spans=(TextSpan(text='https://doi.org/10.12677/ar.2022.93004 ', is_bold=False, is_italic=False, size=9.0),), style=None, text='https://doi.org/10.12677/ar.2022.93004 ')), bbox=Bbox(page=0, page_height=807.96, page_width=595.32, x0=56.64, y0=717.36, x1=348.95, y1=750.01), variant=<NodeVariant.TEXT: 'text'>, embed_text='Aging Research老龄化研究, 2022, 9(3), 26-34\nPublished Online September 2022 in Hans. http://www.hanspub.org/journal/ar \nhttps://doi.org/10.12677/ar.2022.93004 '),) variant={'text'} tokens=66 bbox=[Bbox(page=0, page_height=807.96, page_width=595.32, x0=56.64, y0=717.36, x1=348.95, y1=750.01)] text='Aging Research老龄化研究, 2022, 9(3), 26-34\nPublished Online September 2022 in Hans. http://www.hanspub.org/journal/ar \nhttps://doi.org/10.12677/ar.2022.93004 '

通过打印出node,可以看出这种结构包含了原始文本中的元信息,包含文本的坐标、大小、是否加粗、是否斜体等。

识别表格内容

  • Pymupdf
  • Unitable
  • Table Transformer

openparse提供了三个方法来识别和提取表格中的内容,方法1是直接使用Pymupdf这个库的表格识别模块,因此准确率最差,但对硬件要求不高;其他的2个都是100mb左右的模型,如果用cpu来推理会比较耗时。

# defining the parser (table_args is a dict)
parser = openparse.DocumentParser(
    table_args={
        "parsing_algorithm": "table-transformers", # 或者其他两个方法
        "table_output_format": "html" # 以html格式返回表格内容,也可以选择md
    }
)

与前面直接识别文本类似,只需要加入table_args参数即可。
【高级RAG技巧】在大模型知识库问答中增强文档分割与表格提取

可以看到表格中的内容被很好的还原了

使用表格提取除了返回表格内容外,还会把正常的文本返回,这与Pymupdf等库只能选择返回文本还是只返回已有的表格不同。因此在不确定文本中含有什么内容时用这个方法会更加保险一点,对硬件的计算要求也不高。

语义相似

from openparse import processing, DocumentParser

semantic_pipeline = processing.SemanticIngestionPipeline(
    openai_api_key=OPEN_AI_KEY,
    model="text-embedding-3-large",
    min_tokens=64,
    max_tokens=1024,
)

parser = DocumentParser(
    processing_pipeline=semantic_pipeline,
)

openparse还支持端到端的方式对node数据进行向量化并聚类,只需要指定processing_pipeline为相应的embedding模型即可。但是目前仅支持OpenAI的模型,需要OPEN_AI_KEY才可以使用。虽然后续会更新其他模型,但目前想用的话需要自己修改这段代码的实现。

combine_parser = DocumentParser(
    processing_pipeline=semantic_pipeline,
    table_args={
        "parsing_algorithm": "table-transformers",
        "table_output_format": "html"
    }
    
)

同时,还能把语义相似和表格内容提取组合到一起使用,实现对表格内容提取的同时还能融合相似的片段。

总结

openparse这个库算是目前开源社区中比较优秀的文档分割处理库了,功能虽然全面,还是还有不少可以优化的地方,后续也会支持其他向量化模型,并且可以跟LlamaindexLangchain等框架无缝衔接,应该值得持续关注。文章来源地址https://www.toymoban.com/news/detail-855165.html

到了这里,关于【高级RAG技巧】在大模型知识库问答中增强文档分割与表格提取的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【大模型应用开发教程】04_大模型开发整体流程 & 基于个人知识库的问答助手 项目流程架构解析

    项目仓库地址 项目学习地址 定义 将 开发以LLM为功能核心 ,通过LLM的强大理解能力和生成能力,结合特殊的数据或业务逻辑来提供独特功能的应用。 核心点 通过调用 API 或开源模型来实现核心的理解与生成 通过 Prompt Enginnering 来实现大语言模型的控制 在大模型开发中,我们

    2024年02月05日
    浏览(36)
  • 开源大模型ChatGLM2-6B 2. 跟着LangChain参考文档搭建LLM+知识库问答系统

    租用了1台GPU服务器,系统 ubuntu20,Tesla V100-16GB (GPU服务器已经关机结束租赁了) SSH地址:* 端口:17520 SSH账户:root 密码:Jaere7pa 内网: 3389 , 外网:17518 VNC地址:* 端口:17519 VNC用户名:root 密码:Jaere7pa 硬件需求,ChatGLM-6B和ChatGLM2-6B相当。 量化等级    最低 GPU 显存 F

    2024年02月03日
    浏览(35)
  • (一)AI本地知识库问答(可运行):LangChain+Chroma向量数据库+OpenAi大模型

    只需要看config目录下的config.py,data目录下的txt知识库文件,db向量数据库文件在持久化部署后会自动生成,route下的app.py,scripts目录下的Chroma向量库持久化部署.py这几个就可以,scripts目录下的考勤问答.py和test目录下都是单独的自己测试的小代码,可以不用关注 因为运行需要

    2024年02月03日
    浏览(28)
  • AnythingLLM:基于RAG方案构专属私有知识库(开源|高效|可定制)

    继OpenAI和Google的产品发布会之后,大模型的能力进化速度之快令人惊叹,然而,对于很多个人和企业而言,为了数据安全不得不考虑私有化部署方案,从GPT-4发布以来,国内外的大模型就拉开了很明显的差距,能够实现的此路径无非就只剩下国内的开源大模型可以选择了。而

    2024年02月04日
    浏览(44)
  • AIGC内容分享(三):AIGC应用:基于RAG构建个人知识库

    目录 前言 Collect (收集) 收集是什么? Organize (组织) 组织信息 Distill (提炼) 提炼信息 Express (表达) 表达见解 Finetune调优 调整输出内容 总结一下 在信息爆炸的时代,如何有效地处理和汲取大量的信息成为一个关键的挑战,尤其对于知识工作者。如果有一个知识库就像外挂大脑

    2024年02月02日
    浏览(34)
  • ai聊天问答知识库机器人源码,基于gpt实现的本地知识库问答实现,聊天对话效果,发送回复以及流式输出...

    现在基于gpt做自己项目的问答机器人,效果非常的好。可以把自己的文档上传上去,让机器人根据文档来进行回答。 想要实现智能AI问答功能,现在大部分都是基于向量数据库的形式。 整体的流程就是:上传文档===openai向量接口 ==== 存入向量数据库 访客咨询:  咨询问题

    2024年02月10日
    浏览(36)
  • chatglm实现基于知识库问答的应用

    目前由于ChatGPT横空出世,互联网如雨后春笋冒出了非常多的类ChatGPT的大型语言模型。但是对于这些语言模型,我们应该如何将它应用到我们实际的生产中需要一个更加成熟的解决方案。 本文旨在通过介绍ChatGLM的使用来讲述如何将一个开源的语言模型应用于智能问答,知识库

    2024年02月06日
    浏览(27)
  • 【chatglm3】(4):如何设计一个知识库问答系统,参考智谱AI的知识库系统,

    https://www.bilibili.com/video/BV16j411E7FX/?vd_source=4b290247452adda4e56d84b659b0c8a2 【chatglm3】(4):如何设计一个知识库问答系统,参考智谱AI的知识库系统,学习设计理念,开源组件 https://open.bigmodel.cn/knowledge 知识配置: 项目地址是: https://github.com/chatchat-space/Langchain-Chatchat gitee搬运的项

    2024年02月05日
    浏览(34)
  • 基于LangChain+LLM的本地知识库问答:从企业单文档问答到批量文档问答

    过去半年,随着ChatGPT的火爆,直接带火了整个LLM这个方向,然LLM毕竟更多是基于过去的经验数据预训练而来,没法获取最新的知识,以及各企业私有的知识 为了获取最新的知识,ChatGPT plus版集成了bing搜索的功能,有的模型则会调用一个定位于 “链接各种AI模型、工具”的

    2024年02月07日
    浏览(38)
  • LangChain入门(四)-构建本地知识库问答机器人

    在这个例子中,我们会介绍如何从我们本地读取多个文档构建知识库,并且使用 Openai API 在知识库中进行搜索并给出答案。 目录 一、安装向量数据库chromadb和tiktoken 二、使用案例 三、embeddings持久化 四、在线的向量数据库Pinecone 一、安装向量数据库chromadb和tiktoken    其中h

    2024年02月05日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包