Files
PlantAI-rag/docs/guides/VALIDATION_METHODS.md
2026-07-10 17:59:59 +08:00

5.6 KiB
Executable File

知识图谱验证方法研究

日期: 2026-04-10 19:57 GMT+8
目标: 学习PC等项目的验证方法


验证的重要性

您说得对,"优秀"不能只是自己说,需要客观验证。


PC (PlantConnectome) 的验证方法

1. 人工抽样验证

方法:

  • 随机抽取5-10%的关系
  • 由领域专家人工核对原文
  • 计算准确率

标准:

  • 准确率 > 90%: 优秀
  • 准确率 80-90%: 良好
  • 准确率 < 80%: 需改进

2. 证据溯源验证

PC的做法:

每个关系必须包含:
- source: 源实体
- evidence: 证据句子
- pmid: 文献来源
- p_source: 章节来源 (如 23031218_abstract)
- basis: 实验方法

验证方式:

  • 根据PMID找到原文
  • 根据p_source找到章节
  • 核对evidence是否与原文一致

3. 交叉验证

PC的做法:

  • 同一关系从多篇论文提取
  • 如果多篇论文一致,可信度更高
  • 如果矛盾,标记为待验证

4. 实体标准化验证

PC的做法:

SUC5 → (ATSUC5, SUC5, AT1G71890)
  • 使用标准数据库ID (TAIR, NCBI)
  • 验证基因名是否正确

其他RAG项目的验证方法

方法1: 人工评估 (Human Evaluation)

步骤:

  1. 准备测试集 (50-100个关系)
  2. 请专家标注正确答案
  3. 对比提取结果与专家标注
  4. 计算:
    • 准确率 (Precision)
    • 召回率 (Recall)
    • F1分数

工具:

  • 使用标注工具 (如 Label Studio)
  • 多人标注取平均

方法2: 自动验证 (Automatic Validation)

方法A: 基于已有数据库

# 与已知数据库对比
known_relations = load_from_database()  # 如TAIR, Phytozome
extracted_relations = load_extracted()

# 计算重叠度
overlap = len(set(extracted) & set(known))
total = len(extracted)
accuracy = overlap / total

方法B: 基于附表验证

# 论文附表通常包含金标准
supplementary_table = load_excel('Table_S1.xlsx')
extracted = load_extracted()

# 对比
for gene in extracted:
    if gene in supplementary_table:
        check_chromosome_match(gene)
        check_expression_match(gene)

方法3: 证据完整性检查

检查项:

  1. 每个关系是否有证据句子?
  2. 证据句子是否来自原文?
  3. 证据长度是否合理 (>20字符)?
  4. 是否有PMID/DOI标注?

方法4: 一致性检查

检查矛盾关系:

SlSut01 --[expressed_in]--> roots
SlSut01 --[not_expressed_in]--> roots  ← 矛盾!

检查重复关系:

SlSut01 --[expressed_in]--> roots
SlSut01 --[expressed_in]--> roots  ← 重复!

应用到我们的验证

建议验证方案

方案1: 附表验证(最可行)

荔枝论文附表:

  • Table S1: 基因列表和染色体位置
  • Table S2-S4: 染色体定位
  • Table S5: 结构信息
  • Table S12-S16: 表达数据

验证步骤:

# 1. 加载附表
supp_genes = pd.read_excel('Table_S1.xlsx')

# 2. 验证染色体位置
for relation in extracted_relations:
    if relation['relation'] == 'located_on':
        gene = relation['source']
        chrom = relation['target']
        
        # 查附表验证
        expected_chrom = supp_genes[supp_genes['Gene'] == gene]['Chromosome'].values[0]
        
        if chrom == expected_chrom:
            print(f"✅ {gene} 染色体位置正确")
        else:
            print(f"❌ {gene} 染色体位置错误: 提取{chrom}, 实际{expected_chrom}")

方案2: 人工抽样验证

步骤:

  1. 随机抽取20个关系
  2. 在PDF中定位原文
  3. 人工核对是否正确
  4. 计算准确率

抽样策略:

  • 按关系类型分层抽样
  • 每种类型抽2-3个
  • 重点验证关键关系

方案3: 证据完整性验证

自动检查:

def validate_evidence(relations):
    issues = []
    
    for r in relations:
        # 检查1: 是否有证据
        if not r.get('evidence'):
            issues.append(f"{r['source']} 缺少证据")
        
        # 检查2: 证据长度
        if len(r['evidence']) < 20:
            issues.append(f"{r['source']} 证据过短")
        
        # 检查3: 证据是否来自原文
        if r['evidence'] not in full_text:
            issues.append(f"{r['source']} 证据不在原文中")
    
    return issues

立即执行的验证

验证1: 附表染色体位置验证

# 下载附表
wget https://www.mdpi.com/.../plants-13-00095-s001.xlsx

# 验证提取的染色体位置
python3 validate_chromosome.py

验证2: 人工抽样验证

抽样20个关系:

  1. SlSut01 --[highly_expressed_in]--> pulp
  2. SlSut08 --[located_on]--> Chr07
  3. SlSut05 --[grouped_with]--> Group I ...

验证步骤:

  1. 打开PDF
  2. 搜索基因名
  3. 核对关系描述
  4. 标记正确/错误

验证3: 证据完整性检查

# 检查所有关系的证据
issues = check_evidence_quality(relations)
print(f"发现 {len(issues)} 个问题")

验证结果报告模板

验证报告
========

1. 附表验证
- 染色体位置: 45/49 正确 (91.8%)
- 系统发育分组: 85/100 正确 (85.0%)

2. 人工抽样验证 (20个)
- 正确: 18个 (90%)
- 错误: 2个 (10%)
- 问题: 证据不完整

3. 证据完整性
- 完整证据: 232/235 (98.7%)
- 短证据: 3个
- 缺失证据: 0个

综合准确率: 90.5%
评价: 良好

下一步

请选择一个验证方案立即执行:

  1. 附表验证 - 最客观,有金标准
  2. 人工抽样 - 最准确,但耗时
  3. 证据完整性 - 最快速,可自动化

建议:先执行附表验证,因为:

  • 有客观标准
  • 可自动化
  • 可量化准确率

时间: 2026-04-10 20:00 GMT+8
签名: 🧬🤖