TransitLM
收藏资源简介:
TransitLM是一个用于无地图公交路线生成的大规模数据集和基准。
TransitLM is a large-scale dataset and benchmark for map-free public transit route generation.
TransitLM 数据集与基准评测平台
该项目为论文 TransitLM: A Large-Scale Dataset and Benchmark for Map-Free Transit Route Generation 提供了配套的评估代码,旨在通过统一的漏斗式流水线系统性地评估公交路线规划模型的输出。
核心资源
- 论文: TransitLM: A Large-Scale Dataset and Benchmark for Map-Free Transit Route Generation
- 数据集(Hugging Face): GD-ML/TransitLM
- 数据集(ModelScope): GD-ML/TransitLM
支持的评估场景
该代码库统一支持以下四种典型场景的评估:
- 单路线规划
- 偏好感知规划
- 多路线多样性
- 通用大语言模型评估(通过远程路线评估 API)
分层评估维度
评估器不产生单一的聚合分数,而是将质量分解为以下几个维度:
- 可达性
- 站点接地
- 结构一致性
- 距离、时间与费用的合理性
评估流程(四轮核心漏斗)
所有场景共享以下四轮核心检查:
| 轮次 | 检查项 | 验证内容 |
|---|---|---|
| 1 | 可达性 | 相邻站点在 next_stop_ids 中是否联通 |
| 2 | 站点接地与距离合理性 | 验证起/终点接地以及换乘距离的合理性 |
| 3 | 线路IoU + 站点IoU + 专家分数 + 换乘模式一致性 | 验证预测结果与参考结果的结构一致性 |
| 4 | 估算准确性 | 验证距离、时间、费用和换乘次数的估算准确性 |
阈值与容差:
- 轮次2阈值:步行 3 km,骑行 5 km,出租车 10 km
- 轮次4容差:距离、时间、费用均为 ±10% 或固定值(距离 0.5 km,时间 5 分钟,费用 1 元),换乘距离 ±0.5 km
专家分数公式 (用于轮次3): S = T_sec / 300 + (N_lines + cycling_segments) + fare
额外逻辑
偏好感知规划
增加第5轮:偏好合规性检查,验证是否满足用户约束(如更少换乘、不乘坐地铁、地铁优先、更短出行时间)。
多路线多样性
增加指标:
- 最佳匹配 (Best-Match):若首条路线不精确匹配,在第二、第三条路线中搜索可达的精确替代方案。
- 路线多样性 (Route Diversity, RD):
mean(1 - IoU(L_i, L_j)),其中换乘模式包含在路线签名中。
通用大语言模型评估
支持通过 --api_url 和 --batch_size 参数调用远程评估 API。
输入数据格式
CSV字段
| 字段 | 描述 |
|---|---|
index_id |
样本标识符 |
sft_prompt |
提示词 JSON 字符串(通常包含查询/起点/终点/城市) |
sft_label |
真实路线 JSON |
generate_results |
模型输出 JSON |
req_type (基准2) |
偏好类型 |
路线 JSON 格式
单路线任务: json { "station_sequence": ["stop_id_1", "stop_id_2"], "line_sequence": ["Line A"], "total_distance": "12.5", "total_time": "35", "total_fare": "4", "start_transfer_mode": "步行", "start_transfer_distance": "0.8", "end_transfer_mode": "步行", "end_transfer_distance": "0.6" }
多样性任务(多路线): json { "first": { 同上 }, "second": { 同上 }, "third": { 同上 } }
通用LLM设置:标签使用 station_sequence,预测侧使用站点名称,远程评估器主要依赖上/下车站点和归一化的换乘结构。
关键输出信号
- 可达性通过率
- 站点IoU等于1的样本数
- 总体准确率
- 偏好合规性 (基准2)
- 最佳匹配命中数与路线多样性 (基准3)
仓库结构
. ├── common.py ├── single_route/evaluate.py ├── personalized/evaluate.py ├── diversity/evaluate.py ├── general_llm/evaluate.py └── data/ ├── station_info.csv ├── benchmark1_single_route_example.csv ├── benchmark2_personalized_example.csv ├── benchmark3_diversity_example.csv └── general_llm_example.csv




