liqi / code /rerank_ins /README.md
WaitXian's picture
Upload liqi files
0ab2566 verified
|
Raw History Blame Contribute Delete
5.1 kB
# Instruct-Reranker
基于大语言模型(LLM)的多模态 Listwise 重排序训练与评估框架,用于电商搜索场景下的商品候选集重排。
## 项目结构
```
rerank_ins/
├── train/ # 训练脚本
│ ├── train_reranker_qwen3vl.py # Qwen3-VL-8B 训练
│ └── train_reranker_qwen35.py # Qwen3.5-9B 训练
├── eval/ # 评估脚本
│ ├── eval_reranker_qwen3vl.py # Qwen3-VL 评估 (vLLM)
│ └── eval_reranker_qwen35.py # Qwen3.5 评估 (Transformers)
├── models/ # 模型定义
│ ├── ranking_loss.py # RankingLoss + ListwiseLoss
│ ├── qwen3_vl_rank.py # Qwen3-VL DPO 变体
│ └── qwen3_5_rank.py # Qwen3.5 DPO 变体
├── collators/ # 数据 Collator
│ ├── base.py # 基类
│ ├── qwen_vl_rerank.py # 训练/评估 Collator
│ └── vision_process.py # 图像/视频预处理
├── loaders/ # 模型加载器
│ ├── base.py
│ ├── qwen3_vl.py
│ └── qwen3_5.py
├── dataset/ # 数据集
│ ├── data_utils.py # 消息构建工具
│ └── dataset_listwise.py # Listwise 数据集类
├── format_prompt/ # Prompt 模板
│ ├── listwise_reranker_v1.jinja # 单图模式 (query crop + doc crop)
│ └── listwise_reranker_v2.jinja # 双图模式 (query full+crop + doc full+crop)
├── ds_configs/ # DeepSpeed 配置
│ ├── zero2.json
│ └── zero3.json
├── scripts/ # 启动脚本
│ ├── train_qwen3vl.sh
│ ├── train_qwen35.sh
│ ├── eval_qwen3vl.sh
│ └── eval_qwen35.sh
├── arguments.py # 参数定义
├── supported_models.py # 模型注册
├── utils.py # 工具函数
├── setup.py
├── requirements.txt
└── README.md
```
## 数据格式
训练/评估数据为 JSONL 格式,每行一个样本:
```json
{
"query_image": "/path/to/query_image.jpg",
"query_crop_image": "/path/to/query_crop.jpg",
"instruction": "找相似款红色连衣裙",
"intent": "属性筛选",
"docs": [
{
"doc_image": "/path/to/doc_full.jpg",
"crop_image": "/path/to/doc_crop.jpg",
"doc_title": "商品标题",
"label": 0
}
]
}
```
**Label 定义**:
- `0`:绝对正例 — 品类正确,完全满足用户意图
- `1`:相对正例 — 品类正确,基本满足或边界模糊
- `2`:违约负例 — 品类正确但违背关键条件
- `3`:弱负例 — 品类不对,与需求无关
## 训练
记得在train中修改路径
### Qwen3-VL-8B(单图模式)
```bash
bash scripts/train/train_qwen3vl.sh
```
提交训练
```
bash scripts/submit/submit_train_qwen3vl.sh
```
### Qwen3.5-9B(双图模式,最佳效果)
```bash
bash scripts/train/train_qwen35.sh
```
提交训练
```
bash scripts/submit/submit_train_qwen35.sh
```
**关键超参数**:
| 参数 | Qwen3-VL | Qwen3.5 |
|------|----------|---------|
| 学习率 | 5e-6 | 1e-5 |
| Batch Size/GPU | 4 | 2 |
| Gradient Accum | 1 | 2 |
| Full+Crop 双图 | 否 | 是 |
| Max Crop Tokens | 80 | 160 |
| Flash Attention | 是 | 否 |
## 评估
### Qwen3-VL(基于 vLLM 加速推理)
```bash
python eval/eval_reranker_qwen3vl.py \
--model-path /path/to/checkpoint \
--eval-data /path/to/eval.jsonl \
--tp 2 --full-crop-mode
```
### Qwen3.5(基于 Transformers 原生推理)
```bash
python eval/eval_reranker_qwen35.py \
--model-path /path/to/checkpoint \
--eval-data /path/to/eval.jsonl \
--full-crop-mode
```
## 评估指标
| 指标 | 定义 |
|------|------|
| Strict Hit Rate@N | 只有 label=0 算命中 |
| Soft Hit Rate@N | label=0 和 label=1 都算命中 |
**排序方式**:从模型输出的 logits 中提取 token "0"/"1"/"2"/"3" 的概率,以 P(token="0") 降序排列候选商品。
## 模型原理
采用 **Listwise** 训练方式:
- **输入**:1 张查询图 + 用户 instruction + 10 张候选商品图像及标题
- **输出**:10 个连续数字(0-3),分别代表每个候选商品的相关性 label
- **排序依据**:取 token "0" 的概率作为排序分数(概率越高越相关)
## 支持的模型
| Model ID | 模型 | 推荐配置 |
|----------|------|----------|
| `qwen3-vl-8b` | Qwen3-VL-8B-Instruct | 单图 + v1 prompt |
| `qwen3_5-9b` | Qwen3.5-VL-9B | 双图 + v2 prompt(最佳) |
## 注意事项
1. 训练脚本中的 `MODEL_LOCAL_PATH`、`TRAIN_DATA_PATH`、`EVAL_DATA_PATH` 需要修改为实际路径
2. 默认冻结 Vision Encoder 和 Vision Projector,只训练 LLM 部分
3. 支持 LoRA 和全量微调两种模式(脚本默认全量微调)
4. 评估脚本会自动识别 checkpoint 是 LoRA 还是全量格式