OpenMed肿瘤学与基因组实战指南:癌症分期解析、OncoTree映射与遗传实体提取
【免费下载链接】openmedLocal-first healthcare AI: clinical NER & HIPAA PII de-identification that runs 100% on-device. 2,200+ medical models, 21 languages, Apple MLX + Python, no cloud, no patient data leaving your network. Apache-2.0项目地址: https://gitcode.com/GitHub_Trending/ope/openmed
OpenMed是一个"本地优先"(local-first)的医疗 AI 工具包,提供临床命名实体识别(Clinical NER)与 HIPAA 合规的 PII 去标识化能力,内置 2,200+ 医疗模型、支持 21 种语言,基于 Apple MLX + Python 运行,患者数据 100% 留在你的网络内部,不经过任何云端。本文带你实战 OpenMed 的肿瘤学与基因组三大核心场景:
- TNM/AJCC 癌症分期解析——从病理报告中读取
pT2 N1 M0等分期描述; - OncoTree 肿瘤类型映射——把自由文本的癌种名称对齐到标准编码;
- 遗传实体提取——识别并结构化
NM_000059.3:c.1521_1523delCTT这类 HGVS 变异描述。
三者全部离线、确定性运行,源码位于 openmed/clinical/ 模块。
为什么肿瘤数据需要"本地优先"的 AI?
肿瘤学与基因组学数据是隐私敏感度最高的医疗数据:病理报告、基因检测结果一旦出网,就面临合规与再识别风险。OpenMed 的核心理念是no cloud, no patient data leaving your network——所有推理在本地设备或内网完成。
上图演示了 OpenMed 对一份合成出院小结的 PII 去标识化处理:姓名、MRN、电话、日期等字段被就地掩码,文档结构完整保留。肿瘤报告中的分期信息、基因变异号同样可以在这套"本地推理 + 就地编辑"的流水线中安全流转。
在 Apple Silicon 设备上,OpenMed 通过Apple MLX后端显著加速推理:
癌症分期解析:读懂病理报告里的 pT2N1M0
什么是 TNM 分期描述符?
病理与肿瘤科病历习惯用极简记号记录分期,例如pT2 N1 M0、ypT3a。其中:
- 前缀表示分期依据:
c(临床)、p(病理)、yp/yc(治疗后)、r(残存)、a(解剖); - T/N/M分别描述原发肿瘤、区域淋巴结、远处转移;
- G1–G4/GX为组织学分级。
OpenMed 的确定性解析器parse_tnm
OpenMed 提供 parse_tnm 函数(openmed/clinical/cancer_staging.py),把文本中明确写出的分期记号解析为结构化对象 TnmStage:分期依据、T/N/M 类别及亚类(如mi、i+)、显式写出的分级、以及来源文本偏移量,遵循 AJCC 第 8 版约定。
它的设计哲学非常克制:
- 只读文本、绝不推断:不推导分期分组(stage group)、不做预后评估、不给治疗建议;
- 不合法记号不硬改:
T5、N4这类非法类别会被放入unparsed并附原因,而不是被"纠正"成合法值; - 置信度透明:前缀冲突、模糊的
y前缀、存在未解析记号时,confidence标记为low。
对新手来说,这意味着你可以放心把解析结果用于数据审核与互操作,同时每条输出都自带 TNM_STAGING_ADVISORY 免责声明,明确它是"辅助工具而非正式分期"。
OncoTree 映射:把自由文本癌种对齐到标准编码
场景:报告中写着"浸润性导管癌",系统该怎么知道编码?
肿瘤类型在不同报告里写法各异(别名、旧代码、缩写)。OpenMed 的 load_oncotree 与 map_tumor_type(openmed/clinical/oncotree.py)提供确定性的术语落地(terminology grounding):
- 本地快照,不下载:OpenMed 不捆绑、不下载 OncoTree 数据。你提供一份本地 JSON 快照(通过路径参数或环境变量
OPENMED_ONCOTREE_PATH)和版本号(version=或OPENMED_ONCOTREE_VERSION),保证数据主权; - 四级匹配:精确代码 → 精确名称 → 归一化代码 → 归一化名称,命中即返回
code、name、main_type、tissue,置信度为 1.0(精确)或 0.95(归一化); - 历史代码可追溯:索引会收录快照中
history/revocations里的旧代码别名(当前代码优先),老报告中的过时编码也能对齐; - 不确定就不猜:歧义或未命中的提及以
ambiguous/no_match原因原样返回,绝不强行猜测。
映射结果携带oncotree_version版本溯源,方便审计"这个映射来自哪个版本的 OncoTree 发布"。
遗传实体提取:识别并结构化 HGVS 变异描述
分子病理报告中的变异号长什么样?
基因检测与分子病理笔记常用HGVS 命名法记录变异,例如:
NM_000059.3:c.1521_1523delCTT——CFTR 基因 cDNA 层面的缺失;p.Phe508del——蛋白层面(著名的囊性纤维化突变)。
OpenMed 的 parse_hgvs(openmed/clinical/genomics.py)扫描自由文本,把每个 HGVS 描述拆解为结构化 HgvsMention:
| 字段 | 含义 |
|---|---|
reference_sequence | 参考序列号,如NM_000059.3 |
coordinate_type | 坐标类型:c(cDNA)/p(蛋白)/g(基因组)/m(线粒体)/n/r |
position/edit | 位置(如1521_1523)与编辑(如delCTT) |
span | 在原文中的精确字符偏移,text[start:end]还原原始描述 |
status | valid/malformed/unparseable,附原因码 |
解析是纯语法层面的:不对参考序列做生物学校验、不判断致病性、不查询 ClinVar/dbSNP/COSMIC 等数据库;畸形描述符带着原因码呈现,永远不会被"修正"成看似合理的变异(见 GENOMICS_ADVISORY)。精确偏移量还让下游可以去标识化时就地掩码变异号而不破坏句子结构。
批量处理与性能:本地跑临床数据有多快?
单个解析器很快,但真实场景是成百上千份报告。OpenMed 的批量 PII 处理在批处理(batch_size=16)模式下相比逐条处理有 2 倍以上吞吐提升,MLX 批量路径进一步把提取/去标识化吞吐推到 200+ 文档/秒:
负责任边界:这些输出是"辅助"而非"诊断"
OpenMed 的肿瘤学与基因组模块全部内置显式的 advisory 声明:
- 分期解析不做分期分组推导与预后评估,不替代病理科/肿瘤科的正式分期;
- OncoTree 映射不预测肿瘤类型、不推导组织学、不跨映射到 ICD-O/SNOMED CT/UMLS;
- HGVS 提取不做致病性解释或数据库查询。
这套"确定性 + 透明溯源 + 显式免责"的设计,让它既能安全地嵌入临床工作流的数据治理环节,又不会越界充当临床判断。更多临床模块文档可参阅 docs/clinical/ 目录(如 概念落地、术语冲突),去标识化 API 见 docs/api/deidentification.md。
小结
| 场景 | 函数 | 源码 |
|---|---|---|
| 癌症分期(TNM/AJCC) | parse_tnm | openmed/clinical/cancer_staging.py |
| 肿瘤类型 → OncoTree 编码 | map_tumor_type | openmed/clinical/oncotree.py |
| HGVS 遗传实体提取 | parse_hgvs | openmed/clinical/genomics.py |
OpenMed 把肿瘤学与基因组学中最繁琐的"文本 → 结构化"工作交给确定性解析器,用本地优先架构守住患者数据边界——这正是它"2,200+ 医疗模型、21 种语言、零云端"承诺的延伸。 🩺
【免费下载链接】openmedLocal-first healthcare AI: clinical NER & HIPAA PII de-identification that runs 100% on-device. 2,200+ medical models, 21 languages, Apple MLX + Python, no cloud, no patient data leaving your network. Apache-2.0项目地址: https://gitcode.com/GitHub_Trending/ope/openmed
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考