DAY 2 · S6 · 上午 60 分钟
数据工程的真实形态
这一节全部用软件工程的语言讲。
U6.1要建的是四层能力,不是一个爬虫
① 多源接入层 公开库 · 专利批量 · 文献补充材料
→ 增量、可重放、带缓存(就是普通的 ETL)
② 实体归一层 靶点归一到 UniProt 主键;抗体归一到序列
→ 就是 entity resolution / 主数据管理
③ 证据判定层 这条配对凭什么成立?强度多少?原文在哪句?
→ 数据血缘 + 置信度分层 ← 护城河在这一层
④ 抽取层 从专利权利要求书、论文正文里抽关系
→ 信息抽取 ← 成本大头在这一层
大多数人只做第 ① 层就以为完事了——「我能抓到 N 万条」。 真正区分供应商的是第 ③ 层:你能不能对每一条说清楚「凭什么」。
证据判定层每条记录标明证据类型、强度、原文位置
≈
data lineage + confidence你在数据平台里已经建过的东西
证据分级长什么样
一个可用的分级(数字是示例,重点是分层这件事):
L1 结构确证(复合物结构里两个分子真的贴在一起)>
L2 上市药物的官方靶点>
L3 策展实验记录>
L4 专利/文献里的显式声明。
下面还有一层「仅关键词共现」——应当直接剔除,不交付。
关键不在于用几级,而在于每条记录都能回答「你凭什么」,且这个回答是可机读的字段。
U6.2五个真实的坑,每个都有编程对应物
下面每一条都是真实发生过的,不是教科书举例。 请特别注意最后一列——你会发现自己其实都见过。
| 坑 | 发生了什么 | 你熟悉的版本 |
|---|---|---|
| ① 关键词共现噪声 | 数据库自带的「靶点」字段其实是关键词共现,一条记录能列 100+ 个基因别名。 用它能「做」出 6 万多条配对;只保留原文有明确声明的之后,剩下约 1.2 万条 | 把 full-text search 的 结果当成结构化字段用 |
| ② 别名子串假阳性 | HER2 的别名 neu 裸子串命中了 neuraminidase、neutralizing;
PD-1 的基因全名是 PD-L1 基因全名的前缀,两者会同时命中 |
正则没加词边界 + 没做最长匹配消歧 |
| ③ 主流靶点被归错 | CCR4 被另一个基因的同名别名劫持;4-1BB、CD166、OX40 也各自归到了错误条目。 四个都是主流免疫肿瘤靶点 | 外键解析用了 会冲突的 alias 做首选路由 |
| ④ 公开数据源已饱和 | 再接入一个公开亲和力库(上千行),去重后净增 0 条 | 新数据源与旧的 完全重叠 |
| ⑤ 表位编号跨毒株失效 | 文献说表位在第 541 位是丝氨酸,但参考序列第 541 位不是—— 标注来自另一个毒株/分离株。同一批数据里, 某些保守蛋白能对上九成以上,超变蛋白只能对上不到一成 | 两份数据用了 不同的坐标基准 |
这五个坑的共同点
数据表面完全正常——字段齐、格式对、条数够、每条都有 ID。
静态看数据永远发现不了,只有主动去证伪才能发现。
这就是这个领域的技术壁垒:不在「能抓多少」,在「能证明抓对了多少」。
第 ④ 条值得单独说:「接了一个新源,净增 0 条」听上去是失败,
其实是一个有价值的负面结论——它排除了「多接几个公开库就能解决数据稀缺」这条路,
从而证明了必须走成本高得多的全文抽取。
能把负面结果当成交付物的团队,和只报正面数字的团队,不是一个层次。 这条也会出现在 S8 的必问清单里。
能把负面结果当成交付物的团队,和只报正面数字的团队,不是一个层次。 这条也会出现在 S8 的必问清单里。
U6.3如果让你来搭,第一周该干什么
把上面翻译成一份实际的开工顺序:
- 先建归一层,不要先建接入层。没有稳定主键,接得越多越乱。
- 归一层的第一个功能是「拒绝」。能识别出「这个词我不确定」比全部强行映射重要得多。
- 每条记录从第一天就带证据字段(来源、证据类型、原文定位)。事后补是补不上的。
- 质检写成断言,进 CI。不是月度报告,是每次跑完就红绿灯(见 Lab 6)。
- 准备一个独立源专门用来复核,且它不参与生产管线(见 Lab 4)。
一句话
这一层的工作量和难度,和你做过的任何一个 主数据治理项目是同构的。区别只是实体从「用户/商品」换成了「蛋白/抗体」, 而错一条的代价高得多。