金融文档风险验证系统

该项目构建了一个成本敏感的决策系统,用于自动化收据提取流程,利用模型不确定性和一致性信号来决定何时接受输出或触发验证。

  • by codylejang
  • Jupyter Notebook
  • 本地部署
  • 更新于
在 GitHub 查看 codylejang/Gated-Risk-MCP

使用说明

CORDProj_38616

使用CORD和SROIE数据集对财务文件处理进行风险意识验证。

项目概述

该项目为自动收据提取管道构建了一个对成本敏感的决策系统。目标是使用模型不确定性和一致性信号来决定何时接受输出而不是触发验证。

核心思想: 图像→ 提取→ 风险评分→ (接受vs验证)

第一阶段基线

该仓库现在为SROIE提供了一个简单的布局感知提取管道 src/sroie_vlm.py.

有两种型号可供选择:

  • logistic:一个轻量级的可解释基线
  • mlp:适用于神经网络课程的小型PyTorch神经网络评分器

两个版本:

  • 直接从OCR行和短线跨度构建候选字段值
  • 使用文本、布局和锚点功能对其进行评分
  • 输出字段级置信度、分数边距和收据级汇总表

运行它:

python src/train_sroie_vlm.py --model-type logistic
python src/train_sroie_vlm.py --model-type mlp

默认情况下,输出被写入:

  • Outputs/sroie_extraction/logistic_baseline/
  • Outputs/sroie_extraction/mlp_neural/

这些表可以在后续的风险模型和验证阶段直接重用。

第二阶段风险+验证

从提取输出中训练接收级风险门,包括:

python src/train_sroie_risk.py

默认情况下,这会消耗来自的MLP提取器输出 Outputs/sroie_extraction/mlp_neural/ 并写道:

  • Outputs/sroie_risk/mlp_extractor_logistic_gate/risk_summary.json
  • Outputs/sroie_risk/mlp_extractor_logistic_gate/validation_receipt_risk_predictions.csv
  • Outputs/sroie_risk/mlp_extractor_logistic_gate/public_test_gate_decisions.csv

学习门在接收水平置信度和裕度上使用逻辑回归 特征。它与基于低置信度的简单启发式门进行了比较 以及低边际字段。

数据集

  • CORD:~11k张带有OCR文本、布局和结构化标签的收据
  • SROIE:约1k张标有关键字段(总计、日期、公司、地址)的收据

设置

克隆存储库:

git clone https://github.com/quentinleny/CORDProj_38616
cd CORDProj_38616

运行一次性安装脚本:

python setup_project.py

这将:

  • 从安装Python依赖项 requirements.txt
  • 创建预期 Data/CORD 和 Data/SROIE 文件夹结构

如果您还想在设置过程中自动下载CORD:

python setup_project.py --download-cord

数据集下载说明

CORD v2

数据集来自: https://huggingface.co/datasets/naver-clova-ix/cord-v2

python setup_project.py --download-cord

注意:您可能会看到关于未经身份验证的拥抱脸请求的警告。这是意料之中的,除非下载速度/速率限制成为问题,否则可以忽略。

SROIE

下载地址: https://rrc.cvc.uab.es/?ch=13&com=downloads

步骤:

  1. 在ICDAR稳健阅读竞赛网站上创建一个帐户
  2. 验证您的邮箱
  3. 登录并导航到下载页面
  4. 访问提供的Google Drive链接
  5. 下载数据集文件(train_img.zip、train_gt.zip、test_img.zip)
  6. 解压缩下载
  7. 将提取的内容移动到由创建的文件夹中 python setup_project.py

最终结构

CORDPROJ_38616/
├── Code/
│
├── Data/
│   ├── CORD/
│   │   ├── train/
│   │   ├── validation/
│   │   └── test/
│   │
│   ├── SROIE/
│   │   ├── 0325updated.task1train(626p)/
│   │   ├── 0325updated.task2train(626p)/
│   │   ├── task1&2_test(361p)/
│   │   ├── task3-test(347p)/
│   │   └── text.task1&2-test(361p)/
│   │
│   └── Misc/
│