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

280 lines
5.6 KiB
Markdown
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: 基于已有数据库**
```python
# 与已知数据库对比
known_relations = load_from_database() # 如TAIR, Phytozome
extracted_relations = load_extracted()
# 计算重叠度
overlap = len(set(extracted) & set(known))
total = len(extracted)
accuracy = overlap / total
```
**方法B: 基于附表验证**
```python
# 论文附表通常包含金标准
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: 表达数据
**验证步骤**:
```python
# 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: 证据完整性验证
**自动检查**:
```python
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: 附表染色体位置验证
```bash
# 下载附表
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: 证据完整性检查
```python
# 检查所有关系的证据
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
**签名**: 🧬🤖