280 lines
5.6 KiB
Markdown
Executable File
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
|
|
**签名**: 🧬🤖
|