Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

7 Commits

Folders and files

Repository files navigation

信息检索期末作业 — Pyserini 实验报告

项目结构

IR_Assignment/
├── README.md                          ← 本文件
├── data/
│   ├── msmarco/                       ← MS MARCO 语料(6980查询,880万文档)
│   └── beir/                          ← BEIR 数据集
│       ├── trec-covid/                ← 医学文献(50查询,17万文档)
│       ├── nfcorpus/                  ← 营养学(323查询,3633文档)
│       └── quora/                     ← 问题重复检测(1万查询,52万文档)
├── src/models/
│   ├── bm25/single.py                 ← BM25 单线程搜索
│   ├── bm25/threaded.py               ← BM25 多线程搜索(16线程)
│   ├── bge.py                         ← BGE Bi-encoder 稠密检索
│   ├── colbert.py                     ← ColBERT(Pyserini 版)
│   └── colbert_mac.py                 ← ColBERT 重排序(Mac MPS 优化版)
├── results/
│   ├── msmarco/bm25/eval.txt          ← MS MARCO BM25 评估
│   └── beir/
│       ├── trec-covid/                ← TREC-COVID 三模型结果
│       ├── nfcorpus/                  ← nfcorpus 三模型结果
│       └── quora/                     ← quora 三模型结果
├── run_msmarco.py                     ← MS MARCO 实验入口
└── run_beir.py                        ← BEIR 实验入口

实验结果汇总

全部数据集 × 三模型对比(MAP / NDCG@10)

| 数据集 | 文档数 | 查询数 | BM25 | BGE | ColBERT | SPLADE-v3 | |:-----|:-----:|:-----:|:----:|:---:|:-------:| | MS MARCO | 880万 | 6980 | 0.1926 / 0.2630 | 0.3257 / 0.4264 / 47min | ❌ 无索引 | 0.0568 / 0.0734 / 41s | | TREC-COVID | 17万 | 50 | 0.1871 / 0.6695 | 0.2581 / 0.8461 | 0.0803 / 0.7601 | 0.1633 / 0.1264 | | nfcorpus | 3633 | 323 | 0.1577 / 0.3382 | 0.1998 / 0.3757 | 0.1185 / 0.2705 | 0.4152 / 0.1772 | | quora | 52万 | 10000 | 0.7470 / 0.8173 | 0.8568 / 0.9093 | 0.7113 / 0.7939 | 0.7778 / 0.3186 |

性能表现详情

TREC-COVID(医学文献检索)

模型 MAP NDCG@10 环境 耗时
BM25 0.1871 0.6695 CPU 2.5s
BGE 0.2581 0.8461 GPU (RTX 5070 Ti) 1.3s
ColBERT 初始版 0.0678 0.5477 CPU 232s
ColBERT 优化版 0.0803 0.7601 MPS (Mac M5) 28s
SPLADE-v3 0.1633 0.1264 CPU 1s

nfcorpus(营养学检索)

模型 MAP NDCG@10 环境 耗时
BM25 0.1577 0.3382 CPU 15s
BGE 0.1998 0.3757 CPU 10.5s
ColBERT 0.1185 0.2705 MPS (Mac M5) 22s
SPLADE-v3 0.4152 0.1772 CPU 1s

quora(重复问题检测)

模型 MAP NDCG@10 环境 耗时
BM25 0.7470 0.8173 CPU(16线程) 65s
BGE 0.8568 0.9093 GPU (RTX 5070 Ti) 944s
ColBERT 0.7113 0.7939 MPS (Mac M5) 712s
SPLADE-v3 0.7778 0.3186 CPU 106s

关键发现

1. 稀疏检索(BM25)

  • 基于 TF-IDF 的关键词匹配,稳定可靠
  • 多线程加速有效:MS MARCO 6980查询从 225s 降至 50s(4.5倍)
  • 在关键词特征明显的任务(quora 重复问题检测)表现优异(MAP=0.747)

2. 稠密检索(BGE Bi-encoder)

  • 使用 BGE-base-en-v1.5 模型,将 query/doc 编码为 768 维向量
  • 统一最优:在所有三个数据集上 MAP 和 NDCG@10 均为最高
  • 语义理解能力强,尤其适合需要深层语义匹配的场景

3. 学习型稀疏检索(SPLADE-v3)

  • 结合了 BM25 的稀疏向量形式和 BGE 的深度学习权重
  • MAP 极高:nfcorpus 上 MAP=0.4152,是 BM25 的 2.6 倍
  • 但 NDCG@10 偏低:说明找到了更多相关文档,但前 10 的排序不够精确
  • 速度最快:1 秒跑完 323 查询(索引仅 1.8 MB)
  • 本质上是高召回、低精度排序的模型,与稠密模型互补

4. 后期交互(ColBERT / tct_colbert-v2)

  • 使用 tct_colbert-v2(BERT-base 架构),对 BM25 top-100 结果重排序
  • 优化过程:mean pooling + L2 归一化 + MPS float16 混合精度 + 批量预编码
    • 初始版 NDCG@10=0.5477 → 优化版 0.7601(+39%)
  • 领域迁移问题:MS MARCO 训练的模型在医学/营养学领域效果下降

4. 性能与资源限制

模型 显存需求 推理速度 适用场景
BM25 极低 最快 关键词搜索
BGE 中等(~2GB) 快(GPU) 语义搜索
ColBERT 高(~12GB+) 中等 精确重排序
  • MS MARCO BGE 索引 25GB → Windows 32GB 和 Mac 24GB 均无法完整加载
  • Mac M5 24GB 统一内存通过 mmap 可加载索引,但搜索速度不理想
  • ColBERT 重排序策略 + MPS 加速 在 Mac 上实现了最佳性能平衡

5. 优化技巧总结

  1. L2 归一化:ColBERT 的 NDCG@10 从 0.55 → 0.76
  2. 混合精度 (float16):MPS 编码速度提升 3 倍
  3. 批量预编码:所有文档一次编码,重排序仅需 1 秒
  4. GPU 加速:BGE 用 5070 Ti 编码查询,比 CPU 快 10 倍
  5. 多线程搜索:BM25 16 线程比单线程快 4.5 倍

实验环境

设备 配置 用途
Windows Ryzen 9950X, 32GB RAM, RTX 5070 Ti 12GB BM25、BGE 主力
Mac M5 Apple Silicon M5, 24GB 统一内存 ColBERT MPS 重排序

参考资料

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages