# ScienceMetaBench

[English](README.md) | [中文](README_ZH.md)

🤗 [HuggingFace Dataset](https://huggingface.co/datasets/opendatalab/ScienceMetaBench) | 🔍 [Dingo](https://github.com/MigoXLab/dingo)

ScienceMetaBench 是一个用于评估从 PDF 文件中提取科学文献元数据准确性的基准测试数据集。该数据集涵盖学术论文、教材和电子书三大类别,可用于评估视觉模型（VLM）或其他信息提取系统的性能。

## 📊 数据集概览

### 数据类型

本基准测试包含三种类型的科学文献：

1. **学术论文 (Paper)**
   - 主要来自学术期刊和会议
   - 包含 DOI、关键词等学术元数据

2. **教材 (Textbook)**
   - 正式出版的教科书
   - 包含 ISBN、出版社等出版信息

3. **电子书 (Ebook)**
   - 数字化的历史文献和图书
   - 覆盖多语言、多学科领域

### 数据批次

本基准测试经过两次数据扩充，每次扩充都增加了新的样本数据：

```
data/
├── 20250806/          # 第一批数据（2024年8月6日）
│   ├── ebook_0806.jsonl
│   ├── paper_0806.jsonl
│   └── textbook_0806.jsonl
└── 20251022/          # 第二批数据（2024年10月22日）
    ├── ebook_1022.jsonl
    ├── paper_1022.jsonl
    └── textbook_1022.jsonl
```

**注**：两批数据相互补充，共同构成完整的基准测试数据集，可根据需要选择使用单批或合并使用。

### PDF 文件

`pdf/` 目录包含与基准数据对应的原始 PDF 文件，目录结构与 `data/` 目录保持一致。

**文件命名规则**：所有 PDF 文件以其 SHA256 哈希值命名，格式为 `{sha256}.pdf`。这种命名方式确保了文件的唯一性和可追溯性，便于通过 JSONL 数据中的 `sha256` 字段定位对应的源文件。

## 📝 数据格式

所有数据文件采用 JSONL 格式（每行一个 JSON 对象）。

### 学术论文字段

```json
{
  "sha256": "文件的 SHA256 哈希值",
  "doi": "数字对象标识符",
  "title": "论文标题",
  "author": "作者姓名",
  "keyword": "关键词（逗号分隔）",
  "abstract": "摘要内容",
  "pub_time": "发表年份"
}
```

### 教材/电子书字段

```json
{
  "sha256": "文件的 SHA256 哈希值",
  "isbn": "国际标准书号",
  "title": "书名",
  "author": "作者姓名",
  "abstract": "简介/摘要",
  "category": "分类号（如中图分类法）",
  "pub_time": "出版年份",
  "publisher": "出版社"
}
```

## 📖 数据示例

### 学术论文示例

下图展示了从学术论文 PDF 中提取的元数据字段示例：

![学术论文示例](images/paper_example.png)

如图所示，需要从论文首页提取以下关键信息：
- **DOI**：数字对象标识符（如 `10.1186/s41038-017-0090-z`）
- **Title**：论文标题
- **Author**：作者姓名
- **Keyword**：关键词列表
- **Abstract**：论文摘要
- **pub_time**：发表时间（通常为年份）

### 教材/电子书示例

下图展示了从中文电子书 PDF 版权页中提取的元数据字段示例：

![教材示例](images/ebook_example.png)

如图所示，需要从图书版权页提取以下关键信息：
- **ISBN**：国际标准书号（如 `978-7-5385-8594-0`）
- **Title**：书名
- **Author**：作者/编者姓名
- **Publisher**：出版社名称
- **pub_time**：出版时间（年份）
- **Category**：图书分类号
- **Abstract**：内容简介（如有）

这些示例展示了 benchmark 测试的核心任务：从各种格式和语言的 PDF 文档中准确提取结构化的元数据信息。

## 📊 评估指标

### 核心评估指标

本基准测试采用基于字符串相似度的评估方法，提供两个核心指标：

### 相似度计算规则

本基准测试使用基于 `SequenceMatcher` 的字符串相似度算法，具体规则如下：

1. **空值处理**：一个为空另一个不为空 → 相似度为 0
2. **完全匹配**：两者完全相同（包括都为空）→ 相似度为 1
3. **忽略大小写**：比较前统一转换为小写
4. **序列匹配**：使用最长公共子序列算法计算相似度（范围：0-1）

**相似度分数解读**：
- `1.0`：完全匹配
- `0.8-0.99`：高度相似（可能存在小的格式差异）
- `0.5-0.79`：部分匹配（提取了主要信息但不完整）
- `0.0-0.49`：低相似度（提取结果与标准答案差异较大）

#### 1. 各字段准确率（Field-level Accuracy）

**定义**：每个元数据字段的平均相似度分数。

**计算方式**：
```
各字段准确率 = Σ(该字段在所有样本上的相似度) / 样本总数
```

**示例**：假设在 100 个样本上评估 `title` 字段，每个样本的 title 相似度累加后除以 100，得到该字段的准确率。

**用途**：
- 识别模型在哪些字段上表现较好或较差
- 针对性地优化特定字段的提取能力
- 例如：如果 `doi` 准确率为 0.95，`abstract` 准确率为 0.75，说明模型在提取摘要时需要改进

#### 2. 总体准确率（Overall Accuracy）

**定义**：所有评估字段准确率的平均值，反映模型的整体性能。

**计算方式**：
```
总体准确率 = Σ(各字段准确率) / 字段总数
```

**示例**：评估 7 个字段（isbn, title, author, abstract, category, pub_time, publisher），将这 7 个字段的准确率相加后除以 7。

**用途**：
- 提供模型整体性能的单一量化指标
- 方便不同模型或方法之间的横向比较
- 作为模型优化的总体目标

### 使用评估脚本

`compare.py` 提供了便捷的评估接口：

```python
from compare import main, write_similarity_data_to_excel

# 定义文件路径和要比较的字段
file_llm = 'data/llm-label_textbook.jsonl'      # LLM 提取结果
file_bench = 'data/benchmark_textbook.jsonl'     # 基准数据

# 对于教材/电子书
key_list = ['isbn', 'title', 'author', 'abstract', 'category', 'pub_time', 'publisher']

# 对于学术论文
# key_list = ['doi', 'title', 'author', 'keyword', 'abstract', 'pub_time']

# 运行评估，获取指标
accuracy, key_accuracy, detail_data = main(file_llm, file_bench, key_list)

# 输出结果到 Excel（可选）
write_similarity_data_to_excel(key_list, detail_data, "similarity_analysis.xlsx")

# 查看评估指标
print("各字段准确率：", key_accuracy)
print("总体准确率：", accuracy)
```

### 输出文件

脚本会生成一个 Excel 文件，包含详细的逐样本分析：

- `sha256`：文件标识
- 对于每个字段（如 `title`）：
  - `llm_title`：LLM 提取的结果
  - `benchmark_title`：基准数据
  - `similarity_title`：相似度分数（0-1）

## 📈 统计信息

### 数据规模

**第一批数据（20250806）**：
- **电子书**：70 条记录
- **学术论文**：70 条记录
- **教材**：71 条记录
- **小计**：211 条记录

**第二批数据（20251022）**：
- **电子书**：354 条记录
- **学术论文**：399 条记录
- **教材**：46 条记录
- **小计**：799 条记录

**总计**：1010 条基准测试记录

数据涵盖多语言（英语、中文、德语、希腊语等）和多学科领域，两批数据共同提供了丰富多样的测试样本。

## 🎯 应用场景

1. **LLM 性能评估**：评估大语言模型从 PDF 提取元数据的能力
2. **信息提取系统测试**：测试 OCR、文档解析等系统的准确性
3. **模型微调**：作为训练或微调数据，提升模型的信息提取能力
4. **跨语言能力评估**：评估模型处理多语言文献的能力

## 🔬 数据特点

- ✅ **真实数据**：从实际 PDF 文件中提取的真实元数据
- ✅ **多样性**：覆盖不同年代、语言、学科的文献
- ✅ **挑战性**：包含古籍、非英语文献、复杂排版等难例
- ✅ **可追溯**：每条记录包含 SHA256 哈希值和原始路径

## 📋 依赖项

```python
pandas>=1.3.0
openpyxl>=3.0.0
```

安装依赖：

```bash
pip install pandas openpyxl
```

## 🤝 贡献指南

如果您希望：
- 报告数据错误
- 添加新的评估维度
- 扩展数据集

请提交 Issue 或 Pull Request。

## 📧 联系方式

如有问题或建议，请通过 Issue 与我们联系。

---

**最后更新**：2025年12月26日