目录
2025 年 2 月,我开始记录一个生物信息自动化问题:能否根据 GEO 的 GSE 与 GSM 题录信息,自动识别合理的实验组和对照组?
表面上看,这是一个文本分类任务。真正困难的地方却是实验设计:两个比较组之间应尽量只保留一个主要变量,同时控制组织、细胞类型、处理时间、剂量、批次和技术平台等混杂因素。
先定义模型到底要输出什么
如果标签只有“实验组”和“对照组”,模型很容易记住疾病名称或常见处理词,却没有真正学会比较关系。
更合适的训练单元应当是一组可检查的比较:
{
"gse": "GSEXXXX",
"comparison_id": "C01",
"factor": "treatment",
"control_level": "vehicle",
"case_level": "drug",
"control_gsms": ["GSM001", "GSM002"],
"case_gsms": ["GSM003", "GSM004"],
"matched_fields": ["organism", "tissue", "cell_type", "time"],
"confounded_fields": [],
"evidence_fields": ["characteristics_ch1", "treatment_protocol"],
"review_status": "human_verified"
}
这里最重要的不是字段名称,而是把“为什么可以比较”转换成结构化证据。
输入层:保留原始信息,也保留规范化结果
GEO 的样本描述经常是不一致的自然语言。同一种处理可能写成缩写、商品名、剂量或实验步骤。如果直接把所有文本拼接给模型,后续很难判断错误来自哪里。
我更倾向于保留两层输入:
- 原始层:Series 标题、总体设计、Sample 特征、来源、处理说明和平台信息。
- 规范化层:物种、组织、细胞类型、疾病、药物、剂量、时间、基因型、批次和重复类型。
规范化字段必须能够回指原文。模型抽取了“24 h”,就应同时记录它来自哪个字段、对应哪段文本。
分组理由应该保留,但不要写成长篇作文
最初的问题之一是:最终只需要分组结果,还有必要生成理由吗?
我的结论是理由仍然有价值,但不应把一段自由文本当作唯一监督信号。更可靠的做法是拆成:
- 本次比较改变了哪个变量;
- 哪些关键变量保持一致;
- 哪些字段支持这一判断;
- 是否仍存在无法消除的混杂;
- 模型对该比较的置信度;
- 人工是否复核。
这样既保留可解释性,也能让校验程序直接检查逻辑。
数据划分必须以 GSE 为单位
如果把同一个 GSE 中的 GSM 随机分到训练集和测试集,模型可能通过共享标题、平台描述或实验文本识别数据集,而不是学会实验设计。
因此,训练、验证和测试应尽量按研究划分:
一个 GSE 的全部样本
→ 只能进入训练、验证或测试中的一个集合
如果同一论文包含多个高度相关的 GSE,还需要考虑按论文、课题或研究系列进一步分组,避免近重复信息泄漏。
比直接端到端生成更稳妥的流程
我会把系统拆成四步:
元数据规范化
→ 候选比较生成
→ 约束校验
→ 人工复核
候选生成可以使用规则、语言模型或两者组合;约束校验则应尽量确定化,例如:
- 两组物种是否一致;
- 组织和细胞类型是否一致;
- 时间是否既是比较因素又被错误地当作匹配因素;
- 技术重复是否被当成独立生物重复;
- 每组样本量是否达到预设下限;
- 是否存在多个变量同时变化。
模型负责理解不规则文本,规则负责守住明确边界。
需要专门收集的失败样本
高质量训练集不能只有“明显正确”的比较,还要包含容易误判的负例:
- 药物和时间同时变化;
- 对照来自不同批次或不同细胞系;
- disease 与 normal 的组织来源不一致;
- 技术重复被误当作生物重复;
- 同一 GSM 被错误放入比较两侧;
- 样本描述缺失,只能做低置信度判断;
- 只有一个样本,却被强行组成比较。
这些失败样本可以用来训练候选排序或校验器,也能更真实地评估系统。
评估不应只看样本分类准确率
这个任务的核心对象是“比较关系”,因此至少需要报告:
- GSM 集合是否与人工标注一致;
- 比较变量是否识别正确;
- 是否引入额外混杂;
- 完整比较的精确率与召回率;
- 不确定样本能否正确拒答;
- 不同疾病、平台和实验类型之间的泛化差异。
最终还需要领域人员检查一批完整比较。自动指标再高,也不能替代对实验设计合理性的复核。
当前状态
当前成果是一套训练数据与验证方案,重点是变量抽取、候选配对、约束校验与研究级验证。
下一步最有价值的工作不是立即选择更复杂的模型,而是先建立一批边界清晰、能追溯原始元数据、包含困难负例的人工核验数据。
讨论
评论使用 GitHub Discussions。首次加载需要访问 GitHub。