
人工智能大模型预训练微调LoRARLHF强化学习分布式训练【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP点击查看免费下载导读本文围绕 PaddleNLP 仓库中slm/pipelines子项目下的 Document Intelligence 模块展开系统讲解其两个核心节点——负责文档图像预处理与 OCR 的DocOCRProcessor以及负责文档提示问答DocPrompt的DocPrompter。通过阅读本文你将掌握这两个节点的完整 API 参数、输入输出约定、静态图推理调用链、YAML 流水线配置方法以及它们与paddlenlp.taskflow.utils底层工具函数之间的协作关系可直接用于搭建文档问答类应用。本文对应的 API 文档页为 document_intelligence.md其中通过 mkdocstrings 指令引用了pipelines.pipelines.nodes.document.document_intelligence与pipelines.pipelines.nodes.document.document_preprocessor两个模块。一、模块概览一条图像输入 → 结构化问答的流水线Document Intelligence 模块在 PaddleNLP Pipelines 中承担的角色是将图片、扫描件等非结构化文档输入经过 OCR 版面解析与视觉-语言联合建模最终输出针对用户 Prompt 的答案。整个模块由两个节点串联而成节点类源码文件职责DocOCRProcessordocument_preprocessor.py文档预处理把图片路径/URL/Base64 字节流转换为 OCR 结果DocPrompterdocument_intelligence.py文档理解基于 OCR 结果与 Prompt 抽取答案两个节点均继承自pipelines.nodes.base.BaseComponentoutgoing_edges 1即每个节点只有一条输出边分别返回(output_1, 数据)形式的二元组。它们通过init.py 对外导出并在 nodes/init.py 中随pipelines.nodes包统一注册因此可以直接在 YAML 配置中以组件类型名引用。从 mkdocs 配置 mkdocs.yml 可以看到该模块被组织在 Nodes module 文档分组下文档页即package/nodes/document_intelligence.md使用 mkdocstrings 的 python handlerpaths: [pipelines/pipelines]自动提取上述两个模块的签名与 docstring 生成 API 文档。二、DocOCRProcessor文档预处理节点2.1 构造参数DocOCRProcessor(use_gpu: bool True, lang: str ch)use_gpu是否使用 GPU。源码中会先通过paddle.get_device()判断当前环境若为 CPU 环境则强制回退为FalseFalls back on CPU if no GPU is available。langOCR 模型处理语言默认ch对应 PaddleOCR 的语言参数。构造时内部实例化PaddleOCR(use_angle_clsTrue, show_logFalse, use_gpuself._use_gpu, langself._lang)其中use_angle_clsTrue表示启用方向分类用于自动矫正旋转后的文本行show_logFalse关闭推理日志。也就是说该节点直接复用 PaddleOCR 完成检测 方向分类 识别。2.2 输入校验与三种文档来源节点入口run(meta: dict)首先调用_check_input_text(meta)对输入做严格校验。输入必须是 dict 或 dict 列表且必须包含doc与prompt两个字段否则抛出ValueError/TypeError并附带明确的错误信息。doc字段支持三种形式源码见 document_preprocessor.py 第 64-79 行本地图片路径os.path.isfile判定为真时直接使用图片 URL以http://或https://开头时先调用download_file下载到当前目录再以本地文件名作为docBase64 字节流既非 URL 也非本地文件时按 Base64 解码后经Image.open(BytesIO(...))转成 RGB 图像保存为./tmp.jpg后交给后续流程。prompt字段可以是单个字符串自动包装成单元素列表或全部由字符串组成的列表也可以额外提供word_boxes字段用于跳过 OCR、直接使用调用方已准备好的版面框信息格式为[[word_str, [x1, y1, x2, y2]], ...]。2.3 run 流程与输出def run(self, meta: dict): example self._check_input_text(meta)[0] if word_boxes in example.keys(): ocr_result example[word_boxes] example[ocr_type] word_boxes else: ocr_result self._ocr.ocr(example[doc], clsTrue) example[ocr_type] ppocr # Compatible with paddleocr2.6.0.2 ocr_result ocr_result[0] if len(ocr_result) 1 else ocr_result example[ocr_result] ocr_result output {example: example} return output, output_1关键点若用户已提供word_boxes则直接采用ocr_type标记为word_boxes避免重复 OCR否则调用self._ocr.ocr(doc, clsTrue)执行完整 OCRocr_type标记为ppocr。兼容性处理PaddleOCR 2.6.0.2 及以上版本返回结果嵌套层级有变化源码用ocr_result ocr_result[0] if len(ocr_result) 1 else ocr_result做了适配。输出结构为{example: {...}, output_1: ...}其中example在原有doc、prompt基础上新增ocr_result与ocr_type两个字段作为下游DocPrompter的输入。三、DocPrompter文档提示问答节点3.1 构造参数全解DocPrompter( topn: int 1, use_gpu: bool True, task_path: str None, model: str docprompt, device_id: int 0, num_threads: int None, lang: str ch, batch_size: int 1, )各参数含义与源码 docstring 一致参数默认值说明topn1返回前 N 个答案use_gpuTrue是否使用全部可用 GPU无 GPU 时自动回退 CPUtask_pathNone自定义模型参数目录为None时默认下载到PPNLP_HOME/pipelines/document_intelligence/docpromptmodeldocprompt模型名称当前URLS字典中仅注册了docprompt一项device_id0GPU 设备 IDnum_threadsNone推理线程数为None时取math.ceil(cpu_count() / 2)langch语言影响答案排序策略详见后文sort_resbatch_size1单次推理的样本数文档注释建议推理内存占用远低于训练可增大 batch 使整个文档只用一个 batch3.2 模型获取与静态图加载构造阶段依次完成四件事权重下载通过download_file(self._task_path, docprompt_params.tar, URLS[docprompt][0], URLS[docprompt][1])下载模型压缩包并校验 MD58eae8148981731f230b328076c5a08bf。推理模型装配_get_inference_model()拼接task_path/static/inference下的模型文件与参数文件路径后缀来自PADDLE_INFERENCE_MODEL_SUFFIX与PADDLE_INFERENCE_WEIGHTS_SUFFIX并用paddle.inference.Config构造推理配置。运行环境配置_prepare_static_mode()中CPU 环境调用disable_gpu()并enable_mkldnn()GPU 环境调用enable_use_gpu(100, device_id)并删除embedding_eltwise_layernorm_fuse_pass融合 Pass同时设置线程数、关闭 feed/fetch 旧接口、关闭 glog、开启显存优化、关闭 IR 优化最终paddle.inference.create_predictor创建预测器。模型侧组件初始化加载ernie-layoutx-base-uncased分词器AutoTokenizer.from_pretrained并基于该分词器构造ImageReader(super_rel_posFalse, tokenizer...)。3.3 推理主流程 _run_modelrun(example: dict)将单条输入包装为列表交给_run_model返回{results: results}。_run_model对每个 example 依次执行从 example 中取出ocr_result、doc文档路径、prompt、ocr_typeOCR 结果为空时直接构造空答案占位{prompt: p, result: [{value: , prob: 0.0, start: -1, end: -1}]}否则调用self._reader.data_generator(ocr_result, doc_path, prompt, batch_size, ocr_type)生成批次数据逐 batch 将输入copy_from_cpu写入 predictor 输入句柄、执行predictor.run()、将输出copy_to_cpu取回得到unique_ids与seq_logits借助find_answer_pos(result.seq_logits, feature)在序列 logits 上寻找候选答案区间再经get_doc_pred(...)还原为具体答案文本若某 prompt 没有任何候选答案则同样返回空答案占位否则用sort_res(example_query, preds, doc_tokens, boxes, lang)排序并截取前topn个。最终每个 example 产出一组{prompt: ..., result: [...]}聚合后返回all_predictions_list。输出结果中每个 answer 包含value答案文本、prob置信度、start/end在文档 token 序列中的起止位置无效时为 -1。四、底层工具函数paddlenlp.taskflow.utils 中的关键实现DocPrompter复用了 utils.py路径paddlenlp/taskflow/utils.py中的一批函数理解它们才能完整把握推理链路4.1 ImageReaderOCR 结果 → 模型特征ImageReader类utils.py 第 1701 行起负责把 OCR 输出转换成布局感知的语言模型输入ppocr2example将 PaddleOCR 输出每行含四点坐标与文本转成Bbox(left, top, width, height)线段按版面排序后生成doc_tokens、doc_boxes、ori_boxes原始尺寸坐标、doc_segment_ids并把图像转 Base64 供视觉分支使用box2example处理word_boxes格式输入example2feature将 example 切分为max_seq_len512ImageReader默认另有doc_stride128滑窗、max_key_len16的 features同时维护token_to_orig_map、token_is_max_context等对齐信息data_generator按ocr_type选择转换入口随后按 batch_size 打包并yield供 predictor 消费。图像统一ResizeImage(target_size224)、按 ImageNet 均方差归一化并做PadBatch(pad_to_stride32)。4.2 答案定位与解码viterbi_decode(logits)utils.py 第 2419 行起在OIB标签体系下做维特比解码得到 BIO 序列find_bio_pos(label)从 BIO 标签中抽取连续实体区间find_answer_pos(logits, feature)综合维特比路径、token_to_orig_mapstart/end 必须能映射回原文 token与token_is_max_context必须是最大上下文切片三重约束产出合法候选区间列表。4.3 答案文本还原get_doc_pred(...)utils.py 第 2278 行起对 logits 做 softmax结合 feature 的 token 对齐信息把候选区间映射回原始文档 token 序列生成包含value、prob、start、end的结构化答案。4.4 空间语义排序sort_res(prompt, ans_list, context, boxes, lang)utils.py 第 2497 行起是中文场景下的关键排序逻辑答案互不相同时按prob降序排列存在重复答案时先对 prompt 与上下文做最长公共子序列匹配longestCommonSequence中文按字符、英文按空格分词定位 prompt 在版面中的中心坐标再计算每个候选答案框中心与 prompt 中心的欧氏距离calEuclidean按空间邻近度排序使得与提问位置最近的答案排在前面——这正是文档类问答答案就在提问附近这一先验的建模方式。五、流水线组合docprompt.yaml 完整配置仓库提供了开箱即用的文档问答流水线配置 docprompt.yamlversion: 1.1.0 components: - name: PreProcessor params: use_gpu: True lang: ch type: DocOCRProcessor - name: Reader params: topn: 1 use_gpu: True task_path: model: docprompt device_id: 0 num_threads: lang: ch batch_size: 1 type: DocPrompter pipelines: - name: query_documents nodes: - name: PreProcessor inputs: [Query] - name: Reader inputs: [PreProcessor]该配置展示了两个节点的标准串联方式DocOCRProcessor命名为PreProcessorDocPrompter命名为Reader组成名为query_documents的流水线。YAML 中的组件参数与两个类的构造函数一一对应task_path、num_threads留空即使用源码中的默认行为自动下载权重、自动计算线程数。加载方式与 Pipelines 框架保持一致即通过Pipeline.load_from_yaml(Path(PIPELINE_YAML_PATH), pipeline_nameQUERY_PIPELINE_NAME)读取参考 base.py 中的load_from_yaml与run实现。默认配置路径由 config.py 通过环境变量PIPELINE_YAML_PATH指定可用export PIPELINE_YAML_PATHrest_api/pipeline/docprompt.yaml切换到文档问答场景。六、REST API 集成query_documents 端点在 controller/search.py 中query_documents端点第 162 行起直接对接该流水线router.post(/query_documents, response_modelDocumentResponse, response_model_exclude_noneTrue) def query_documents(request: DocumentRequest): result {} result[meta] request.meta params request.params or {} res PIPELINE.run(metarequest.meta, paramsparams, debugrequest.debug) result[results] res[results] return result服务启动时通过PIPELINE Pipeline.load_from_yaml(...)一次性构建流水线search.py 第 58 行随后每次请求调用PIPELINE.run(meta...)把用户提交的meta含doc与prompt传入DocOCRProcessor经DocPrompter推理后返回results。这意味着文档智能能力可以不经修改直接暴露为 HTTP 服务。七、输入输出约定速查DocOCRProcessor 输入dict 或 dict 列表{doc: /path/to/image.jpg, prompt: 金额是多少} {doc: https://example.com/doc.png, prompt: [发票号码, 开票日期]} {doc: base64 字节流, prompt: 公司名称, word_boxes: [[text, [x1, y1, x2, y2]], ...]}DocPrompter 输出单条 example[ { prompt: 金额是多少, result: [ {value: 12,000.00, prob: 0.987, start: 34, end: 36} ] } ]无答案时会得到{value: , prob: 0.0, start: -1, end: -1}占位保证结构稳定、便于下游统一处理。结语Document Intelligence 模块将 PaddleOCR 的版面识别能力与 Ernie-LayoutX 的视觉-语言联合建模能力封装为两个可复用的 Pipelines 节点。开发者在实战中只需遵循docprompt的输入约定即可在 docprompt.yaml 基础上按需调整topn、batch_size、lang等参数快速搭建面向扫描件、截图与拍照文档的问答服务如需深入定制则可从 document_intelligence.py、document_preprocessor.py 以及 utils.py 中的ImageReader、sort_res等实现入手进行二次开发。赞分享人工智能大模型预训练微调LoRARLHF强化学习分布式训练【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP点击查看免费下载相关推荐Stable Diffusion在Intel硬件上的OpenVINO优化部署方案Stable Diffusion在Intel硬件上的OpenVINO优化部署方案 在AI图像生成领域Stable Diffusion已成为最受欢迎的开源模型之人工智能大模型预训练微调LoRARLHF强化学习分布式训练模型推理服务推理引擎模型量化模型压缩本地部署NLPPaddleNLP Pipelines 标准流水线全解析一键拼装检索、问答、文档智能与多模态生成系统PaddleNLP Pipelines 标准流水线全解析一键拼装检索、问答、文档智能与多模态生成系统 导读 本文以 PaddleNLP 仓库中 standar人工智能大模型预训练微调LoRARLHF强化学习分布式训练模型推理服务推理引擎模型量化模型压缩本地部署NLPPaddleNLP ERNIE-Layout 文档智能 Python 部署实战信息抽取、文档问答与图像分类全流程指南PaddleNLP ERNIE Layout 文档智能 Python 部署实战信息抽取、文档问答与图像分类全流程指南 本篇指南围绕 PaddleNLP 中 E人工智能大模型预训练微调LoRARLHF强化学习分布式训练模型推理服务推理引擎模型量化模型压缩本地部署NLP创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考