扫描件变可问答:中文OCR接大模型的融合实践指南
【免费下载链接】Awesome-Chinese-LLM整理开源的中文大语言模型,以规模较小、可私有化部署、训练成本较低的模型为主,包括底座模型,垂直领域微调及应用,数据集与教程等。项目地址: https://gitcode.com/GitHub_Trending/aw/Awesome-Chinese-LLM
周一早上,一位财务经理把扫描版的供应商合同甩进群:"谁帮我看看付款期限、违约金和交付节点分别在哪儿?"传统做法是人工翻几十页纸,但如果你搭一套「OCR + 中文大模型」的融合管线,这份扫描件在几分钟内就能变成一个可以问答的文档库——先由OCR把像素还原成文字,再交给开源大模型做条款定位与归纳。Awesome-Chinese-LLM 这个仓库正适合当这类管线的"装备库":它按规模从大到小、从通用到垂直梳理了上百个开源中文大语言模型,底座模型、垂直微调、数据集、训练与部署框架、教程一应俱全,方便你按手头硬件选一套跑得动的组合。
一份扫描件离"可问答"还差三步
单靠OCR做不了理解这件事:它只负责把像素还原成字符序列,"付款期限是多少天"这类问题,它一个字也答不上来。把扫描件变成可问答数据,实际要过三关:
- 识别:OCR先检测出文字区域,再逐行把图像字符转成文本。中文场景推荐 PaddleOCR(百度开源、预训练模型全、支持微调),背景复杂的文档可以试试 EasyOCR(支持80多种语言),资源紧张时用轻量的 ddddocr 更合适。
- 结构化:原始OCR输出是一堆乱序文本块,直接灌给大模型会丢失阅读顺序。这一段要做四件事:按文本长度和标点做段落分割,利用字号与位置识别标题,把表格结构抽出来转成CSV/Excel,公式则转成LaTeX或MathML表示。
- 推理:结构化后的文本交给大模型,它才能定位条款、归纳风险、回答提问。这一步的能力取决于你选的底座。
仓库里的分类图把这件事讲得很直观:
三步跑通最小Demo
先装依赖:
git clone https://gitcode.com/GitHub_Trending/aw/Awesome-Chinese-LLM pip install paddleocr opencv-python transformers torch accelerate sentencepiece两段最小示例,一段完成识别,一段完成问答(模型以 ChatGLM-6B 为例):
from paddleocr import PaddleOCR ocr = PaddleOCR(use_angle_cls=True, lang="ch") result = ocr.ocr("document.jpg", cls=True) text = "\n".join([line[1][0] for line in result[0]])from transformers import AutoTokenizer, AutoModel tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True) model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().cuda().eval() question = "这份合同的付款期限和违约金条款是什么?" resp, _ = model.chat(tokenizer, f"文档:{text}\n问题:{question}\n回答:", history=[]) print(resp)到这一步,最小可用Demo就跑通了:图片进、答案出,中间的每个环节都可以单独替换升级。
三件套怎么选怎么换
三件套里每个部件都可以独立更换,选型时记住一句决策路径:先定硬件,再定上下文,最后调效果。
| 环节 | 常用选择 | 特点与适用场景 |
|---|---|---|
| OCR识别 | PaddleOCR / EasyOCR / ddddocr | 中文效果稳 / 多语言、复杂背景 / 轻量、资源受限 |
| 结构化 | 自建规则管线 | 段落分割、标题识别、表格转CSV、公式转LaTeX |
| 大模型(轻量) | ChatGLM-6B、Baichuan-7B、Qwen-7B | 6B参数中英双语、支持INT4/INT8量化;1.2万亿tokens训练、可商用;8K上下文、中文任务表现好 |
| 大模型(中大型) | ChatGLM2-6B、InternLM-7B、XVERSE-13B | 32K上下文、支持工具调用;数学推理突出;40+语言、8K上下文 |
两个补充判断:
- 文档普遍超过几万字?优先挑上下文长的版本(比如32K档位),不然只能反复截断喂入。
- 不想维护OCR链路?仓库里的多模态模型(Qwen-VL、CogVLM、InternVL 等)可以直接吃图片输入,省掉识别和结构化两步,代价是显存占用更高。
把准确率与速度抠上去
优化分三层做,哪层是短板就动哪层:
| 层级 | 手段 | 解决什么问题 |
|---|---|---|
| OCR层 | 多引擎结果融合;针对特定字体/场景微调;领域词表做后处理纠错 | 识别错字、错行 |
| 大模型层 | INT4/INT8量化省显存;知识蒸馏把能力压到小模型;打磨prompt模板 | 跑得慢、占显存、输出格式不稳 |
| 系统层 | 缓存已处理文档;异步队列消化批量任务;分布式部署扛高并发 | 重复计算、吞吐瓶颈 |
硬件这边直接对照下表买卡/申请资源:
| 模型规模 | 最低配置 | 推荐配置 | 推理速度 |
|---|---|---|---|
| 7B以下 | 8GB内存 | 16GB内存 + RTX 3090 | 10~30 token/秒 |
| 13B | 16GB内存 | 32GB内存 + RTX 4090 | 5~15 token/秒 |
| 30B以上 | 32GB内存 | A100 40GB+ | 2~8 token/秒 |
一句话总结:量化、缓存、异步这三招不动模型本身,却常常是提速最便宜的杠杆。
常见翻车现场与自救
大模型"一本正经地错"——根源往往是OCR在某个字段上识别错了,而模型顺着错字往下编。自救:在提示词里写明"无法确定的内容请标注'原文不清晰'",或对关键字段跑第二遍校验再入库。
长文档装不进上下文——超过窗口长度会被截断,结论自然失真。自救:按段落切块,逐块小结后再合并;或者直接换上下文更长的底座(如32K档位的 ChatGLM2-6B)。
显存爆了——先上 INT4/INT8 量化,把模型压下来;还不行就换7B档,或干脆用多模态小模型端到端处理。
没独立显卡——用量化版权重加轻量CPU推理库也能跑通Demo,只是速度要按分钟级来预期,适合验证流程而非生产。
垂直领域落地与资源入口
三个落地最勤的领域,处理重点各不相同:
- 医疗:病历分析、检查报告解读、处方里的药品与剂量识别,难点在专业术语——清单见 医疗领域模型
- 法律:合同风险条款定位、类案检索、法律问答,难点在条文引用的准确性——清单见 法律领域模型
- 金融:财报指标抽取、研报摘要、风险因素识别,难点在数字必须精确——清单见 金融领域模型
这些清单在 Awesome-Chinese-LLM 主目录 的"垂直领域微调"章节里都能找到,按底座模型归好了类,照着挑即可。
下一步建议按这个顺序走:先跑通上面的最小Demo → 用标注工具攒一批自己领域的问答数据 → 拿评测工具量化效果 → 决定是直接微调还是走检索增强。基础知识薄弱的话,从 LLM教程 开始补课刚刚好。
【免费下载链接】Awesome-Chinese-LLM整理开源的中文大语言模型,以规模较小、可私有化部署、训练成本较低的模型为主,包括底座模型,垂直领域微调及应用,数据集与教程等。项目地址: https://gitcode.com/GitHub_Trending/aw/Awesome-Chinese-LLM
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考