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 的必问清单里。

U6.3如果让你来搭,第一周该干什么

把上面翻译成一份实际的开工顺序:

  1. 先建归一层,不要先建接入层。没有稳定主键,接得越多越乱。
  2. 归一层的第一个功能是「拒绝」。能识别出「这个词我不确定」比全部强行映射重要得多。
  3. 每条记录从第一天就带证据字段(来源、证据类型、原文定位)。事后补是补不上的。
  4. 质检写成断言,进 CI。不是月度报告,是每次跑完就红绿灯(见 Lab 6)。
  5. 准备一个独立源专门用来复核,且它不参与生产管线(见 Lab 4)。
一句话

这一层的工作量和难度,和你做过的任何一个 主数据治理项目是同构的。区别只是实体从「用户/商品」换成了「蛋白/抗体」, 而错一条的代价高得多。

当堂自测

S6 · 数据工程