农业科学/作物遗传学领域多粒度双语信息抽取。NER (12 实体类型) + RE (6 关系类型),字符级偏移量。
约束: 不微调,仅 Prompt Engineering / ICL / RAG。
Baseline (test_A): 0.448
ScoreNER = 0.5×F1 + 0.25×P + 0.25×R
ScoreRE = 0.5×F1 + 0.25×P + 0.25×R
Total = 0.4×ScoreNER + 0.6×ScoreRE
RE 权重 60%,是主要优化方向。
| # | 方案 | 分支 | 实体模型 | 关系模型 | ScoreNER | ScoreRE | Total |
|---|---|---|---|---|---|---|---|
| 1 | v6 Pro+Flash | v6-pro-thinking | Pro T=0.3 | Flash 思考+Fewshot | 0.703 | 0.256 | 0.434 |
| 2 | v5 多温度投票 | multi-temp-voting | Flash 4温 | Flash 4温 | 0.644 | 0.251 | 0.408 |
| 3 | v1 联合抽取 | master | Flash T=0 | Flash T=0 | 0.614 | 0.216 | 0.376 |
| 4 | v3 三阶段 | master | Flash | Flash | 0.596 | 0.228 | 0.375 |
| 5 | v4 约束选择 | v4-constrained-rel | Flash | Flash 约束 | 0.625 | 0.124 | 0.324 |
rag_extractor.py | 模型: deepseek-chat (Flash), T=0
Sentence-Transformers 检索 top-3 相似训练样本,单次 API 同时输出实体+关系。
| ScoreNER | ScoreRE | Total |
|---|---|---|
| 0.614 | 0.216 | 0.376 |
问题: 关系 Precision 18%(356 pred / 64 TP),自由生成导致严重过预测。
advanced_pipeline.py | 模型: deepseek-chat
Stage1 实体 → Stage2 关系 → Stage3 offset 修正。
| ScoreNER | ScoreRE | Total |
|---|---|---|
| 0.596 | 0.228 | 0.375 |
结论: 分离 Prompt 未改善过预测。Stage1 多输出实体→Stage2 更多假关系。
rel_classifier.py | 分支: v4-constrained-rel
用训练数据统计合法 (head_type, rel, tail_type) 三元组,限制模型只能从合法标签中选择。
| 版本 | ScoreNER | ScoreRE | Total | 关系数 |
|---|---|---|---|---|
| v4 强制选择 | 0.625 | 0.124 | 0.324 | 4590 pred / 246 gold |
| v4b 非强制 | 0.608 | 0.155 | 0.336 | 972 pred / 246 gold |
结论: 约束池太大(80 种类型组合×N² 实体对),无论强制还是非强制都过预测。此路不通。
分支: multi-temp-voting | 模型: deepseek-chat × 4 温度
同模型 4 个温度(0.01/0.1/0.3/0.6)独立抽取 → ensemble 投票。
| 温度 | ScoreNER | ScoreRE | Total |
|---|---|---|---|
| 0.01 | 0.628 | 0.253 | 0.403 |
| 0.1 | 0.622 | 0.192 | 0.364 |
| 0.3 | 0.636 | 0.253 | 0.406 |
| 0.6 | 0.616 | 0.247 | 0.394 |
| 投票 | 0.644 | 0.251 | 0.408 |
发现: 0.3 是最优单温度;NER 投票有效(+0.03);RE 投票几乎无效(同模型错误模式相似)。
分支: v6-pro-thinking | 当前最佳
实体: deepseek-v4-pro (thinking=disabled, T=0.3) + 泛词排除 Prompt
关系: deepseek-v4-flash (thinking=enabled) + Few-shot + 方向定义 Prompt
| ScoreNER | ScoreRE | Total | 验证集 |
|---|---|---|---|
| 0.703 | 0.256 | 0.434 | val20 (20条) |
关键发现:
- Pro 比 Flash 实体好一截(0.703 vs 0.644)
- Flash 思考模式不加 Few-shot → RE=0.119;加 Few-shot → RE=0.256
- 方向 Prompt 让 CON 关系从全部反转 → 全部正确
分支: v6-pro-thinking | 模型: Pro/deepseek-ai/DeepSeek-R1 (硅基流动)
用 Pro 实体 + R1 做关系抽取,配三层防护:
| 层 | 内容 | 效果 |
|---|---|---|
| 1 | 实体泛词排除 (condition/pattern/response等) | 实体 FP 接近 0 |
| 2 | 三步证据校验 (原文动词→结果vs背景→标签) | 部分条目完美 |
| 3 | 生物约束矩阵 (每种关系限定head/tail类型) | 后处理安全网 |
单条目最佳结果: 7/7 TP, 0 FP (100% Precision, 100% Recall)
5 条目实测: 1 条完美,1 条 21 FP 爆炸,1 条 0 输出,1 条超时,1 条未跑。
结论: R1 逻辑强但不稳定,且 2-5 分钟/条+频繁超时,暂不可批量使用。
| 模型 | 平台 | 速度 | thinking | 适用 |
|---|---|---|---|---|
| deepseek-chat (Flash) | DeepSeek | 2s | 非思考 | 实体(NER 0.64) |
| deepseek-v4-pro | DeepSeek | 4s | thinking=disabled | 实体(NER 0.70) |
| deepseek-v4-flash | DeepSeek | 12-20s | thinking=enabled | 关系(需Fewshot) |
| deepseek-v4-pro | DeepSeek | 62s | thinking=enabled | 太慢+content空,不用 |
| Pro/DeepSeek-R1 | 硅基流动 | 120-300s | 推理 | 强但不稳定,待优化 |
| Qwen3-30B-Thinking | 硅基流动 | 190s | 推理 | 太慢,不用 |
- Prompt 改实体比改关系容易 — 泛词排除让实体 FP 降到 0
- Few-shot 对思考模式至关重要 — 无 Few-shot → RE 从 0.251 跌到 0.119
- 同模型投票对 RE 无效 — 错误模式雷同,需要不同架构模型
- 关系是推理任务 — R1 方向正确但速度和稳定性不行
| 文件 | 条目 | 实体 | 关系 |
|---|---|---|---|
| train.json | 1000 | 6228 | 2345 |
| test_A.json | 400 | — | — |
| val20/val_gold.json | 20 | 136 | 46 |
| val50/val_gold.json | 50 | 324 | 120 |
| val_split/val_gold.json | 100 | 615 | 246 |
| 分支 | 内容 |
|---|---|
| master | v1 联合 + v3 三阶段 |
| multi-temp-voting | v5 多温度投票 (Total 0.408) |
| v4-constrained-rel | v4 约束分类 |
| v6-pro-thinking | v6 Pro实体+Flash思考 (Total 0.434) |
conda activate ccl # Python 3.11 @ F:\ProgramData\anaconda3\envs\ccl
pip install requests openai sentence-transformers numpy tqdm scikit-learn用于 DeepSeek V4 Pro,配合 Few-shot 示例。该 Prompt 已加入"排除规则"以过滤泛化背景词。
农业作物科学命名实体识别专家。从文本中抽取具体的生物物理实体。
实体类型:
- CROP: 作物物种名
- QTL: 数量性状位点
- MRK: 分子标记
- BM: 生物方法/分析方法
- GENE: 基因名/基因家族名
- TRT: 具体的性状/表型(如株高、产量、抗性)
- VAR: 品种/品系/种质
- ABS: 非生物胁迫类型(如干旱、盐碱)
- CHR: 染色体
- BIS: 生物胁迫(如白粉病)
- GST: 生长阶段(如拔节期)
- CROSS: 杂交组合
排除规则 - 以下不属于实体:
- 描述性背景词: environmental conditions, stress factors, expression patterns, responses
- 泛指过程: growth, development, metabolism
- 实验条件: control group, treatment, normal conditions
实体必须是具体的、可被定位或测量的生物物理对象。
输出JSON: {"entities": [{"start": int, "end": int, "text": "...", "label": "TYPE"}]}
后处理: 正则过滤含 condition/expression/response/pattern/level/factor/treatment/control/growth/development 等泛词的实体。
用于 Pro/deepseek-ai/DeepSeek-R1 (硅基流动)。核心思路:PROVE 关系而非 FIND 关系,三步证据校验 + 实体过滤 + 领域常识禁令。
你是《作物学报》审稿专家。你的任务是 PROVE 实体间关系,而非 FIND 关系。
关系类型:
- AFF: 一个实体影响/调控另一个
- LOI: 实体位于另一个上,需位置/定位证据
- CON: 两个实体相关/关联(基因家族成员用CON)
- HAS: 品种/作物拥有性状(NOT for 基因-基因)
- USE: 方法被用来研究实体
- OCI: 实体发生在条件/阶段下
三步证据校验 (对每个候选关系执行):
Step 1 - 直接语义链接:
从原文中摘录连接两个实体的动词或短语。
例: "conferred resistance to" -> AFF
例: "located on chromosome" -> LOI
如果找不到明确的连接词 -> 拒绝此关系。
Step 2 - 科学结果 vs 背景提及:
如果原文只是说"在X条件下研究了Y" -> 这仅是实验背景,不是关系。
如果原文说"X显著提高了Y" -> 这是科学结果,可以是关系。
背景提及 -> 拒绝。科学结果 -> 继续Step 3。
Step 3 - 关系标签判定:
根据找到的证据短语,分配最合适的关系标签。
如果没有合适标签 -> 拒绝。
实体过滤层:
- 如果实体是泛指背景词(如 conditions, factors, expression patterns),不要为它创建任何关系。
- 只对具体的生物对象(基因、QTL、性状、品种等)之间创建关系。
关键禁令:
- 禁止领域常识推理。文本没说 = 没有关系。
- 禁止为"填补逻辑"而连线。每个关系必须有原文证据支撑。
- 宁可输出少,不可输出错。Precision over Recall。
输出JSON: {"relations": [{"id1": 0, "id2": 3, "label": "REL"}]}
生物约束矩阵 (Python 后处理):
| 关系 | Head 类型 | Tail 类型 |
|---|---|---|
| LOI | QTL, MRK, GENE | CHR, TRT, QTL |
| HAS | VAR, CROP | TRT, QTL |
| AFF | ABS, GENE, BIS, BM | TRT, GENE |
| CON | GENE, QTL, CROP, VAR | GENE, QTL, VAR, CROP |
| USE | BM | GENE, QTL, TRT, MRK |
| OCI | TRT, ABS, BIS | GST |
学术动词映射: controls/affects/influences→AFF, located/mapped→LOI, associated/correlated/linked→CON, has/exhibits/shows→HAS, uses/detected/analyzed→USE, occurs/expressed→OCI