news 2026/9/16 20:00:18

3行代码训练扫描文档分类器:AutoGluon PDF文档分类实操笔记

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
3行代码训练扫描文档分类器:AutoGluon PDF文档分类实操笔记

3行代码训练扫描文档分类器:AutoGluon PDF文档分类实操笔记

【免费下载链接】autogluonFast and Accurate ML in 3 Lines of Code项目地址: https://gitcode.com/GitHub_Trending/au/autogluon

本教程用 AutoGluon 的多模态模块对扫描件和 PDF 做文档分类:页面文字自动 OCR,再训练一个类别预测模型。读完你可以拿到一个可运行的 RVL-CDIP 扫描文档分类器,以及换模型、提文档向量的完整写法。

效果速览:分类结果长什么样

先看输出。预测接口输入一个文件路径,返回类别标签;对同一文件再调用一次,还能拿到各类别的概率分布:

真实标签: form 预测结果: ['form'] 类别概率: budget 0.11 email 0.07 form 0.82

RVL-CDIP 样本数据里的预算表(budget)、邮件(email)、表单(form)三类都是扫描图片。按下面的流程训练约 2 分钟,留出验证集上的 accuracy 通常在 0.9 以上,这个数字可以直接用来判断模型是否可用。

准备文档分类训练环境

文档处理依赖 Tesseract OCR 引擎,系统里要先装好;其余依赖都在 Python 包里,一条命令装完就能跑:

pip install autogluon.multimodal sudo apt install tesseract-ocr # Ubuntu;macOS 改用 brew install tesseract

训练时预测器会自动调用 Tesseract 提取页面文字,所以你不需手动跑任何 OCR 命令,也不用自己解析 PDF 里的文本层。

核心工作流:加载数据、训练模型、预测类别

整个过程只有三步:加载数据表、训练模型、预测类别。数据是一张表,每行对应一份文档:doc_path列是文件路径,label列是类别。表结构与标注工具的导出结果类似,路径和标签一一对应:

① 加载扫描文档数据

先从文档预测教程里下载并解压 RVL-CDIP 样本包,然后读表,并把相对路径改成本地绝对路径,否则预测器找不到文件:

import os import pandas as pd base = "./docs_data/rvl_cdip_sample" docs = pd.read_csv(f"{base}/rvl_cdip_train_data.csv") train, test = docs.iloc[:2000], docs.iloc[2000:] for df in (train, test): # 把相对路径拼成本地绝对路径 df["doc_path"] = df["doc_path"].apply(lambda p: os.path.join(base, p))

这一步只做两件事:拿到数据表,让表里每个路径在当前机器上可解析。

② 训练一个扫描文档分类模型

训练是一次fit调用。OCR、文本与版面特征提取、预训练文档模型微调都在内部自动完成,你只需指定标签列和时间预算:

from autogluon.multimodal import MultiModalPredictor predictor = MultiModalPredictor(label="label") predictor.fit( train_data=train, val_data=test, hyperparameters={ "model.document_transformer.checkpoint_name": "microsoft/layoutlm-base-uncased", }, time_limit=120, )

训练完成后模型会随预测器一起保存,换进程使用时调用predictor.load()即可恢复,不用重新训练。

③ 给新 PDF 预测类别

预测传入一个字典,键是路径列名,值是一个路径列表,返回同长度、同顺序的类别标签列表;predict_proba则返回每个类别的概率,方便做置信度过滤:

doc = test.iloc[0]["doc_path"] print("真实标签:", test.iloc[0]["label"]) print("预测结果:", predictor.predict({"doc_path": [doc]})) print("类别概率:", predictor.predict_proba({"doc_path": [doc]}))

返回的标签可以直接写入数据库,或者作为目录名把文件自动归档到对应类别的文件夹里。

文档模型怎么选:LayoutLM、LayoutLMv3、LayoutXLM

默认的layoutlm-base-uncased是均衡之选:它同时输入文字、位置和图像特征,适合预算表、表单这类单栏排版的英文扫描件。三个候选模型按场景区分:

模型适用场景
layoutlm-base-uncased英文单栏扫描件,数据量小,默认选择
layoutlmv3-base多栏、复杂版式的 PDF,对准确率要求更高
layoutxlm-base含中文、日文等多语言内容的文档

换模型只改一个超参,顺带可以控制训练轮数和学习率:

hyperparameters = { "model.document_transformer.checkpoint_name": "microsoft/layoutlmv3-base", "optimization.max_epochs": 3, "optimization.learning_rate": 5e-5, }

max_epochs控制训练轮数,数据量小时 3 轮足够;learning_rate微调时常用 5e-5 这个量级。

从分类到向量化:提取文档嵌入

同一个预测器还能输出文档向量,不必另外训练表示模型:

import numpy as np emb = np.array(predictor.extract_embedding({"doc_path": doc})) print("向量维度:", emb.shape)

一行调用拿到一份文档的向量。对一批文档两两计算余弦相似度,就能做重复文档检测和相似合同检索;直接把向量丢给聚类算法,也能完成文档的自动分组归档。

部署与更多资源

训练完成的预测器用save()/load()持久化,也可以导出 ONNX 格式接入推理服务,导出写法参考 ONNX 部署示例。深入源码和更多场景,从这几个入口看起:

  • 文档预测教程入口
  • 扫描件分类教程
  • PDF 文档分类教程
  • 多模态模块源码

【免费下载链接】autogluonFast and Accurate ML in 3 Lines of Code项目地址: https://gitcode.com/GitHub_Trending/au/autogluon

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/16 19:57:13

Synology NAS共享文件夹创建与权限配置、跨设备自动挂载实战指南

做运维这些年,我经手的Synology NAS少说也有几十台,每次帮朋友或客户配置共享文件夹,看起来就是个点鼠标的活,但真正踩过坑才知道,权限模型、访问协议、自动挂载这些环节,任何一个没处理好,后面…

作者头像 李华
网站建设 2026/9/16 19:56:54

基于卷积神经网络的垃圾识别分类系统实战:数据集到部署全流程

简介:基于深度学习卷积神经网络实现的垃圾识别分类系统,提供完整Python源码、近两千张标注图片数据集及训练好的模型文件。项目源自导师指导下的高分课程设计,流程完整,下载解压即可运行,适合作为深度学习、计算机视觉…

作者头像 李华