6.2 KiB
Executable File
6.2 KiB
Executable File
PlantConnectome 工作原理深度分析
核心发现
PC的数据来源
不是从chunks提取,而是从完整论文原文处理!
输入: 71,000篇论文 (abstracts + full-texts)
↓
GPT-4o处理
├── 实体识别: 基因、代谢物、组织等
├── 关系抽取: 调控、表达、运输等
└── 证据提取: 原文片段、实验方法
↓
输出
├── all_dic.json: 320万关系三元组
├── scientific_chunks.json: 实体索引的文本片段
└── gene_alias.json: 基因别名映射
PC vs 我们的方案对比
数据来源对比
| 维度 | PlantConnectome | gene-family-mas-v2 |
|---|---|---|
| 输入 | 71,000篇完整论文 | 1篇PDF + 附表 |
| 文本来源 | PubMed abstracts + full-texts | PDF提取的章节 |
| 预处理 | GPT-4o批量处理 | V12.1规则提取 |
| 输出 | 320万关系 | 107关系 |
关键差异
1. 文本长度
PC的输入:
- Abstract: 200-300词
- Full-text: 3,000-10,000词
- 每篇论文可抽取数十个关系
我们的输入:
- Gene-centric chunk: 100-500字符
- 只有基因摘要,缺少详细描述
- 每个基因只能抽取0-3个关系
2. 信息完整性
PC的信息:
- 基因表达: "SUC5 is expressed in developing embryos"
- 功能描述: "SUC5 transports biotin and sucrose"
- 实验证据: "Uptake measurements of radiolabelled biotin"
- 物种信息: "Arabidopsis thaliana"
我们的信息:
- 基因表达: {"Root": "High"} (结构化数据)
- 功能描述: 缺少详细文本
- 实验证据: 缺少方法描述
- 物种信息: "Litchi chinensis" (单一物种)
3. 关系抽取方法
PC的方法 (GPT-4o):
1. 读取完整论文文本
2. 识别所有基因实体
3. 理解上下文语义
4. 抽取关系三元组
5. 生成实体定义
6. 提取证据文本
我们的方法 (规则匹配):
1. 读取gene-centric chunk
2. 正则表达式匹配关键词
3. 基于模式抽取关系
4. 无法处理复杂语义
PC的工作原理详解
阶段1: 数据预处理 (离线)
1.1 论文获取
# 从PubMed获取71,000篇论文
papers = fetch_pubmed_papers(query="Arabidopsis gene", limit=71000)
for paper in papers:
pmid = paper['pmid']
abstract = paper['abstract']
fulltext = paper['fulltext'] # 通过PMC获取
1.2 GPT-4o处理
# 使用GPT-4o处理每篇论文
prompt = f"""
从以下论文中提取基因关系:
PMID: {pmid}
Title: {title}
Abstract: {abstract}
Full-text: {fulltext}
任务:
1. 识别所有基因实体
2. 提取关系三元组 (source, relationship, target)
3. 确定实体类型 (gene, protein, metabolite, tissue...)
4. 提取证据文本
5. 生成实体定义
输出格式:
{{
"entities": [
{{
"name": "SUC5",
"type": "gene",
"definition": "A sucrose transporter gene...",
"aliases": ["ATSUC5", "AT1G71890"]
}}
],
"relations": [
{{
"source": "SUC5",
"source_type": "gene",
"relationship": "transports",
"target": "biotin",
"target_type": "metabolite",
"evidence": "SUC5 also transports biotin...",
"basis": "Uptake measurements..."
}}
]
}}
"""
result = gpt4o.generate(prompt)
1.3 数据存储
# 存储到MongoDB
db.all_dic.insert_many(relations)
db.scientific_chunks.insert_many(chunks)
db.gene_alias.insert_many(aliases)
阶段2: 查询服务 (在线)
2.1 用户查询
# 用户搜索 "SUC5"
query = "SUC5"
results = db.all_dic.find({"source": query})
2.2 关系验证 (GPT-4o-mini)
# 验证关系准确性
prompt = f"""
验证以下关系是否正确:
文本: {evidence_text}
关系: ({source}, {relationship}, {target})
输出:
- Validation Status: ✅ Correct / ❓ Uncertain / ❌ Incorrect
- Supporting Evidence: [原文引用]
- Explanation: [解释]
"""
validation = gpt4o_mini.generate(prompt)
2.3 原文获取
# 通过PMID获取原文
p_source = "23031218_abstract"
pmid = p_source.split('_')[0]
# 调用PubMed API
original_text = pubmed_api.fetch(pmid)
我们的改进方案
方案A: 使用V12.1章节文本 (推荐)
# V12.1已经提取了章节文本
sections = {
"Introduction": "...",
"Expression Analysis": "...详细表达描述...",
"Functional Characterization": "...功能描述...",
"Subcellular Localization": "...定位描述...",
"Discussion": "..."
}
# 使用章节文本进行LLM抽取
for section_name, text in sections.items():
relations = llm_extractor.extract(text, gene_id)
优势:
- 已有完整文本
- 无需额外API调用
- 信息丰富
方案B: 整合多数据源
# 结合多个数据源
data_sources = {
"gene_centric_chunks": chunks,
"paper_sections": sections,
"supplementary_tables": tables,
"figures_captions": captions
}
# 综合抽取
all_relations = []
for source, text in data_sources.items():
relations = llm_extractor.extract(text, gene_id)
all_relations.extend(relations)
方案C: 批量论文处理 (长期)
# 类似PC的方法,但针对基因家族
papers = search_gene_family_papers(family="SUT", species="Litchi")
for paper in papers:
relations = gpt4o.extract(paper)
store_to_kg(relations)
关键结论
PC的优势
- 规模大: 71,000篇论文
- 信息全: 完整abstract + full-text
- 智能高: GPT-4o理解语义
- 关系多: 320万关系
我们的优势
- 深度深: 单基因详细信息
- 结构好: 染色体、分组、多组学
- 成本低: 无需大量API调用
- 可控强: 规则+人工验证
互补性
PC: 广度优先 (多论文, 浅信息)
GF: 深度优先 (少论文, 深信息)
结合: PC的广度 + GF的深度 = 完整知识图谱
实施建议
短期 (本周)
- 使用V12.1章节文本重新抽取
- 实现简单的LLM抽取 (规则+轻量LLM)
- 验证抽取质量
中期 (本月)
- 批量处理10-20篇相关论文
- 构建基因家族专用知识图谱
- 与PC数据对齐
长期 (本季度)
- 实现完整的GPT-4o抽取流程
- 构建可扩展的抽取pipeline
- 发布基因家族知识图谱API