阶段 2:概念抽取¶
此阶段有两个子阶段协同工作,从出版物中识别和抽取技术概念。
阶段 2a:OpenAlex 概念富化¶
模块: src/openalex_enricher.py
目标¶
通过 OpenAlex API 为每篇论文补充结构化的概念和主题数据,提供领域/学科分类。
处理流程¶
- 对每篇有 OpenAlex work ID 的论文,查询 OpenAlex API
- 提取
concepts(概念)、topics(主题)和主要field(领域)分类 - 本地缓存响应以避免重复 API 调用
- 将富化列添加到论文 DataFrame
新增列¶
| 列名 | 类型 | 说明 |
|---|---|---|
openalex_concepts |
string (JSON) | 含分数的概念列表 |
openalex_topics |
string (JSON) | 主题分类 |
openalex_field |
string | 主要领域(如 "Physics"、"Chemistry") |
运行¶
阶段 2b:LLM 概念抽取¶
模块: src/concept_extractor.py
目标¶
使用 GPT-4o-mini 从论文标题、摘要和关键词中抽取结构化技术概念。这是核心智能层,识别论文引入了什么概念与应用了什么概念。
分层策略¶
| 层级 | 选择标准 | 方法 | 论文数 |
|---|---|---|---|
| Tier 1 | 获奖相关 + 引用 ≥ 500 | LLM 深度抽取 | ~1,000 |
| Tier 2 | 引用 ≥ 50 | 关键词 + OpenAlex 概念 | ~30,000 |
| Tier 3 | 其余 | 仅关键词粗粒度标注 | 其余 |
LLM 抽取结构¶
对每篇论文,LLM 返回结构化 JSON:
{
"concepts": [
{
"name": "Ubiquitin-Proteasome Pathway",
"field": "Biology",
"subfield": "Molecular Biology",
"relationship": "INTRODUCES",
"confidence": 0.95,
"cross_discipline_source": null
},
{
"name": "Protein Degradation",
"field": "Biology",
"subfield": "Biochemistry",
"relationship": "APPLIES",
"confidence": 0.85,
"cross_discipline_source": "Chemistry"
}
]
}
关键字段¶
| 字段 | 说明 |
|---|---|
name |
概念名称(标准化) |
field |
主要学科领域 |
subfield |
更细分的子学科 |
relationship |
INTRODUCES(论文提出)或 APPLIES(论文应用) |
confidence |
抽取置信度分数(0-1) |
cross_discipline_source |
如果概念源自其他领域 |
输出文件¶
| 文件 | 位置 | 说明 |
|---|---|---|
llm_extraction_raw.json |
output/concepts/ |
所有处理论文的 LLM 原始响应 |
concepts.parquet |
output/concepts/ |
扁平化的概念表 |
运行¶
uv run python main.py --phase 2 # 2a 和 2b
uv run python main.py --skip-llm # 跳过 LLM(仅 2b)
uv run python -m src.concept_extractor # 独立 LLM 抽取
API 成本
LLM 抽取需要 OpenAI API 密钥并产生 API 费用。分层策略将 Tier 1 限制在 ~1,000 篇论文,以保持成本可控(使用 GPT-4o-mini 约 $2-5)。