支持私有化部署
AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


使用RAG技术构建企业级文档问答系统:解析(1)使用MinerU将PDF转换为Markdown

发布日期:2024-12-16 07:29:31 浏览次数: 2114 作者:超乎想象的科技圈

概述

在RAG应用中,一个稍微有点规模的知识库可能包含来自PDF、Word、PPT、网页等各种不同来源的内容,每种内容都有各自的解析器,但想把每种类型的解析都做到比较好是比较繁琐的,直观的例子比如Word中,可能存在页眉、页脚,页面版式可能是左右两栏,PDF中有可能会包含水印等干扰内容,网页就更明显了,这些如果处理不好,都会不同程度地影响后续流程,对每种文档类型分别解析并进行处理的模型,流程如下:

为什么需要这么多的解析器呢?直接把各种文件读取成字节流丢给大语言模型(以下简称LLM)不行吗,以当前的技术发展来说还不行,目前的LLM,无论是什么内容,都得组织成文本,它才能处理,(顺便提一句,现在的多模态大模型,也不能直接处理PDF、Word这种文件),而PDF、Word、网页等其实都是富文本,里面除了文字,通常还包含公式、图片、表格、统计图,排版方式也各不相同,甚至其中的格式也是很重要的内容(标题一般会比正文重要性高),而解析的作用,其实是把各种富文本,转换成纯文本的过程。

Markdown因为其简单明了的语法等特性,得到了广泛的应用,它可以通过纯文本来表达标题、列表、代码块、引用、表格、图片、公式、链接等,因为它本身是纯文本,大语言模型是可以直接处理的。如果大家用过扣子的提示词自动优化就会发现,优化后的提示词,变成了Markdown格式的,而且不少AI助手,它的输出其实也是Markdown格式的。其实使用YAML、JSON、XML来表达也是可以的,但因为使用这些标记语言设计的初衷是为了解决文件传输、保存配置信息等,LLM在训练的时候也没见过多少使用这些格式来表达图文、表格内容的,所以它也不擅长,只能通过Schema的方式来告诉LLM,而这样又会增加许多额外工作,没必要。所以,对于文档格式丰富的知识库,还有一种借助Markdown中转的处理模式,流程如下:

乍一看还比上面的流程复杂了,但其实不然,原因有以下两点:

  • PDF转Markdown、Word转Markdown等有很多成熟的工作可以借鉴,像页眉页脚处理、水印处理这种事情,这些工作都是通用的方式处理,而自己写解析器处理的话,要考虑很多事情,未必比别人做得更好

  • 统一转成Markdown之后,只需要将注意力专注在Markdown解析和处理上就可以了,这样可以大幅降低整个系统的开发、维护成本

使用方法

下面就来介绍一下可借鉴的成熟的工作——MinerU,这个是上海人工智能实验室开源的项目,项目地址如下:

https://github.com/opendatalab/MinerU

安装配置

第一步,安装包:

conda create -n MinerU =.10
conda activate MinerU
pip install -U magic-pdf[full] --extra-index-url https://wheels.myhloli.com

第二步,下载模型:

pip install huggingface_hub
wget https://github.com/opendatalab/MinerU/raw/master/scripts/download_models_hf.py -O download_models_hf.py
python download_models_hf.py

第三步,修改配置文件:

配置文件,对于Windows系统,在C:\Users\username\magic-pdf.json下,Linux系统在/home/username/magic-pdf.json下,macOS系统在/Users/username/magic-pdf.json下,把username换成自己的,如果有GPU,可以将device-mode改为cuda,官方建议需要至少8G显存,本人实测下面的文档处理时,显存消耗不超过6G。

使用

下面的的样例代码,假设处理data目录下的2024全球经济金融展望报告.pdf文件

 

   logger
   UNIPipe
   DiskReaderWriter

pdf_name = 

pdf_path = os.path.join(, )
output_dir = os.path.join(, pdf_name)
  os.path.exists(output_dir):
    os.makedirs(output_dir, exist_ok=)
local_image_dir = os.path.join(output_dir, )
output_filename = os.path.join(output_dir, pdf_name)

 os.path.exists(output_filename + ):
    logger.info()

:
    pdf_bytes = (pdf_path, ).read()
    jso_useful_key = {: , : []}
    image_dir = (os.path.basename(local_image_dir))
    image_writer = DiskReaderWriter(local_image_dir)
    pipe = UNIPipe(pdf_bytes, jso_useful_key, image_writer)
    pipe.pipe_classify()
    pipe.pipe_analyze()
    pipe.pipe_parse()
    md_content = pipe.pipe_mk_markdown(image_dir, drop_mode=)
 (, , encoding=)  f:
        f.write(md_content)
   e:
    logger.error(e)

处理后,会在data目录下的2024全球经济金融展望报告目录下,有一个2024全球经济金融展望报告.md的文件,处理结果如下:

原始文档如下:


可以看到,页眉页脚统一都去掉了,图片也都正确提取出来了。

处理时间使用NVIDIA GTX 1080Ti处理时间1分43秒,使用Intel i7 9700K大约花费14分钟,供大家参考。






53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询