139 lines
12 KiB
Markdown
139 lines
12 KiB
Markdown
# Paper Atlas · 论文元数据与投稿历史索引
|
||
|
||
Paper Atlas 是一个**长期维护、按需或按批次运行的研究数据工具项目**。它不是一次性的下载脚本,也不需要为了采集而持续启动 Web 服务。目标是把 arXiv、重要 AI 会议论文集及公开投稿决定整合成可追溯、可查询、可持续更新的数据库,供后续研究趋势、跨会投稿、主题演化等分析使用。
|
||
|
||
## 项目目标与当前进度
|
||
|
||
目标包括:完整历史元数据导入、逐年会议目录、跨平台论文去重、公开拒稿/撤稿信息、平台标签与自定义标签隔离、可恢复更新和覆盖率报告。
|
||
|
||
**目前仍在开发,不能视为完整数据集。** 已实现 SQLite 数据结构、arXiv 元数据 ZIP 流式导入、断点恢复、跨平台标识合并及审计、PMLR 官方元数据采集、带清单计数核验的会议导入和只读查询脚本。服务器上持续运行合成回归检查;完整 ICML 2025 元数据已采集 3,330 条,尚未作为全量交付。arXiv 元数据 ZIP 已完整下载(1,878,831,586 字节),全量导入正在服务器运行。新增 PeerRead 公开 ICLR 2017 明确决定采集,其他会议适配器和全量历史导入尚未完成。其他会议适配器、跨平台疑似重复复核流程、完整覆盖率核验仍待实现。已配置 ces-control:host 对应的远程 CI 工作流,实际 CI 结果以 Gitea Actions 为准。`venues.json` 的 41 个会议是候选覆盖范围,不代表已完成采集,也不是与 COLM 比较的客观排名。
|
||
|
||
## 数据范围与来源
|
||
|
||
- arXiv:官方推荐的 Cornell/Kaggle 元数据快照,包含标识、作者、标题、摘要、类别、版本与外部索引。默认导入整个快照,通过类别筛选 AI 论文,避免永久丢弃交叉领域记录。
|
||
- 会议论文集:优先官方来源,计划接入 OpenReview、PMLR、ACL Anthology、NeurIPS、CVF、ECVA、AAAI、IJCAI;DBLP 用于补充会议目录、标识与出版信息。GitHub 聚合名单只作发现线索,不能作为未经核验的决定证据。
|
||
- 投稿历史:只收录公开可访问并有证据的记录;没有录用信息不等于拒稿,不能据此推断“从未中会”。
|
||
- 当前不下载 PDF、LaTeX、图片或补充材料,不提取论文全文,不推断匿名作者身份。
|
||
|
||
官方入口:
|
||
|
||
- [arXiv bulk metadata](https://info.arxiv.org/help/bulk_data/index.html)
|
||
- [arXiv metadata snapshot](https://www.kaggle.com/datasets/Cornell-University/arxiv)
|
||
- [OpenReview 数据接口说明](https://docs.openreview.net/how-to-guides/data-retrieval-and-modification/how-to-get-all-notes-for-submissions-reviews-rebuttals-etc)
|
||
- [PMLR](https://proceedings.mlr.press/)
|
||
- [ACL Anthology 权威 XML 与 API](https://aclanthology.org/info/development/)
|
||
- [NeurIPS](https://proceedings.neurips.cc/)
|
||
- [COLM](https://proceedings.colm.cc/)
|
||
- [CVF](https://openaccess.thecvf.com/)
|
||
- [ECVA](https://www.ecva.net/papers.php)
|
||
- [IJCAI](https://www.ijcai.org/all_proceedings/)
|
||
- [AAAI](https://ojs.aaai.org/index.php/AAAI/issue/archive)
|
||
- [DBLP](https://dblp.org/db/conf/)
|
||
|
||
## 候选会议覆盖目录
|
||
|
||
| 领域 | 会议系列 | 主要发现入口 |
|
||
| --- | --- | --- |
|
||
| 机器学习、理论 | NeurIPS、ICML、ICLR、COLM、COLT、AISTATS、UAI、CLeaR | OpenReview、PMLR、NeurIPS、COLM 官方论文集 |
|
||
| 自然语言 | ACL、EMNLP、NAACL、EACL、COLING、CoNLL | ACL Anthology |
|
||
| 视觉 | CVPR、ICCV、ECCV | CVF、ECVA |
|
||
| 综合 AI | AAAI、IJCAI、ECAI | 官方论文集、DBLP |
|
||
| 检索与数据 | KDD、SIGIR、WWW、WSDM、RecSys、CIKM、ICDM、SDM、ECML-PKDD | 官方出版方、DBLP,具体年份入口待逐项登记 |
|
||
| 机器人 | ICRA、IROS、RSS、CoRL | 官方论文集、PMLR、DBLP |
|
||
| 规划、知识与智能体 | ICAPS、KR、AAMAS | 官方论文集、DBLP |
|
||
| 语音与音频 | ICASSP、INTERSPEECH、ISMIR | 官方论文集、ISCA、DBLP |
|
||
| 相关专门领域 | MICCAI、FAccT | 官方出版方、DBLP |
|
||
|
||
这些是领域覆盖候选,不构成统一排名,也不能据此声称已全部入库。逐年目录以真实举办届次和正式出版清单为准:双年会议不补造不存在的年份;主会、Findings、workshop 分开。`edition_sources` 保存实际采集状态,不能用候选名单代替覆盖率报告。
|
||
|
||
## 数据模型
|
||
|
||
| 表 | 用途 |
|
||
| --- | --- |
|
||
| `papers` / `papers_fts` | 稳定论文实体、代表性标题摘要、FTS5 全文检索 |
|
||
| `identifiers` | arXiv ID、DOI 等唯一外部标识 |
|
||
| `source_records` / `sources` | 平台记录、原平台标题摘要与索引元数据、来源 URL 和抓取时间 |
|
||
| `venues` / `editions` | 会议或期刊系列、年份与 track,区分主会、Findings 和 workshop |
|
||
| `edition_sources` | 每届每个来源的覆盖状态、预计/已导入数量、错误与断点 |
|
||
| `submissions` / `decisions` | 多次投稿及带证据的决定历史,支持改投、撤稿和决定变更 |
|
||
| `tags` / `paper_tags` | 平台标签与人工标签,使用命名空间隔离 |
|
||
| `match_candidates` / `paper_merges` | 潜在重复复核状态、确定合并审计 |
|
||
| `ingest_runs` | 导入批次、状态、错误和恢复位置 |
|
||
|
||
决定状态为 `accepted`、`rejected`、`desk_rejected`、`withdrawn`、`under_review`、`unknown`。一篇论文可以对应多次投稿和多个决定,不能用单一“最终会议”字段覆盖历史。查询中按观察时间选择最近状态;后续分析需要同时检查来源覆盖率。
|
||
|
||
当前确定性去重使用 arXiv ID、单个 DOI 和 OpenReview forum ID;跨平台同标题还需至少两位作者吻合,或作者吻合且摘要相同,才自动合并。保留各平台源记录,避免合并后丢失出处。规范化标题只建检索索引,尚未实现模糊匹配流程;**现阶段不保证跨平台去重已经完成**。不同平台标签不自动等同,自定义标签应使用 `custom:*` 命名空间。
|
||
|
||
## 运行与查询
|
||
|
||
基础导入和查询依赖 Python 3 标准库和带 FTS5 的 SQLite;PMLR 采集另需 `requirements.txt` 中锁定的 PyYAML 6.0.3。无项目构建步骤。服务器已检查为 Python 3.14.4。所有运行数据放在仓库外,不提交数据库、下载包或访问凭据。
|
||
|
||
服务器暂存目录:`/data/paper-index/`,快照目录:`/data/paper-index/raw/`,运行代码目录:`/data/paper-index/code/`。这些路径不是对外访问的 API。本地工作区只用于编辑代码、文档和 Git;采集、全量导入和运行检查均在用户确认的服务器执行。
|
||
|
||
下载完成并验证 ZIP 后,在服务器运行:
|
||
|
||
```sh
|
||
python3 -B import_arxiv.py \
|
||
--db /data/paper-index/papers.sqlite \
|
||
--archive /data/paper-index/raw/arxiv-metadata.zip
|
||
```
|
||
|
||
导入直接读取压缩包,不落盘展开整个 JSON。每 500 条提交一次事务并保存断点。若同一快照的导入异常中断,用相同命令恢复;恢复阶段需要重新顺序读取并跳过已提交行。不得同时启动多个写入进程。待恢复批次的文件路径、大小和修改时间必须一致;下载快照校验信息应保存在 `raw/arxiv-manifest.json`。
|
||
|
||
全量导入是有实质磁盘和 I/O 成本的操作。先检查 `df -h`,保持足够空间;数据库、FTS 索引和 WAL 都会增长,压缩包大小不是最终数据库占用。索引和数据库生成属于数据处理,不会构建应用镜像。
|
||
|
||
```sh
|
||
# 导入状态、记录量与覆盖状态
|
||
python3 -B query.py --db /data/paper-index/papers.sqlite --stats
|
||
|
||
# 查询标题或摘要,支持 SQLite FTS5 查询语法
|
||
python3 -B query.py --db /data/paper-index/papers.sqlite --query '"language model"' --limit 20
|
||
|
||
# 按 arXiv 平台类别筛选
|
||
python3 -B query.py --db /data/paper-index/papers.sqlite --tag arxiv:category=cs.AI
|
||
|
||
# 会议与决定查询(会议数据导入后才有结果)
|
||
python3 -B query.py --db /data/paper-index/papers.sqlite --venue COLM --year 2025 --status rejected
|
||
```
|
||
|
||
查询连接使用 SQLite 只读模式,结果输出 JSON。当前没有公共 Web 页面或网络查询服务。
|
||
|
||
## 官方会议元数据采集
|
||
|
||
```sh
|
||
# 单卷示例:ICML 2025,读取官方 gh-pages 元数据,不下载论文正文
|
||
python3 -B collect_pmlr.py --cache /data/paper-index/raw/http-cache \
|
||
--out /data/paper-index/collected --volume 267
|
||
|
||
# 待主库完成 arXiv 导入、且没有其他写入进程后,合并会议记录
|
||
python3 -B import_records.py --db /data/paper-index/papers.sqlite \
|
||
/data/paper-index/collected/pmlr-v267.jsonl
|
||
```
|
||
|
||
采集输出 JSONL 和对应 manifest,只有显式官方录用记录才产生 accepted 决定。清单数目不一致时整个文件导入回滚,记录失败批次,不能标为覆盖完成。多个历史卷的全量覆盖仍需单独核验。旧卷可能把 PDF 放入归档;采集器对前 50 卷使用 Git partial clone 和 sparse checkout,仅取 `_posts` 和卷配置,不执行出版方项目代码。较新归档若超出 64 MiB 限额,也转为此方式。已对原本超限的 AISTATS 2009(第 5 卷)验证采集 84 条且工作区无 PDF。缓存默认有效 24 小时;同一次批次可复用缓存,后续更新会重新读取动态入口。
|
||
|
||
PeerRead 采集仅选择作者公开发布的 ICLR 2017 投稿元数据,固定到源仓库 commit。只依据明确的布尔 `accepted` 标签形成 accepted/rejected;空标签为 unknown,不使用其他数据分区中的 probably-rejected 推断。不会保存 reviews 或 parsed_pdfs 正文。
|
||
|
||
```sh
|
||
python3 -B collect_peerread.py --cache /data/paper-index/raw/http-cache \
|
||
--out /data/paper-index/collected
|
||
```
|
||
|
||
数据任务以一次性 systemd 服务运行:`paper-atlas-arxiv-import`、`paper-atlas-pmlr-collect`、`paper-atlas-peerread-collect`。它们不是定时任务。主库只允许一个写入进程;会议采集先写独立 JSONL,待 arXiv 主批次结束后再合并。运行日志位于 `/data/paper-index/*-import.log`、`/data/paper-index/*-collect.log`。任何服务启动成功都不等于批次已完成,需检查批次状态、清单与完整性结果。
|
||
|
||
## 长期维护与更新
|
||
|
||
1. 每次采集先核对来源、许可、可访问性、空闲空间和现有运行批次。保持低并发,遵守来源限流、重试与人机验证要求。
|
||
2. 下载先写 `.part`,确认完整 HTTP 响应和 ZIP 目录,再记录 SHA-256 与时间后切换为正式文件。正式导入会读至 EOF,从而验证成员 CRC。
|
||
3. 每次导入保留来源证据和批次,按会议/年份/track 报告覆盖状态。缺失摘要留空,不编造文本;缺失决定保留未知。
|
||
4. 核验行数、唯一标识、外键、全文查询和 SQLite 完整性后,再将批次视为交付。样本通过不能证明全量正确。
|
||
5. 数据库备份使用 SQLite backup API 或一致性快照,不能在写入过程中只复制 `.sqlite` 主文件而遗漏 WAL。按明确保留策略轮换备份,避免无上限积累。
|
||
6. 不为每次数据更新生成新 Docker 镜像;不常驻下载器;不自动创建定时任务。本项目的更新任务应按需或经用户授权调度。
|
||
7. 代码通过工作分支和 PR 交付;构建或 CI 只能使用用户确认的远程 runner,不在本机触发构建。
|
||
|
||
## 当前访问限制
|
||
|
||
2026-11-06 从目标服务器测试:Kaggle 元数据 GET 可下载;OpenReview 会议 group 接口可读,但 notes 接口返回 `ChallengeRequiredError`。拒稿记录导入尚受此限制,不能用录用名单替代全部投稿,也不能声称已覆盖全部拒稿。需通过平台支持的访问方式或有合法来源的公开数据导出继续补全。
|
||
|
||
全量导入、会议适配器、正式 runner 配置与 PR 交付状态应随实现及时更新本 README。
|