• 大模型时代的PDF解析工具


    去年(2023年)是大模型爆发元年。但是大模型具有两个缺点:缺失私有领域知识和幻觉。缺失私有领域知识是指大模型训练时并没有企业私有数据/知识,所以无法正确回答相关问题。并且在这种情况下,大模型会一本正经地胡说八道(即幻觉),给出错误的回答。
    那么如何解决这两个缺点?目前主要有两种方法,微调和RAG。微调是指使用企业私有数据/知识基于现有大模型训练出一个新的模型,然后我们使用这个新的模型来回答用户问题。RAG是检索增强生成(Retrieval-Augmented Generation)的缩写,是指在用户提问时系统后台根据用户问题检索相关数据/知识,然后将所检索到的相关数据/知识加上用户问题一起交给大模型处理。
    我们可以看到,无论是哪种方法,将企业私有数据/知识传给大模型都是位于整个流程的上游,这个阶段的任何失误都会直接影响到整个流程的下游,最终影响整个问答的准确率。
    为了让读者更形象地了解这个环节,本文将以一份上市公司年报PDF为例进行讲解。
    本文选择了恒生电子(600570)2022年的年度报告(修订版)做为示例,大家可以在巨潮资讯搜索下载这份PDF文件。

    使用传统PDF解析工具解析PDF

    首先我们使用传统的PDF解析工具解析PDF。
    传统的PDF解析库相当地多,我们就不一一罗列和分析了。这里我们仅以目前最流行的大模型框架LangChain所支持的其中一个解析库PyPDF为例。
    我们使用LangChain并选择PyPDFLoader来读取文件“恒生电子:恒生电子股份有限公司2022年年度报告(修订版).PDF”

    from langchain_community.document_loaders import PyPDFLoader
    loader = PyPDFLoader("example_data/恒生电子:恒生电子股份有限公司2022年年度报告(修订版).PDF")
    pages = loader.load_and_split()
    

    存在的问题

    我们发现通过PyPDFLoader读取的结果存在很多问题,这里仅以PDF第6页和第7页的“七、近三年主要会计数据和财务指标”为例:

    通过PyPDFLoader读取的结果为(为节省篇幅,这里去除了所有空白换行符):

    七、 近三年主要会计数据和财务指标
    (一) 主要会计数据
    单位:元 币种:人民币
    主要会计数据 2022年 2021年
    本期比上年 同期增减
    (%)
    2020年
    营业收入 6,502,387,143.49 5,496,578,624.88 18.30 4,172,645,156.56
    归属于上市公司股东的 净利润 1,091,088,379.58 1,463,538,930.14 -25.45 1,321,735,522.48
    归属于上市公司股东的 扣除非经常性损益的净 利润
    1,144,419,161.05 946,569,672.55 20.90 733,590,924.61
    经营活动产生的现金流 1,138,192,779.96 956,789,306.14 18.96 1,397,902,270.41
    2022 年年度报告
    **7** /
    **211** 量净额
    2022年末 2021年末
    本期末比上 年同期末增
    减(%)
    2020年末
    归属于上市公司股东的 净资产 6,811,761,050.50 5,695,031,051.05 19.61 4,554,029,323.59
    总资产 13,004,578,298.67 12,079,908,312.76 7.65 9,971,144,688.34
    

    我们可以发现以下问题:

    1. PDF换页导致表格行头被断开:第四行的行头“经营活动产生的现金流量净额”被断成两截,生生加入了“1,138,192,779.96 956,789,306.14 18.96 1,397,902,270.41 2022 年年度报告 **7** /**211** ”一长串内容。我们可以看到,这一段内容中,干扰信息比正常信息还要多一两倍。遇到这种问题,再强大的大模型都无法正确处理!
    2. 丢失表格列头信息:表格最后几行数据完全无法与表格列头建立关系。从而导致大模型无法识别这些数据所代表的意义。
      除了PyPDFLoader之外,其它传统的PDF解析工具的处理结果也差不多。
      计算机科学与信息通信技术领域有一句习语:垃圾进,垃圾出 ( Garbage in, garbage out ,缩写GIGO )。我们可以看到,在这个示例中,因为传统PDF解析工具的局限性,生生地把精华处理成垃圾喂给了大模型,大模型自然而然地只能给出垃圾给用户了。那么,我们如何解决这些问题呢?

    使用大模型时代的PDF解析工具

    既然传统的PDF解析工具跟不上时代的发展,那么我们就使用大模型时代的PDF解析工具。
    截至目前为止,大模型时代的PDF解析工具有两类:

    1. 原生支持英文,对中文支持尚待改进的:Marker、nougat(Facebook)、Layoutlmv3(Microsoft)、DocLayNet(IBM)、ByT5(Google)
    2. 原生支持中文,并以中文大模型为试验对象的:Vary、PDF4AI.cn
      这里以Marker(https://github.com/VikParuchuri/marker)为代表简单描述一下第一类工具。Marker的原理是将PDF解析成Markdown喂给大模型。因为Markdown可以保留表格的结构信息,所以能够解决前面示例中的问题。
      然而很遗憾的是,Marker目前尚未支持中文,所以无法用于本文中的示例。不过大模型时代技术发展迅速(LangChain几乎每天更新一个版本),Marker才诞生三个月就已经更新多个版本,相信很快就会支持中文了。
      至于nougat、Layoutlmv3、DocLayNet、ByT5都是类似于Marker的工具,因为篇幅原因,这里就不过多描述了。
      这些工具有些明确表示目前不支持中文,有些虽然支持中文,但是实际效果可能不能满足读者们的预期。
      既然以上工具对中文支持不友好,那么有没有支持中文的类似工具呢?旷视推出了Vary。
      Vary是以中文大模型(阿里巴巴的通义千问Qwen)为试验对象的,并且优先和原生支持中文,从Vary的官网可以看到,Vary的Demo都是先展示中文再展示英文的。
      Vary的官网是https://varybase.github.io/ , 比较奇怪的是,虽然各大自媒体号说这是旷视推出的模型,然而这个官网并没有表现出这一点。同时Vary推出没多久,目前改进空间还很大,笔者将持续关注。
      另一个工具是PDF4AI.cn(https://www.pdf4ai.cn)。PDF4AI.cn的原理与Marker、Vary是一样的,都是将PDF解析成Markdown喂给大模型。
      PDF4AI.cn分为免费版和专业版。截止目前为止,PDF4AI.cn的免费版未能解决以上示例中的问题。
      PDF4AI.cn专业版可以解决以上示例中的问题。以下是PDF4AI.cn专业版的处理结果(为节省篇幅,这里去除了所有空白换行符):
    七、 近三年主要会计数据和财务指标
    (一) 主要会计数据
    单位:元 币种:人民币  
    | 主要会计数据 | 2022 | 2021 | 本期比上年同期增减 (%) | 2020 |
    | ------ | ----- | ----- | -------------- | ----- |
    | 营业收入 | 6,502,387,143.49 | 5,496,578,624.88 | 18.30 | 4,172,645,156.56 |
    | 归属于上市公司股东的净利润 | 1,091,088,379.58 | 1,463,538,930.14 | -25.45 | 1,321,735,522.48 |
    | 归属于上市公司股东的扣除非经常性损益的净利润 | 1,144,419,161.05 | 946,569,672.55 | 20.90 | 733,590,924.61 |
    | 经营活动产生的现金流量净额 | 1,138,192,779.96 | 956,789,306.14 | 18.96 | 1,397,902,270.41 |
    | 归属于上市公司股东的净资产 | 6,811,761,050.50 | 5,695,031,051.05  | 19.61 | 4,554,029,323.59 |
    | 总资产 | 13,004,578,298.67 | 12,079,908,312.76  | 7.65  | 9,971,144,688.34 |
    

    熟悉Markdown的朋友们可以看出,以上处理结果将PDF里面的表格转换为Markdown里面的表格。
    为了让不熟悉Markdown的朋友们有一个直观的认识,笔者使用Markdown编辑工具将以上结果可视化一下:

    现在我们可以清晰地看到,表格信息被完整保留,从而解决了以上示例中的问题。

    总结

    与传统的PDF解析工具相比,大模型时代的PDF解析工具将PDF解析成Markdown,从而保留一些结构化的信息(例如表格和图片),再喂给大模型,从而避免把精华处理成垃圾,避免垃圾进,垃圾出。
    去年(2023年)大模型才爆发,因此这些大模型时代的PDF解析工具都是新生产物,有很多地方尚待改进,不过它们也更新迅速,感兴趣的读者可以持续关注。

  • 相关阅读:
    3D可视化工厂是如何实现的?
    Python3 笔记:字符串的 encode() 和 bytes.decode()
    ADS1284 TI官方驱动
    扩展接口设计模式 (extension interface design pattern)
    Hive日分区表如何快速导入到StarRocks
    sql分词查询,实现类似ES的效果
    【两种方法实现 CSS/Javascript 简单的图片轮播效果】
    刷题日记【第三天】
    【大二Web课程设计】基于HTML+CSS技术制作抗疫感动专题网页设计
    这应该是java最好用的orm之一了
  • 原文地址:https://www.cnblogs.com/adalovelacer/p/18092208/pdf-tools-for-large-language-model