laya-ad / code /README.md
x6nux's picture
laya-ad v2.2: six precision dirs
e2492ec verified
|
Raw History Blame Contribute Delete
2.6 kB
# laya-ad v2.2 代码
单模型四头结构(二分类 + 7 类 kind + scope + severity)的加载、推理与训练代码。模型权重在仓库根目录的精度子目录:`fp32/`、`fp16/`、`bf16/`、`fp8/`、`int8/`、`int4/`。
## 文件
| 文件 | 说明 |
|---|---|
| `scripts/dual_head_model.py` | `DualHeadModernBert` 四头结构 + `load_dual_head_any()`(自动识别 fp32/fp16/bf16/fp8/int8/int4) |
| `scripts/predict_dual_head.py` | CLI 推理:输出 is_ad / kind / scope / severity |
| `scripts/train_multi_head.py` | 四头训练(含 `--freeze_encoder --freeze_binary --freeze_kind --ad_only` 头级微调) |
| `scripts/build_optimized_dataset.py` | 合并/去重/广告过采样/稀有 kind/severity 补齐(`--gmeow` 接入 gmeow 封禁广告语料,`--gmeow_val_texts` 留出防泄漏 val) |
| `scripts/build_teacher_dataset.py` | teacher 清洗数据切分 |
| `scripts/build_cleaned_dataset.py` | teacher 原始输出转训练格式 |
| `scripts/clean_with_teacher.py` | jev teacher 清洗脚本(参考) |
| `scripts/eval_4head_variants.py` | 六精度变体评测 |
| `scripts/eval_v22_vs_v21.py` | 跨版本对比评测(teacher_holdout / earlier_val / gmeow_val128) |
旧的 v1.1/v2 脚本仍保留在 `scripts/` 中,供历史参考。
## 加载
```python
import sys, torch
from transformers import AutoTokenizer
sys.path.insert(0, "code/scripts")
from dual_head_model import load_dual_head_any
tok = AutoTokenizer.from_pretrained("bf16")
model = load_dual_head_any("bf16", device="cpu", dtype=torch.bfloat16)
```
## 推理
```bash
cd code/scripts
python predict_dual_head.py --model ../../bf16 --text "日入500+,宝妈学生均可,私聊领教程"
```
输出字段:
```json
{"is_ad": true, "p_ad": 0.9999, "kind": "scam", "kind_probs": {...},
"scope": "message", "scope_probs": {...},
"severity_score": 2.96, "severity_probs": {...}}
```
- `scope`:account / message
- `severity_score`:0–3 的期望值(服务端 Jev API 同口径)
## 数据格式(训练脚本参考)
四头训练数据:
```json
{"text": "...", "label_bin": 0, "label_kind": 5, "label_scope": 0, "label_sev": 3}
```
- `label_bin`:0=ad,1=normal
- `label_kind`:0..6(crypto/gambling/porn/porn_bait/promo/scam/spam_flood)或 -100
- `label_scope`:0=account,1=message,-100 忽略
- `label_sev`:0..3,-100 忽略(normal 的 scope/severity 由二分类 gate 处理)
`build_optimized_dataset.py` / `clean_with_teacher.py` 的输入路径是内部数据布局,公开仓库只保留脚本作为方法参考,不附带数据。