这是一个使用GraphRAG (Graph Retrieval-Augmented Generation) 对PopQA数据集进行问答评测的完整系统。
该系统结合了知识图谱和检索增强生成技术,通过以下方式回答问题:
- 构建基于PopQA数据的知识图谱
- 使用语义检索找到相关文档
- 从知识图谱中提取相关三元组
- 结合文档和图谱信息生成答案
├── requirements.txt # 项目依赖
├── data_loader.py # PopQA数据加载器
├── graph_rag.py # GraphRAG核心实现
├── evaluator.py # 评测指标计算
├── main_evaluation.py # 主评测脚本
└── README.md # 项目说明
pip install -r requirements.txt注意:如果在安装过程中遇到问题,建议使用conda环境:
conda create -n graphrag python=3.8
conda activate graphrag
pip install -r requirements.txtpython main_evaluation.py --use-sample --sample-size 50python main_evaluation.py --max-samples 1000python main_evaluation.py --data-file path/to/your/popqa.json --max-samples 500--data-file: 本地PopQA数据文件路径(JSON或JSONL格式)--use-sample: 使用内置样本数据进行测试--sample-size: 样本数据大小(默认100)--max-samples: 最大处理样本数量限制
--model-name: 句子编码器模型名称(默认:sentence-transformers/all-MiniLM-L6-v2)--top-k: 检索相关文档数量(默认5)
--knowledge-graph-path: 预训练知识图谱文件路径--save-knowledge-graph: 保存知识图谱的路径
--output-dir: 结果输出目录(默认:evaluation_results)--save-intermediate: 保存中间结果
--log-level: 日志级别(DEBUG/INFO/WARNING/ERROR)
python main_evaluation.py \
--use-sample \
--sample-size 100 \
--output-dir results_basicpython main_evaluation.py \
--max-samples 2000 \
--model-name sentence-transformers/all-mpnet-base-v2 \
--top-k 10 \
--save-knowledge-graph knowledge_graph.pkl \
--output-dir results_full \
--save-intermediatepython main_evaluation.py \
--knowledge-graph-path knowledge_graph.pkl \
--max-samples 1000 \
--output-dir results_pretrained系统使用多种评测指标来全面评估性能:
- 精确匹配 (Exact Match): 预测答案与标准答案完全匹配
- 包含匹配 (Contains Match): 预测答案包含标准答案或被包含
- 模糊匹配 (Fuzzy Match): 基于编辑距离的相似度匹配(阈值0.8)
- ROUGE-1/2/L: 基于n-gram重叠的文本相似度
- BLEU: 机器翻译质量评估指标
- BERTScore: 基于BERT的语义相似度评估
评测完成后,系统会在输出目录中生成以下文件:
evaluation_results/
├── evaluation_report.txt # 文本格式评测报告
├── detailed_results.json # 详细评测结果
├── predictions.json # 所有预测结果
├── config.json # 评测配置信息
├── overall_performance.png # 整体性能可视化
└── category_performance.png # 分类别性能可视化
- 支持从Hugging Face、本地文件或样本数据加载PopQA
- 数据标准化和预处理
- 知识图谱构建: 从PopQA数据构建实体-关系图
- 语义检索: 使用FAISS进行高效相似度检索
- 图遍历: 提取查询相关的子图信息
- 答案生成: 结合检索和图谱信息生成答案
- 多种评测指标计算
- 分类别性能分析
- 可视化报告生成
- 整合所有组件
- 命令行接口
- 日志和错误处理
- 快速测试:
sentence-transformers/all-MiniLM-L6-v2 - 高精度:
sentence-transformers/all-mpnet-base-v2 - 多语言:
sentence-transformers/paraphrase-multilingual-mpnet-base-v2
- 增加
top-k值可能提高召回率但增加计算成本 - 较大的
sample-size用于初步测试 - 使用
--save-knowledge-graph避免重复构建图谱
- 推荐GPU加速(自动检测CUDA)
- 至少8GB内存用于大规模评测
- SSD存储提高I/O性能
如果您有自定义的问答数据,请确保JSON格式如下:
[
{
"id": 0,
"question": "问题文本",
"answer": "答案文本",
"subject": "主体实体",
"relation": "关系",
"object": "客体实体"
}
]在evaluator.py中的PopQAEvaluator类中添加新方法:
def your_custom_metric(self, predicted: str, ground_truth: str) -> float:
# 实现您的评测逻辑
return scoreA: 使用--max-samples限制样本数量,使用--save-intermediate保存中间结果,考虑分批处理。
A: 使用更小的模型,减少top-k值,使用GPU加速,预先构建知识图谱。
A: 使用更大的预训练模型,增加检索文档数量,优化实体提取算法。
A: 支持,使用多语言模型如paraphrase-multilingual-mpnet-base-v2。
欢迎提交Issue和Pull Request来改进这个系统。
MIT License