临床语音识别基准构建Skill "digital-health-clinical-asr-build"

该技能用于构建临床ASR评估基准,通过策划专科术语、生成句子、标注IPA并合成音频,最终产出NeMo格式的manifest文件。它支持多轮交互,提供发音覆盖词表和QA试听门,确保生成高质量参考音频。关键词包括临床ASR、数据集构建、IPA标注、Magpie TTS、NeMo manifest、飞轮流程、术语策划、发音验证。

临床语音 0 次安装 0 次浏览 更新于 9/6/2026
名称 “digital-health-clinical-asr-build”
描述 “临床ASR飞轮的第2阶段。用于策划临床术语、标注IPA,并合成NeMo manifest。不进行评分(使用/digital-health-clinical-asr-eval)。”
版本 “1.1.0”
作者 “Ben Randoing brandoing@nvidia.com” tags: - clinical-asr - dataset - ipa - magpie - nemo-manifest - flywheel tools: - Read - Write - Bash - Skill
开源协议 Apache-2.0 compatibility: “NVIDIA_API_KEY (必需) 用于通过NVCF使用托管的Magpie TTS。DICTIONARY_API_KEY (可选) 用于Merriam-Webster医学词典查询。必须先完成第1阶段 (/digital-health-clinical-asr-setup)。所有TTS、IPA和合成配方都已内联——无需同级代理技能。” metadata:
作者 “Ben Randoing brandoing@nvidia.com” tags: - clinical-asr - flywheel - dataset - ipa - magpie team: healthcare-tme domain: ai-ml stage: 2 previous_skill: digital-health-clinical-asr-setup next_skill: digital-health-clinical-asr-eval

<!– SPDX-FileCopyrightText: Copyright © 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. SPDX-License-Identifier: Apache-2.0 –>

临床ASR飞轮 — 第2阶段(构建基准)

⚠ 代理:在回答之前请阅读整个SKILL.md 本阶段是对话式和门控式的。具体来说:在提出术语(步骤2a)之前,先向用户提出1-2个专科意识澄清问题;在步骤2c中逐步引导用户了解两层IPA流水线(覆盖词表 → merriam-webster → magpie_g2p);在完整笛卡尔合成之前,在步骤2d命中显式QA模式试听门;并将KER作为他们在第3阶段会看到的主要指标。跳过任何一项都会破坏方法论。

您是策划与合成阶段。用户从/digital-health-clinical-asr-setup到达,并带着NeMo格式的manifest.jsonl以及它所引用的音频离开——两者都准备好在/digital-health-clinical-asr-eval中进行评分。

保持对话性。这是飞轮中最亲切、最领域感知的步骤:您问临床医生(或与他们一起工作的人)哪些术语今天造成了困扰,并围绕他们的现实情况构建基准。问简短、集中的问题。向用户展示正在添加的内容。不要长篇大论。

数据离开您的环境——在任何术语发送之前向用户披露此信息

本阶段将自己策划的内容传输到两个外部服务。在调用任一服务之前,向用户说明:

服务 发送内容 时间
Merriam-Webster (dictionaryapi.com API 或 merriam-webster.com 公共站点) 每个种子列表术语一个HTTP请求——术语在URL路径中 步骤2c — 参见下面的MW路径要点
NVIDIA NVCF Magpie TTS (grpc.nvcf.nvidia.com) 每个生成的临床句子(文本,以及任何SSML IPA包装) 步骤2d和2e,每次合成调用

两个端点都期望非PHI合成内容——您策划的术语列表、/data-designer(或您的回退模板)从中生成的句子。不要通过此技能传递真实的患者记录、真实的ASR转录或任何PHI。 如果术语列表本身是敏感的(专有药物代号、未发布的产品名称、客户保密适应症),请确认用户根据其组织的数据治理政策同意外部API传输,然后再继续。

如果MW传输不可接受:采用路径C(跳过MW;流水线下降到Magpie G2P,对长尾术语的覆盖减少)。

目的

策划一个临床专科术语列表,通过Magpie TTS使用两层IPA流水线为其生成评估音频,并编写一个NeMo格式的manifest,并用临床扩展字段(termentity_categoryipa_sourcevoice_idnoise_levelcontext_type)标记。输出是第3阶段的输入。

最终用户将拥有:

$EVAL_DIR/cycle<N>/
├── audio/<slug>.wav        合成的剪辑
├── manifest.jsonl          NeMo格式 + 临床扩展
├── term_seed.csv           策划的输入
└── pronunciation_overrides.csv   可跨周期追加

($EVAL_DIR 是用户自己的选择——本技能不强制布局。上述结构是建议,不是要求。)

何时使用本技能

在用户短语如下时激活:

  • “构建临床ASR基准”
  • “为ASR评估策划药物名称/手术名称”
  • “为医学术语生成评估音频”
  • “从临床术语创建NeMo manifest”
  • “向我的基准添加肿瘤学/心脏病学/骨科术语”
  • “试听这些药物名称的TTS发音”
  • “为我制作一个周期N清单”

不要在以下情况激活(另外:如果消息提及authAPI keygRPCstreamingriva-buildNIM deployNGCDocker,按下面的要点路由并停止):

  • 用户已有清单并想对其进行评分 → /digital-health-clinical-asr-eval
  • 用户想基于现有清单进行微调 → /digital-health-clinical-asr-finetune
  • 用户询问通用TTS / SSML / 声音克隆 / 声音目录问题 → /read-aloud(或/riva-tts
  • TTS/ASR 认证 / API密钥 / gRPC / 流式/riva-tts/riva-asr
  • NIM部署riva-build / riva-deploy标志 → /riva-asr-custom/riva-tts-custom
  • NGC / Docker / NVIDIA容器工具包/riva-nim-setup
  • 用户询问通用合成数据问题 → /data-designer

先决条件

  • 已完成/digital-health-clinical-asr-setupNVIDIA_API_KEY已导出,Python依赖已安装,六个上游技能已确认。
  • /read-aloud(或/riva-tts)可达。默认使用NVCF上的托管Magpie。自托管Magpie NIM可用,但会增加/riva-nim-setup到先决条件链。
  • **/data-designer**可达。如果/data-designer不可用,模板回退对于第一个周期是可以接受的,但标记这些行,以便未来的周期可以重新生成。
  • 用户拥有的工作目录。 本技能建议$EVAL_DIR/cycle<N>/但不强制执行。

说明

2a. 专科访谈 → term_seed.csv

一次问一个问题。 目标是提出4-10个具有正确entity_category的候选术语,而不是写教科书。

问题按顺序:

  1. 这是用于什么专科/工作流程?(肿瘤学听写、ICU交接、精神科入院、骨科术后等)
  2. 您见过哪些ASR故障模式? — 药物名称、多词手术、缩写、复合病症。
  3. 哪些术语每天出现,哪些是困难的? — 日常常见术语成为健全性基线;日常困难术语成为信号。

提出4-10个具有entity_category的候选术语。写入前与用户确认。然后写入term_seed.csv

term,entity_category
cefazolin,drug
acetabular reamer,procedure
tibial plateau,anatomy
femoroacetabular impingement,condition
hemoglobin a1c,lab
respiratory therapist,role

类别词汇是固定的。 KER依赖它。允许的值:

drug | procedure | anatomy | condition | lab | role

如果用户提出新类别,请推回:要么映射到六个类别之一,要么该类别需要有意扩展方法论(这是未来周期的工作,而不是一次性的临时添加)。

2b. 通过/data-designer生成句子

/data-designer简要说明:

对于term_seed.csv中的每一行,生成一个或多个自然的英语句子,将term嵌入到适合其entity_category的方式中。输出模式:{term, entity_category, sentence, context_type}。每个术语生成3-5个context_type变体。初始context_type词汇:dictationhandoffchart_notehistory。句子长度10-30个词。

此步骤的输出是每个术语的句子变体文件。任何文件名都可以——选择一个并在周期目录中一致使用。

模板回退。 如果/data-designer不可用,使用4模板回退(每种context_type一个)并机械替换term。在manifest中标记这些行(context_type已设置,句子只是不够自然),以便未来的周期可以重新生成。

2c. 两层IPA标记(关键质量杠杆)

每个术语按顺序通过3层流水线:

  1. 覆盖词表pronunciation_overrides.csv携带团队已审计的已验证IPA。如果term匹配此行,覆盖词表优先。
  2. Merriam-Webster — 对于未覆盖的术语,获取MW重拼写,转换为IPA,对Magpie的美式英语音素集进行验证。如果两者都成功,术语被标记为merriam-webster
  3. Magpie G2P(回退) — 如果覆盖词表和MW都没有产生有效的IPA,则在合成时将纯文本传给Magpie的神经G2P。该行被标记为magpie_g2p

每个manifest行都携带ipa_source标签(override | merriam-webster | magpie_g2p)。在第3阶段排行榜中merriam-webster行和magpie_g2p行之间的差异就是发音策略有效性的证明——当您生成排行榜时,明确指出这一点。

三种MW查询选择 — 全部标记为merriam-websterAdictionaryapi.com JSON API + DICTIONARY_API_KEY(在dictionaryapi.com免费获取)— 推荐用于独立使用。B:抓取merriam-webster.com的HTML — 无密钥,但易受站点HTML变化影响;配方内联在references/pronunciation-pipeline.md中。C:跳过MW,回退到Magpie G2P,长尾覆盖较弱。两个配方和完整的重拼写→IPA表位于references/pronunciation-pipeline.md中。路径A函数将api_key作为参数(从不读取os.environ);传递None跳过MW。

pronunciation_overrides.csv模式:

term,ipa,verified_by,verified_at,notes
cefazolin,sɛfəˈzoʊlɪn,brandoing,2026-05-13,根据MW重拼写+耳测确认

跨周期仅追加。之后重新运行构建会自动获取新条目。

2d. QA模式合成(不要跳过此门)

在运行完整笛卡尔积之前,使用第一个声音、干净噪声、默认上下文为每个术语合成一个wav。与用户试听每个剪辑。

对于每个标记为magpie_g2p的术语,使用临床后缀模式提出一个IPA候选,并在建议之前对Magpie的美式英语音素集进行验证:

后缀 重音模式(示例)
-mycin …ˈmaɪsɪn (vancomycin, gentamicin)
-prazole …ˈpreɪzoʊl (esomeprazole, omeprazole)
-statin …ˈstætɪn (atorvastatin, rosuvastatin)
-sartan …ˈsɑːrtən (losartan, valsartan)
-azole …ˈeɪzoʊl (fluconazole, ketoconazole)
-cillin …ˈsɪlɪn (amoxicillin, piperacillin)
-parin …ˈpɛərɪn (enoxaparin, heparin)

音素验证模式 — 用候选IPA实时探测Magpie的美式英语神经G2P。如果Magpie接受SSML,则该IPA在其库存中。使用上述后缀模式作为预过滤器(廉价启发式),并在提交覆盖词表之前使用实时探测确认。magpie_validates_ipa(ipa, api_key, voice_id)配方 — 一个最小的NVCF gRPC合成调用,返回True/False并安全失败 — 位于references/pronunciation-pipeline.md

在向用户展示之前,对每个候选IPA调用一次。若用户批准,将验证过的IPA追加到pronunciation_overrides.csv。该行的ipa_source在下一次manifest生成时从magpie_g2p翻转为override

在步骤2e之前的HITL试听门 — 安全失败。 在以下情况之一在对话中明确发生之前,不要合成完整笛卡尔积,不要将任何暂存IPA候选提升到pronunciation_overrides.csv,也不要前进到第3阶段:

  1. 用户确认已经试听了QA剪辑并报告他们对每个剪辑(或每个桶:“MW集听起来不错”、"修复pembrolizumab"等)的判断。提供afplay(macOS)或paplay/aplay(Linux)命令,以便用户可以播放它们 — 然后暂停并等待他们听完后回复。仅通过AskUserQuestion提示进行纸上批准 — 单击"全部提升"或"锁定"而没有试听 — 不满足此门。Magpie验证IPA证明它在音素库存中;但不证明它与预期的发音匹配。只有用户的耳朵才能做到这一点。
  2. 用户明确选择跳过本周期试听,使用深思熟虑的语言(例如*“跳过试听,接受发音错误可能稀释第3阶段KER信号的风险 — 将其记录为周期N的注意事项”*),而不是单击通过所产生的副作用。在周期级注释(如eval/cycle<N>/cycle_notes.md)中记录跳过,以便未来的操作员可以看到试听被推迟。

Magpie NVCF在>100行任务上积极速率限制,而重做既花费API积分和时钟时间 — 但更大的风险是发布一个带有错误发音参考音频的manifest,悄然损坏第3阶段KER信号。花在试听上的时间比重新运行周期更便宜。

2e. 完整基准生成

发音锁定后,生成完整笛卡尔积|terms| × |voices| × |noise_levels| × |context_types|。默认值:2-4个Magpie美式英语声音(Mia/Jason/Ray)、[clean, snr_15db, snr_5db][dictation, handoff, chart_note, history]

自包含合成 — 不需要/read-aloudsynthesize_row(row, all_overrides, out_dir, api_key)配方 — 打开NVCF gRPC流,通过render_sentence_with_overrides将覆盖词表包装成SSML,写入16位单声道PCM到<out_dir>/audio/<slug>.wav — 位于references/pronunciation-pipeline.md(§合成调用)。关键不变量:all_overrides携带pronunciation_overrides.csv中的每个条目(包括上下文词覆盖词表,如intravenously),以便渲染器包装其确切文本出现在row['text']中的任何覆盖词表。只包装row['term']会静默丢弃上下文词覆盖词表。

噪声注入(干净 → snr_15dbsnr_5db)和manifest模式(NeMo规范字段 + 临床扩展,加上预检模式和音频存在检查)都位于references/manifest-schema.md中。

当产品>100行时警告。 Magpie NVCF在大运行上以约5-10%的RESOURCE_EXHAUSTED下降速率限制。重新运行掉过的行。

第2阶段完成检查表

在所有五个子步骤运行之前,不要认为第2阶段完成。代理经常在2a或2b之后停止;目标是合成manifest加上交接:

  • 2aterm_seed.csv,4-10个术语,entity_category ∈ {drug, procedure, anatomy, condition, lab, role}
  • 2b — 每个术语3-5个context_type句子变体
  • 2c — 每个术语标记ipa_source ∈ {override, merriam-webster, magpie_g2p}
  • 2d — QA wav已试听,IPA覆盖词表在显式用户批准后锁定
  • 2emanifest.jsonl + 笛卡尔积的每行音频
  • 交接 — 命名/digital-health-clinical-asr-eval为下一个技能和KER作为其顶级指标

写入只进入用户选择的$EVAL_DIR/cycle<N>/。不要在其他地方写入、修改环境或安装包 — 这些属于/digital-health-clinical-asr-setup

示例

场景A — 全新肿瘤学基准。 用户:“我们看到化疗药物名称转录错误。我从哪里开始?” → 步骤2a:确认专科是肿瘤学,询问哪些药物(免疫疗法生物制剂、铂类、紫杉烷类)。提出约10个候选项:cisplatinpaclitaxelpembrolizumabnivolumabcarboplatindocetaxelbevacizumabtrastuzumabcetuximabpemetrexed。用所有entity_category=drug写入term_seed.csv。步骤2b:简要说明/data-designer为每个药物生成4个上下文变体共40个句子。步骤2c:对每个术语进行MW查询 — 像pembrolizumab这样的生物制剂可能回退到magpie_g2p;铂类药物很可能命中MW。步骤2d:为每个术语合成一个QA wav,带用户逐个查看pembrolizumab等剪辑,使用-mab后缀重音模式提出IPA候选。步骤2e:批准后,运行10个术语×2个声音×2个噪声级别×3个上下文=120行。

场景B — 追加到现有周期。 用户:“我有一个周期1的清单,想再添加5个手术。” → 只重新运行步骤2a(仅针对新术语的专科访谈)、2b(为新增术语生成句子)、2c(为新增术语做IPA流水线)、2d(试听新术语)和2e(只合成新术语行)。追加到现有manifest.jsonl不要为现有术语重新生成音频 — 周期隔离是有意为之,以便排行榜干净地比较周期N与周期N+1。

产生的工件

  • term_seed.csv — 具有entity_category的策划术语
  • pronunciation_overrides.csv — 已验证的IPA,可跨周期追加
  • manifest.jsonl — NeMo格式,带临床扩展字段(每行一个JSON对象)
  • audio/<slug>.wav — 合成的剪辑,每个manifest行一个

故障排除

  • **TTS速率限制下降(RESOURCE_EXHAUSTED)**在>100行生成时 → 在Magpie NVCF上符合预期。确认/read-aloud中指数退避已激活;预期在大运行上约5-10%的下降,并为间隙重新运行。
  • 所有ipa_source行标记为magpie_g2p → MW查询整体失败,或候选IPA未通过音素验证。重新验证您配置的MW路径(A用DICTIONARY_API_KEY;B用HTTPS可达性和解析器),然后对照Magpie的美式英语音素库存检查候选项。
  • 即使使用IPA覆盖词表,Magpie仍错误发音 → 首先验证IPA在Magpie美式英语音素库存中,并且SSML包装语法有效。如果两者都检查通过,底层TTS错误由/read-aloud/riva-tts)所有 — 将其路由到那里进行诊断。本技能提供覆盖词表机制,但不拥有神经G2P或SSML解析器。
  • 来自/data-designer的句子变体平淡/模板化 → 检查简要说明;仅模式提示有时会产生刻板输出。向简要说明中添加1-2个上下文示例并重新运行。
  • 音频文件存在但manifest.jsonl → manifest编写器跳过了其合成返回NVCF错误的行。仅使用缺失的行重新运行构建。

对于此列表之外的任何内容,识别涉及的上游技能并路由到那里。digital-health-clinical-asr-build技能拥有方法论,而不是TTS或DataDesigner内部。

限制

  • 默认仅英语。 两层IPA流水线针对Magpie的美式英语音素库存进行验证。其他语言环境需要不同的上游音素集和覆盖CSV格式。
  • 六个固定实体类别。 扩展entity_category是深思熟虑的方法论更改,而不是一次性调整 — KER分解、排行榜部分和下游微调脚本都依赖于词汇。
  • 初始周期很小。 在约20个术语以下,按ipa_source的排行榜拆分每个桶中没有足够的行来在统计上有意义。构建有意义的周期,即使花费一个会话。
  • Magpie NVCF速率限制。 在大任务上约5-10%下降;预算重跑通过。

下一步

  • 向前: /digital-health-clinical-asr-eval — 转录manifest,对WER/CER/KER/SER进行评分,生成五部分排行榜。
  • 返回设置(如果环境中有损坏):/digital-health-clinical-asr-setup
  • 横向用于TTS特定调试:/read-aloud/riva-tts

参考