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.json``label_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.py``get_accuracy``one_epoch(eval)` 的实现。
### 1) 法条层指标:`p1 / p3 / p5`
对每个样本 `i`
- 真实法条集合:`Y_i`
- 模型输出 Top-k 法条集合:`Ŷ_i@k``k` 取 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*`:分组预测层面的同口径指标,用于评估候选分组阶段质量。
## 推荐调用
在项目根目录执行:
```powershell
& '.\.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
```