使用 lift-pdf 構建模式引導的發票智能管道:應付賬款提取、驗證與賬本生成
本教程演示如何使用 lift-pdf 構建端到端的應付賬款提取管道。通過生成合成發票 PDF 作為受控測試文檔,並以結構化 JSON 模式為目標輸出格式,我們將發票解析視為模式引導的文檔理解任務。涵蓋了 GPU 感知模型加載、4 位量化、PDF 生成與提取、評分以及賬本構建等步驟,提供了一個緊湊而逼真的文檔智能演示。
在本教程中,我們使用 lift-pdf 構建了一個端到端的應付賬款提取管道。我們將合成發票 PDF 作為受控測試文檔,並以結構化 JSON 模式作為目標輸出格式,將發票解析從簡單的 OCR 任務提升為模式引導的文檔理解。我們生成了逼真的發票,定義了供應商身份、賬單方、採購訂單號、行項目、税金、總金額、應付餘額和付款狀態等字段,並要求模型直接從渲染的 PDF 佈局中提取這些值。我們還包含了實際財務工作流中常見的提取陷阱,例如區分賬單地址與發貨地址、區分小計與税後總額、對缺失值返回 null,以及正確標記部分付款的發票(當餘額未結清時標記為未付)。通過 GPU 感知模型加載、可選的 4 位量化、PDF 生成與提取、評分以及賬本構建,我們將本教程轉變為一個緊湊而逼真的文檔智能演示,用於發票挖掘。
首先,我們設置了運行時控制參數,包括處理的發票數量、是否啓用 4 位加載、是否預覽生成的 PDF。我們安裝了核心依賴項,包括 PDF 生成、渲染、表格分析、繪圖和 lift-pdf 推理。為了避免 Pillow 版本衝突,我們將其固定到一個穩定版本。然後,我們準備了 GPU 感知的推理後端,根據可用的 VRAM 決定模型是以全精度還是 4 位 NF4 量化運行。我們修補了 Hugging Face 的模型加載路徑,使 lift 能夠透明地加載量化配置。InferenceManager 被初始化一次並在所有發票中複用,避免了重複的模型加載開銷。
接下來,我們生成了三個合成發票數據字典,每個代表不同的場景:一個美國雲服務提供商(有未付餘額)、一個芬蘭設計公司(已全額付款)和一個美國建築承包商(已付部分押金)。我們使用 ReportLab 將每個發票渲染為一頁 PDF,包括頭部、發票元數據、賬單和發貨地址塊、行項目表格、總計、付款狀態和備註。我們特意保留了使發票提取困難的佈局元素,例如分離的賬單地址和發貨地址、小計與總計字段。然後我們生成了 PDF 語料庫,並可選擇預覽第一頁。
在提取階段,我們定義了一個完整的 JSON 模式,描述了所有目標字段及其約束。模式包括髮票號、日期、供應商、客户名稱、採購訂單號、貨幣、行項目(含描述、數量、單價和行總計)、小計、折扣金額、税金、總金額、已付金額和餘額。我們使用 lift 的模式導引提取能力,將每個 PDF 文件傳遞給 lift.extract(),並獲取結構化的提取結果。對於每個發票,我們將提取結果與地面真值進行比較,計算逐字段的精度和召回率。我們還構建了一個簡單的賬本,彙總所有發票的提取數據,包括金額匹配和狀態標誌。
最後,我們提供了完整的代碼示例,包括安裝指令、模型加載、PDF 生成、提取和評分。整個管道旨在處理真實世界的發票變體,並可作為實際應付賬款自動化系統的基礎。