WilliamCHN's picture
Upload standalone Inference of LightXML package
f0bda3b verified

Model Info

当前默认模型与元数据

  • 法条预测权重:model/provision_predictor/groupy_legal_provision.best.pt
  • 法条模型指标:model/provision_predictor/groupy_legal_provision.best.json
  • 法条标签映射:model/provision_predictor/label_map.json
  • 法条分组映射:model/provision_predictor/label_group0.npy
  • 分区模型:model/partition_predictor/best_model.pt
  • 分区词表:model/partition_predictor/vocab.json
  • 分区配置:model/partition_predictor/model_meta.json

说明

  • label_map.jsonlabel_group0.npy 已内置,用于去除对训练数据目录和外部文件的依赖。
  • code/pipeline/run_inference_pipeline.py 直接读取以上文件,可独立运行。

最优指标(来自 groupy_legal_provision.best.json

  • epoch: 9
  • p1: 0.8569037656903765
  • p3: 0.7338912133891213
  • p5: 0.5914644351464435
  • g_p1: 0.8828451882845189
  • g_p3: 0.7523012552301256
  • g_p5: 0.5814225941422595

指标计算方式(与训练代码一致)

以下定义对应 LightXML_B/src/model.pyget_accuracyone_epoch(eval) 的实现。

1) 法条层指标:p1 / p3 / p5

对每个样本 i

  • 真实法条集合:Y_i
  • 模型输出 Top-k 法条集合:Ŷ_i@kk 取 1、3、5)
  • 命中数:hit_i@k = |Y_i ∩ Ŷ_i@k|

在验证集总样本数为 N 时:

  • acc@k = Σ_i hit_i@k
  • p@k = acc@k / (N * k)

因此:

  • p1 = acc1 / N
  • p3 = acc3 / (N * 3)
  • p5 = acc5 / (N * 5)

2) 分组层指标:g_p1 / g_p3 / g_p5

分组头(group head)同样用 Precision@k 统计,只是标签空间从“法条”换成“分组”。

对每个样本 i

  • 真实分组集合:G_i
  • 分组头 Top-k 预测集合:Ĝ_i@k
  • 命中数:g_hit_i@k = |G_i ∩ Ĝ_i@k|

N 个样本上:

  • g_acc@k = Σ_i g_hit_i@k
  • g_p@k = g_acc@k / (N * k)

因此:

  • g_p1 = g_acc1 / N
  • g_p3 = g_acc3 / (N * 3)
  • g_p5 = g_acc5 / (N * 5)

3) 直观解释

  • p1=0.8569:平均看,每条样本 Top1 预测有 85.69% 命中真实法条。
  • p5=0.5915:平均看,每条样本 Top5 中有 59.15% 是真实法条(Top5 平均命中约 2.96 条)。
  • g_p*:分组预测层面的同口径指标,用于评估候选分组阶段质量。

推荐调用

在项目根目录执行:

& '.\.venv\Scripts\python.exe' 'LightXML_B\Inference of LightXML\code\run_inference_pipeline.py' `
  --model-path 'LightXML_B\Inference of LightXML\model\provision_predictor\groupy_legal_provision.best.pt' `
  --label-map-path 'LightXML_B\Inference of LightXML\model\provision_predictor\label_map.json' `
  --group-y-path 'LightXML_B\Inference of LightXML\model\provision_predictor\label_group0.npy' `
  --partition-model-path 'LightXML_B\Inference of LightXML\model\partition_predictor\best_model.pt' `
  --partition-vocab-path 'LightXML_B\Inference of LightXML\model\partition_predictor\vocab.json' `
  --input-file 'LightXML_B\Inference of LightXML\data\input\sample_raw_input_5.jsonl' `
  --output-zoned 'LightXML_B\Inference of LightXML\data\intermediate\sample_zoned_output_5.json' `
  --output-pred 'LightXML_B\Inference of LightXML\results\sample_predictions_5.json' `
  --max-items 5 `
  --device cuda