信息速览
病理嗓音的判别,临床上站在设备那一侧:喉镜看得见声带,频闪喉镜看得见黏膜波,听感知评估量表把医生的耳朵变成可以打分的尺子。算法这一侧想要的却是另一件事——一段音频进、一个标签出的干净映射。这两件事长期各说各话:临床数据库有诊断却不公开,公开的语音语料有海量音频却没有临床结论。VOICED 病理性嗓音库的价值在于它把两端同时做到了,而且两端的质量落差极大——录音设备是一部 2014 年的三星 Galaxy S4,采样率只有 8000 Hz;而每一条录音背后都站着一次喉镜检查、一份按 SIFEL 规程作出的诊断、两份量表得分和一份生活习惯问卷。
它的规模小得毫不含糊:208 段录音,其中 150 例病理嗓音、58 例健康嗓音,每一段是受试者持续发出的元音 /a/,官方描述为五秒。全部素材来自同一个城市、两个采集点、十二个月的招募期。这个规模意味着它不可能充当深度学习的粮仓,但它能做一件大语料做不到的事:让"声学特征"与"临床结论"落在同一行数据里,从而检验前者到底能不能预测后者。
代价同样写在明面上。没有受试者编号,无法做严格的受试者级划分;没有多中心,只有那不勒斯;诊断是自由文本而非编码标签;问卷里大量字段用 NU 标记表示未填写。它不是一端完美的基准,是一份"临床与工程两头都够得着"的稀缺对照材料。一屏速览见下表。
| 维度 | 内容 |
|---|---|
| 全名 | VOICED Database(VOice ICar fEDerico II),版本 1.0.0 |
| 发布方 | PhysioNet;原始团队来自那不勒斯费德里科二世大学医院、ICAR-CNR、那不勒斯帕特诺普大学 |
| 创建者 | Ugo Cesari、Giuseppe De Pietro、Elio Marciano、Ciro Niri、Giovanna Sannino、Laura Verde |
| 首次发布 | 2018 年 6 月 7 日,版本 1.0.0 |
| 版本状态 | 仅 1.0.0 一个版本;数据文件日期 2018-06-22,RECORDS 2018-10-19,SHA256SUMS.txt 2019-02-20 |
| 记录数 | 208 条(voice001 至 voice208) |
| 受试者构成 | 150 例病理嗓音、58 例健康嗓音 |
| 年龄范围 | 18 至 70 岁,超出该区间者被排除 |
| 采集期 | 2016 年 5 月 16 日至 2017 年 5 月 15 日 |
| 采集地点 | 那不勒斯费德里科二世大学医院嗓音医学与视频喉镜门诊;ICAR-CNR 医疗室 |
| 采集设备 | Vox4Health 移动健康系统,安装于三星 Galaxy S4,Android 5.0.1 |
| 录音内容 | 持续元音 /a/ 发声,官方描述五秒,期间不中断 |
| 采样率与位深 | 8000 Hz,32 位;每条 38080 个采样点 |
| 文件格式 | WFDB(.hea 头文件 + .dat 二进制)与文本(.txt)双份;另附 -info.txt 元数据 |
| 元数据 | 年龄、性别、诊断、职业、吸烟、饮酒、饮水量、饮食习惯、VHI 与 RSI 两份量表得分 |
| 关联量表 | Voice Handicap Index(嗓音障碍指数)、Reflux Symptom Index(反流症状指数) |
| 整体体积 | 未压缩 110 MB;官方 ZIP 包 110.1 MB |
| 许可 | Open Data Commons Attribution License v1.0(ODC-BY 1.0),无需注册 |
| DOI | 版本 DOI 10.13026/C25Q2N;最新版本 DOI 10.13026/twfd-kb89 |
| 典型用途 | 病理嗓音与健康嗓音的二分类、声学特征与临床量表的相关性研究、移动设备采集条件下的鲁棒性评估、嗓音医学教学示例 |
§1 它要解决的具体麻烦
1.1 病理嗓音判别链条上的三道落差
嗓音障碍的评估在临床上有明确的分层。最底层是形态学证据:视频喉镜与频闪喉镜直接观察声带的闭合形态、黏膜波的对称性与振幅,这是判断声带小结、息肉、麻痹的直接依据。中间层是听感知评估:由受过训练的医师按 GRBAS 一类的量表对嗓音的粗糙程度、气息声、无力程度打分,主观但可复现。最上层是患者自评:嗓音障碍指数量表把"嗓音问题对我的生活造成多大困扰"变成三十道题的总分。三层各有各的用处,但只有最上面两层是数字。
声学分析想挤进这条链条,缺的正是素材。要证明"基频微扰、振幅微扰、谐噪比这组特征能区分病理与健康",就需要一批既有声学信号又有临床结论的样本;要证明"手机录的音频也够用",就需要这批样本真的来自手机。公开数据在这两处的供给长期是空的:语音识别语料有成千上万小时音频,但没有一句做过喉镜检查;临床嗓音数据库有诊断,但往往不公开,或者只公开到"病理组若干例、对照组若干例"的汇总层面。
VOICED 填的是这个空。它把 208 段音频与 208 份临床记录逐条对齐,而且刻意选择了最不利于算法的一侧:8 kHz 采样、手机麦克风、20 厘米距离、45 度角、普通房间。这个选择的含义很直接——在这个条件下做出来的特征如果还有判别力,那么更好的设备只会更好;反过来,如果一个模型只在 44.1 kHz 的录音棚素材上有效,用它做筛查是没有意义的。
1.2 三条常见的错误期待
第一条,把它当成"语音识别语料"。它的录音内容是持续元音 /a/,不是词、不是句、不是朗读段落。任何需要语言内容、音素序列、词边界的任务在这里都无从谈起,能做的只有声源与共振特性层面的分析。
第二条,把它当成"多中心大数据"。两个采集点在同一座城市,招募期十二个月,208 条一次性交付。它不能回答"跨中心泛化"这类问题,只能回答"在这个采集条件下,声学特征与临床结论的关系是否成立"。
第三条,把它当成"标签干净的二分类基准"。诊断字段是自由文本,同一类障碍可能写作不同字符串;健康组与病理组的划分来自临床验证而非编码标准;问卷字段里大量条目标记为 NU(未填写)。想直接拿它跑监督学习,先要自己定义标签口径,并且把口径写进论文。
1.3 它能给到的与给不到的
| 你的需求 | 它给的 | 够不够 |
|---|---|---|
| 病理嗓音与健康嗓音的二分类 | 150 例病理、58 例健康,均由医学专家临床验证 | 够做探索与对照,不足以支撑大模型的训练 |
| 声学特征与临床量表的相关性 | 每段录音配 VHI 与 RSI 两个量表得分 | 够,这是它最直接的用途 |
| 生活习惯作为协变量 | 吸烟、饮酒、咖啡、巧克力、碳酸饮料、柑橘、番茄、软质奶酪、每日饮水量 | 够做定性协变量,条目粒度为粗略分级而非精确计量 |
| 移动采集条件下的鲁棒性评估 | 全程由一部手机的内置麦克风采集,8 kHz、32 位 | 够,且是它的设计意图之一 |
| 持续元音的声源分析 | 无中断的持续 /a/ 发声,波形干净 | 够,适合基频、微扰、谐噪比一类特征 |
| 语音识别或说话人识别 | 无 | 不够,无语言内容、无说话人编号 |
| 跨中心或跨人群泛化 | 单一城市、单一团队、两个采集点 | 不够 |
| 纵向随访或疗效评估 | 每人一次采集,无复访 | 不够 |
| 严格意义的受试者级划分 | 无受试者编号,仅按记录编号排列 | 不够,见 §2.5 与 §7.3 |
| 声带病变的影像证据 | 无喉镜图像 | 不够,只有文本诊断 |
1.4 你的处境与它能帮到的事
| 你的处境 | 它能帮你什么 | 下一步该做什么 |
|---|---|---|
| 你在做嗓音障碍筛查,想找一个有临床结论的小样本验证集 | 208 段音频与临床诊断逐条对齐,病理组远多于对照组 | 先把诊断字段归并成可数的几类,再评估类内样本是否足够 |
| 你在评估"手机录音够不够用" | 全部素材均由同一部手机的同一套应用采集,条件统一 | 固定采集参数写进方法部分,把它当作下限条件而不是一般条件 |
| 你想研究量表得分能否由声学特征预测 | VHI 与 RSI 两个得分随附在元数据文件里 | 把量表当回归目标而非分类标签,注意两份量表的语义不同 |
| 你要做特征重要性对照实验 | 元数据里同时有客观诊断与主观量表,可做双目标对比 | 分别以诊断与量表为因变量,比较特征排序是否一致 |
| 你在教嗓音医学,需要可回放的示例 | 波形与临床信息同在,可直接演示"这个诊断听起来是这样" | 用 §5.3 的读取流程导出波形图,配 -info.txt 一起展示 |
| 你在做元分析,需要多个嗓音库的横向对照 | 它与萨尔布吕肯嗓音库、PC-GITA 等构成不同采集条件的对照 | 见 §6.3 的分工判据,注意各库语言与录音内容不同 |
| 你要一个能一次下完、能快速复现的库 | 110 MB,无需注册,含校验和文件 | 用 §5.2 的任一种方式下载,先校 SHA256SUMS.txt |
1.5 一句话判断
它不适合当"更大的训练集",而适合当"更诚实的检验场":在临床结论确定的前提下,用最普通的设备采集的音频,检验声学特征究竟能把病理嗓音认出多少。
1.6 不适合谁:四条边界
不适合拿来做规模训练。 208 条、每条约 4.76 秒,总音频时长不足二十分钟。任何需要数据量的建模思路在这里都会立刻撞墙,它只能承担验证与对照的角色。
不适合拿来做跨中心泛化研究。 两个采集点、一个团队、一座城市、十二个月招募。它能证明"在这个条件下成立",不能证明"在任何条件下都成立"。
不适合拿来做语言层面的任务。 录音内容是单一持续元音,没有词、没有句、没有对话,也没有说话人身份标识。
不适合拿来做纵向或疗效研究。 每位受试者只有一次采集记录,没有治疗前后对照,没有随访,没有结局变量。
§2 数据构成与规格
2.1 一条记录由四个文件组成
数据库采用 WFDB(Waveform Database)格式发布,同时提供一份纯文本的信号副本。每一条记录对应同名的四个文件,编号从 voice001 排到 voice208:
| 文件 | 体积(以 voice001 为例) | 内容 | 是否必需 |
|---|---|---|---|
voiceNNN.hea |
175 B | WFDB 头文件,声明采样率、信号条数、采样点数、增益与基线,末行附年龄、性别、诊断、用药 | 是,读 .dat 的前提 |
voiceNNN.dat |
148.8 KB | 二进制信号本体,32 位整数,38080 个采样点 | 是 |
voiceNNN.txt |
393.0 KB | 同一段信号的文本副本,每行一个采样点,六位小数 | 否,与 .dat 内容等价 |
voiceNNN-info.txt |
781 B | 制表符分隔的元数据,含人口学、职业、量表、生活习惯 | 否,但几乎人人都要用 |
四者的关系值得说清。.hea 与 .dat 是一对,按 WFDB 规范读取得到物理量;.txt 是同一段信号的另一种编码,给不想装 WFDB 工具链的人用;-info.txt 独立于信号之外,是这条记录的临床与生活方式档案。目录根下还有两个附属文件:RECORDS(1.8 KB,列出全部 208 条记录名)与 SHA256SUMS.txt(64.5 KB,全量文件的校验和)。
体积上有个可以直接验算的对应关系:.dat 的 148.8 KB 恰好等于 38080 个采样点乘以 4 字节,这与官方"32 位分辨率"的描述一致。如果哪天看到一个 .dat 体积对不上这个算式,那一定是下载不完整。
2.2 元数据字段的完整字典
-info.txt 是这份数据最厚的部分,也是它与一般语音语料拉开差距的地方。字段以制表符分隔,键与值之间是一个制表符加冒号的形式。下表按 voice001-info.txt 的实际内容逐条列出。
| 字段 | 取值形态 | 含义 | 使用注意 |
|---|---|---|---|
| ID | voice001 |
记录标识,与文件名前缀一致 | 唯一主键,与其余文件靠这个名字关联 |
| Age | 整数,如 32 |
受试者年龄 | 官方收录区间为 18 至 70 岁 |
| Gender | m / f |
性别,小写单字母 | 与 .hea 里的大写 M / F 大小写不同 |
| Diagnosis | 自由文本,如 hyperkinetic dysphonia |
临床诊断 | 需自行归并;healthy 表示健康对照 |
| Occupation status | 自由文本,如 Researcher、Teacher |
职业状态 | 用嗓负荷的代理变量,未编码 |
| Voice Handicap Index (VHI) Score | 整数,如 15 |
嗓音障碍指数量表总分 | 患者自评,与诊断独立 |
| Reflux Symptom Index (RSI) Score | 整数,如 5 |
反流症状指数量表总分 | 用于考察咽喉反流与嗓音的关系 |
| Smoker | yes / no |
是否吸烟 | 二值 |
| Number of cigarettes smoked per day | 整数或 NU |
每日吸烟支数 | 不吸烟者为 NU |
| Alcohol consumption | nondrinker / casual drinker 一类分级 |
饮酒习惯 | 分级而非精确量 |
| Number of glasses containing alcoholic beverage drinked in a day | 整数或 NU |
每日饮酒杯数 | 分级字段的下属数量,常为 NU |
| Amount of water’s litres drink every day | 如 1,5 |
每日饮水量(升) | 逗号作小数点,需转换 |
| Carbonated beverages | almost never / sometimes / almost always / always |
碳酸饮料摄入频率 | 四级序数 |
| Tomatoes | 同上四级 | 番茄摄入频率 | 与反流相关的饮食项 |
| Coffee | 同上四级 | 咖啡摄入频率 | 同上 |
| Number of cups of coffee drinked in a day | 整数或 NU |
每日咖啡杯数 | 与上一行成对出现 |
| Chocolate | 同上四级 | 巧克力摄入频率 | 同上 |
| Gramme of chocolate eaten in a day | 整数或 NU |
每日巧克力克数 | 常为 NU |
| Soft cheese | 同上四级 | 软质奶酪摄入频率 | 同上 |
| Gramme of soft cheese eaten in a day | 整数或 NU |
每日软质奶酪克数 | 常为 NU |
| Citrus fruits | 同上四级 | 柑橘类摄入频率 | 同上 |
| Number of citrus fruits eaten in a day | 整数或 NU |
每日柑橘个数 | 常为 NU |
这里有两个约定必须记住。第一,NU 表示此项未填写或不适用,不是缺失值插补后的结果,也不等于零——把 NU 当零读进模型会凭空造出一群"不喝咖啡的人"。第二,数值字段用逗号作小数点(如 1,5 升),直接按浮点数解析会失败。
2.3 一条记录的完整解剖
以 voice001 为例。头文件只有两行:
voice001 1 8000 38080
voice001.dat 32 4079702243.3775(-260023747)/NU 0 0 -260023747 14973 0 voice
#<age>: 32 <sex>: M <diagnoses>: hyperkinetic dysphonia <medications>: none
第一行是记录行:记录名 voice001、信号条数 1、采样率 8000、采样点数 38080。单通道这一点值得强调——它是单声道音频,不是多导联生理信号,不要按多导联库的习惯去索引第二个通道。
第二行是信号行。从左往右:信号存放在 voice001.dat;存储格式 32,即 32 位;增益字段写作 4079702243.3775(-260023747)/NU,增益值本身是 4079702243.3775,括号内 -260023747 是基线(ADC 零值),斜杠后的 NU 表示没有物理单位;随后是位分辨率与 ADC 零值两处的 0、首采样点 -260023747、校验和 14973、块大小 0,末字段 voice 是通道描述。
这一行需要提醒的地方是:增益值大到十亿量级、且物理单位标记为 NU,说明作者是把原始整数按一个固定系数归一化成无量纲值后再发布的,并不是常见的"微伏/毫伏/单位"换算关系。想复现物理值,最稳的做法是用 WFDB 工具链读 .hea 得到 p_signal,而不是自己拿增益硬算。这一点在 §5.5 的坑里还会再提一次。
第三行是注释行,给出临床上下文:32 岁男性,诊断为机能亢进性发声障碍(hyperkinetic dysphonia),未用药。注意它与 -info.txt 里的 Gender: m 大小写不同,与 Diagnosis 字段的文本是一致的。
2.4 文本格式信号是什么
voiceNNN.txt 是同一段信号的纯文本副本:每行一个采样点,六位小数,共 38080 行。它存在的意义是让没有 WFDB 工具链的人也能直接读波形——用任何语言的 open 加 float 就能拿全。
voice001 的取值落在 -0.462646 到 0.590118 之间,是无量纲的归一化幅度,与头文件里 NU 这个单位标记相互印证。这个副本不是另一种采集,也不是另一种预处理,它与 .dat 描述同一段信号;两者的差别只在于编码方式,以及 .txt 的精度被截断到小数点后六位。
体积上的代价很明显:文本副本 393.0 KB,二进制本体 148.8 KB,前者是后者的两倍多。全库 110 MB 里,文本副本占了大部分。如果只想做声学特征,只读 .dat 就够;想省事又不在乎体积,只读 .txt 也行。
2.5 命名规则与主键映射
记录名从 voice001 连续排到 voice208,无缺号,RECORDS 里正好 208 行。主键只有这一个,没有第二层标识。
这带来一个必须提前说清的边界:数据库不提供受试者编号。每条记录对应一次采集,但官方没有说明是否存在同一人多次采集的情况,也没有提供可用于分组的受试者标识。想按受试者划分训练集与测试集,在这里无从下手——能做的只有按记录划分,并在论文里把这一点写成局限。
另一个边界是顺序。编号是连续整数,但官方没有说明编号是按采集时间、按入组顺序还是按病理/健康分组排列的。抽样看到的几条记录里,病理与健康在编号序列中是交错出现的,因此不能假定前 150 条是病理、后 58 条是健康。标签只能从 .hea 的诊断字段或 -info.txt 的 Diagnosis 字段逐条读。
| 标识 | 存在与否 | 影响 |
|---|---|---|
| 记录编号 voice001–voice208 | 存在,连续无缺号 | 可作为主键与文件名前缀 |
| 受试者编号 | 不存在 | 无法做受试者级划分,数据泄漏风险无法排除 |
| 采集日期 | 元数据文件中未给出 | 无法按时间切分,也无法做时序分析 |
| 采集点标识 | 未逐条给出 | 无法区分两个采集点带来的系统性差异 |
| 采集设备编号 | 未逐条给出 | 官方统一描述为一部三星 Galaxy S4 |
2.6 与同类资源的字段差异
下表不比较具体数字,只比较字段层面的设计取向。VOICED 一列的每一项都能在官方页面或其文件里核对。
| 对比维度 | VOICED 的做法 | 语音语料的常见做法 | 由此产生的差别 |
|---|---|---|---|
| 录音内容 | 单一持续元音 /a/ | 朗读句、自发话语、词表 | 可做声源分析,不能做语言层任务 |
| 临床验证 | 由参与项目的医学专家逐例验证,按 SIFEL 规程诊断 | 通常无临床结论 | 标签可信但样本量受限 |
| 采集设备 | 一部手机的内置麦克风 | 专业麦克风与声学处理环境 | 更贴近筛查场景,噪声条件更真实 |
| 采样率与位深 | 8000 Hz、32 位 | 多为 16 kHz 以上、16 位 | 高频细节有限,基频与低阶共振峰足够 |
| 元数据 | 年龄、性别、诊断、职业、生活习惯、两份量表 | 多为年龄与性别 | 可做协变量分析,字段清洗成本高 |
| 信号副本 | WFDB 与文本双份 | 多为单一音频格式 | 免装工具链,体积翻倍 |
| 受试者标识 | 无 | 通常有说话人编号 | 无法按人划分 |
| 许可 | ODC-BY 1.0,无需注册 | 许可各异,部分需申请 | 可直接下载,必须署名 |
§3 它是谁的数据
3.1 六位创建者与五个机构
数据库由六人联合创建,官方页面在致谢部分给出完整名单与机构编号。
| 创建者 | 机构编号 | 机构 |
|---|---|---|
| Ugo Cesari | (1) | 那不勒斯费德里科二世大学医院(Policlinico)耳鼻喉科 |
| Giuseppe De Pietro | (2) | 意大利国家研究委员会高性能计算与网络研究所(ICAR-CNR) |
| Elio Marciano | (3) | 那不勒斯费德里科二世大学神经科学、生殖与口腔科学系听力学专业组 |
| Ciro Niri | (4) | 独立执业医师,听力学与嗓音医学专科 |
| Giovanna Sannino | (2) | 意大利国家研究委员会高性能计算与网络研究所(ICAR-CNR) |
| Laura Verde | (5) | 那不勒斯帕特诺普大学工程系 |
PhysioNet 页面署名的两位作者是 Laura Verde 与 Giovanna Sannino,前者来自帕特诺普大学工程系,后者来自 ICAR-CNR。这个组合本身就是这份数据的注脚:临床一侧由耳鼻喉科、听力学与嗓音医学专科构成,工程一侧由国家研究委员会的计算研究所与大学工程系构成。诊断按 SIFEL 规程作出——SIFEL 是意大利嗓音医学与言语治疗学会编制的临床规程,这一条决定了诊断字段的术语体系是意大利临床习惯,而不是 ICD 或 SNOMED 编码。
3.2 时间线
| 时间 | 事件 | 依据 |
|---|---|---|
| 2016-05-16 | 研究开始,受试者招募与采集启动 | 官方页面 Data Collection 段 |
| 2017-05-15 | 研究结束,采集期共十二个月 | 官方页面 Data Collection 段 |
| 2018-06-07 | 版本 1.0.0 在 PhysioNet 发布 | 官方页面版本信息 |
| 2018-06-22 | 各记录的数据文件写入日期 | 文件目录 Modified 列 |
| 2018-10-19 | RECORDS 文件更新 | 文件目录 Modified 列 |
| 2019-02-20 | SHA256SUMS.txt 更新 | 文件目录 Modified 列 |
| 2018 年 | 原始论文发表于 Computers & Electrical Engineering 第 68 卷 310–321 页 | 官方页面引用信息 |
时间线里有一个值得注意的细节:采集在 2017 年 5 月结束,数据文件在 2018 年 6 月写入并在同月发布,RECORDS 与校验和文件则在发布之后才补齐。这说明发布流程是分几步走的,但版本始终只有 1.0.0 一个——官方没有给出任何修订记录或扩版计划。
3.3 采集场景
采集在两个地点进行:那不勒斯费德里科二世大学医院的嗓音医学与视频喉镜门诊,以及 ICAR-CNR 的医疗室。前一个地点意味着喉镜检查、嗓音信号采集与问卷填写可以在同一次就诊里完成,诊断与录音之间的时间差接近于零;后一个地点是工程一侧的场所。
官方对声学环境给出了明确约束:房间安静,背景噪声低于 30 dB;湿度不低于 30% 至 40%,即要求房间"不太干燥"。这两条不是修饰语,而是方法部分必须复述的条件——背景噪声直接影响谐噪比一类特征,而湿度会影响黏膜振动特性。
采集姿态同样写得很具体:手机置于距患者约 20 厘米处、约 45 度角,由 Vox4Health 这一移动健康系统实时采集。受试者被要求以日常交谈时的恒定音强发声,且在正式录音前做过两到三次练习。练习这一条很关键——它压掉了"第一次发长音不适应"造成的假异常。
3.4 来源层次
| 层次 | 内容 | 可信度 |
|---|---|---|
| 第一层:官方页面 | 规模、采集期、设备、采样率、位深、许可、收录与排除标准 | 最高,逐条可在页面上核对 |
| 第二层:库内文件 | 头文件逐条信息、-info.txt 元数据、RECORDS、校验和 |
高,直接读取可得 |
| 第三层:原始论文 | 采集与预处理的具体实现、方法细节 | 中,本篇仅引用官方页面给出的题录,未读全文 |
| 未核验 | 各诊断类别的具体条数、量表得分的集中趋势、字段填写完整度 | 需全量下载后统计,本篇不写 |
§4 它最独特的东西
4.1 手机采集与临床验证的对接
嗓音数据公开库大致分两类。一类是工程侧采集的语料,规模大、格式统一、转录完整,但没有任何临床结论;另一类是临床侧积累的病例,诊断详细,但通常不公开,公开的部分也往往是汇总统计。VOICED 的独特之处不在于它有多大,而在于它同时满足了两个通常互斥的条件:采集端刻意平民化,验证端刻意专业化。
平民化的一面:一部 2014 年上市的手机、内置麦克风、8 kHz 采样、普通房间。这个配置比任何声学实验室都低,也比大多数筛查场景的真实条件更差。专业化的一面:诊断由参与项目的医学专家按 SIFEL 规程作出,健康组与病理组的划分经过临床验证,每人还填了两份量表。
这个组合回答的是一个具体问题:在最简陋的采集条件下,病理嗓音还能不能被认出来。答案若是肯定的,低成本筛查就有依据;若是否定的,那么所有基于高质量录音的漂亮结果都需要重新审视其适用条件。
4.2 差异化证据
| 维度 | VOICED 的做法 | 常见做法 | 差别带来的后果 |
|---|---|---|---|
| 临床结论的形式 | 每位受试者逐例临床验证,诊断写进头文件与元数据 | 语料无诊断,或仅分组汇总 | 可以做"声学特征—临床结论"的逐条对照 |
| 量表配套 | 同时给出 VHI 与 RSI 两个得分 | 多数量库无量表 | 可分别以客观诊断与主观感受为目标 |
| 生活因素 | 吸烟、饮酒、咖啡、饮水、六类饮食频率 | 极少有库记录 | 可做混杂因素分析,字段需清洗 |
| 采集设备统一性 | 全程一部手机、一套应用 | 常有多设备混合 | 设备带来的方差被压到最低 |
| 环境约束 | 背景噪声低于 30 dB、湿度高于 30%–40% | 多数不写 | 方法部分可复述,可复现性更好 |
| 信号发布形式 | WFDB 与文本双份 | 多为单一格式 | 上手更快,体积更大 |
4.3 两条记录的对照解剖
抽两条记录在文件层面做对照,能看清元数据与信号是怎么对齐的。
| 项 | voice001 | voice060 |
|---|---|---|
| 头文件记录行 | voice001 1 8000 38080 |
voice060 1 8000 38080 |
| 年龄 | 32 | 39 |
| 性别 | M(-info.txt 中写作 m) |
M(-info.txt 中写作 m) |
| 诊断 | hyperkinetic dysphonia(机能亢进性发声障碍) | healthy(健康对照) |
| 用药 | none | none |
| 职业 | Researcher(研究人员) | Researcher(研究人员) |
| VHI 得分 | 15 | 10 |
| RSI 得分 | 5 | 9 |
| 吸烟 | no(小写) | No(首字母大写) |
| 饮酒 | casual drinker(偶尔饮酒) | casual drinker(偶尔饮酒) |
| 每日饮水 | 1,5 升 | 1 升 |
| 咖啡 | almost always(几乎总是) | never(从不) |
| 番茄 | sometimes(有时) | never(从不) |
| 柑橘类 | sometimes(有时) | almost always(几乎总是) |
这一对照把 VOICED 的用法说清楚了:同一个采样规格下,一条是病理、一条是健康,差别不在信号格式上而在元数据上。想做任何监督学习,标签只能从诊断字段取;想做任何相关性分析,因变量可以是量表得分。信号侧是完全同构的,这既是它的好处(无需处理异质格式),也是它的局限(没有多通道信息可利用)。
对照里还藏着三条容易被忽略的信息。第一,健康组的 VHI 是 10、RSI 是 9,并不为零——量表得分不能当作诊断的替代,把"VHI 大于某个阈值"当作病理判据是错的。第二,同一字段的大小写在不同记录里不一致(voice001 写 no,voice060 写 No),按字面值分组会得到两组。第三,频率字段的实际取值不止四级,voice060 的番茄与咖啡写的是 never,而 voice001 的同类字段写作 almost never,枚举全集之前不要假定分级数目。
4.4 元数据的粒度
元数据分三类,粒度各不相同,混用会出问题。
第一类是确定值:年龄、性别、职业。职业是自由文本,常见的有 Teacher、Researcher 一类,可以粗分为"职业用嗓"与"非职业用嗓",但官方没有给出编码。
第二类是量表得分:VHI 与 RSI 都是整数总分,语义不同。VHI 衡量嗓音问题对生活质量的主观影响,RSI 衡量咽喉反流相关症状的严重程度。两者与诊断的关系不一样——一个人可以诊断明确但 VHI 很低(不影响生活),也可以诊断轻微但 VHI 很高(困扰很大)。把它们当成同一个"严重程度"的两个版本来用是错的。
第三类是生活习惯:吸烟与饮酒是分级或二值,饮食项采用"几乎从不/有时/几乎总是/总是"四级序数,下属的数量字段多为 NU。这一类是序数而非连续量,且填写完整度不一——"几乎总是喝咖啡"后面跟着"每日几杯"为 NU 的情况并不少见。把它当连续变量塞进回归,等于把序数当比值,结论不可靠。
4.5 收录与排除的边界
| 条件 | 内容 |
|---|---|
| 纳入年龄 | 18 至 70 岁的成年人 |
| 纳入能力 | 能够配合流程中要求的多个环节 |
| 排除年龄 | 18 岁以下、70 岁以上 |
| 排除疾病 | 声带病变(官方表述为 folds 类疾病)、上呼吸道感染、神经系统疾病 |
| 排除依据 | 由参与项目的医学专家判断 |
| 诊断依据 | SIFEL 规程(意大利嗓音医学与言语治疗学会编制) |
这组边界的含义要讲透。上呼吸道感染被排除,是因为感冒会临时改变声带黏膜的状态,让声学特征指向一个不存在的慢性病变;神经系统疾病被排除,是因为痉挛性发声障碍一类的神经源性嗓音问题与功能性发声障碍的声学表现不同,混在一起会稀释判别信号。这两条排除了"假阳性"的主要来源,代价是这个库无法回答"感染期嗓音与病理性嗓音如何区分"——这恰恰是筛查场景里最常遇到的问题。
年龄上限 70 岁则直接限定了外推范围。老年嗓音(presbyphonia)本来就是一类独立的声学表现,这个库里没有,任何把结论推广到老年人的做法都不受它支持。
§5 怎么拿到
5.1 目录结构
数据库是扁平的单层目录,没有子文件夹,全部文件平铺:
voiced/1.0.0/
├── RECORDS #-- 208 条记录名,每行一个
├── SHA256SUMS.txt #-- 全量文件的 SHA256 校验和
├── voice001-info.txt #-- 元数据(制表符分隔)
├── voice001.dat #-- 32 位整数信号本体
├── voice001.hea #-- WFDB 头文件
├── voice001.txt #-- 文本格式信号副本
├── voice002-info.txt
├── voice002.dat
├── voice002.hea
├── voice002.txt
│ ... #-- 每条约 543 KB,四条文件一组
├── voice208-info.txt
├── voice208.dat
├── voice208.hea
└── voice208.txt #-- 共 208 组加两个附属文件
没有任何清单文件把诊断或量表汇总成一张表——想建表就得遍历 208 份 -info.txt。官方也没有提供 CSV 版的元数据,这一层工作必须由使用者自己做(§5.4)。
5.2 批量下载
官方给出三种方式,全部无需注册,因为访问策略是"任何人只要遵守许可条款即可访问"。
#-- 方式一:wget 递归,适合放在服务器上跑
wget -r -N -c -np https://physionet.org/files/voiced/1.0.0/
#-- 方式二:AWS 命令行,走公开桶,速度快且可断点续传
aws s3 sync --no-sign-request s3://physionet-open/voiced/1.0.0/ DESTINATION
#-- 方式三:只取信号本体,跳过体积最大的文本副本
wget -r -N -c -np -A "*.hea,*.dat,*-info.txt,RECORDS,SHA256SUMS.txt" \
https://physionet.org/files/voiced/1.0.0/
第三种方式值得说明:文本副本占了全库体积的大部分,若只要声学特征,只取 .dat 加 .hea 就够,体积能降到很小的比例。下载完成后务必校验:
#-- 进入目录后核对校验和,防止中途断流造成的文件截断
cd voiced/1.0.0 && sha256sum -c SHA256SUMS.txt
5.3 流式读取
WFDB 工具链支持远程直读,不必先下载全库。
import wfdb
#-- 远程直读头文件与信号;pn_dir 指向 PhysioNet 上的库名
rec = wfdb.rdrecord('voice001', pn_dir='voiced')
print(rec.fs, rec.sig_len, rec.sig_name) #-- 8000 38080 ['voice']
print(rec.p_signal.shape) #-- (38080, 1) 已按头文件换算
print(float(rec.p_signal.min()), float(rec.p_signal.max()))
#-- 读头文件即可拿到临床上下文,不必下载 .dat
hdr = wfdb.rdheader('voice001', pn_dir='voiced')
print(hdr.comments) #-- ['<age>: 32 <sex>: M <diagnoses>: ...']
print(hdr.sig_len)
#-- 拿全部 208 条记录名
names = wfdb.get_record_list('voiced')
print(len(names), names[0], names[-1]) #-- 208 voice001 voice208
p_signal 是按头文件增益与基线换算后的物理量;若要原始 32 位整数,用 d_signal。注意 sig_name 是 voice,不是通用的通道名,这说明头文件里的通道描述字段写的是 recordings 的类型而非解剖位置。
5.4 元数据转表
官方没有提供汇总表,下面这段把 208 份 -info.txt 拼成一张表。
import re, glob, csv
FIELDS = ['Age', 'Gender', 'Diagnosis', 'Occupation status',
'Voice Handicap Index (VHI) Score',
'Reflux Symptom Index (RSI) Score',
'Smoker', 'Alcohol consumption']
def parse(path):
#-- 键与值之间是「制表符 + 冒号」,值可能含逗号小数点
d = {'ID': None}
for line in open(path, encoding='utf-8', errors='replace'):
line = line.rstrip('\r\n')
if '\t' not in line:
continue
k, v = line.split('\t', 1)
k = k.strip()
v = v.strip().lstrip(':').strip()
if k == 'ID':
d['ID'] = v
elif k in FIELDS:
d[k] = v
return d
rows = [parse(p) for p in sorted(glob.glob('*-info.txt'))]
with open('voiced_meta.csv', 'w', newline='', encoding='utf-8') as f:
w = csv.DictWriter(f, fieldnames=['ID'] + FIELDS)
w.writeheader()
for r in rows:
w.writerow(r)
print(len(rows))
两个细节决定了这段代码能不能跑通。其一是分隔符:键与值之间是制表符,而部分键后面还跟一个冒号(Age:\t32),也有写成 ID\tvoice001 不带冒号的,必须两种都处理。其二是 NU:它表示未填写或不适用,写进 CSV 时应保留原字符串,让下游自己决定是当缺失处理还是当分类处理,不要在上游替换成 0。
5.5 波形读取与特征
若只用文本副本,可以完全绕开 WFDB:
import numpy as np
#-- 文本副本:每行一个采样点,六位小数,共 38080 行
x = np.loadtxt('voice001.txt')
print(x.shape, x.min(), x.max()) #-- (38080,) -0.462646 0.590118
fs = 8000
print('时长(秒)', x.size / fs) #-- 约 4.76
#-- 去掉首尾可能的静音段后再提特征,避免起止处的瞬态
lo, hi = int(0.25 * fs), x.size - int(0.25 * fs)
seg = x[lo:hi]
print('幅度包络的最大最小值', seg.max(), seg.min())
这段代码给出的第一个数值得记住:38080 ÷ 8000 约等于 4.76 秒,而官方描述是"五秒"。这不是矛盾,而是官方描述取了整,取舍之间差约 0.24 秒。做固定长度切窗时按 38080 个点算,不要按 5 秒即 40000 个点算,否则会越界。
5.6 五个坑
| 坑 | 现象 | 后果 | 怎么办 |
|---|---|---|---|
| 增益写成十亿量级 | 头文件增益 4079702243.3775,单位 NU | 自己按增益硬算会得到极小值,与文本副本对不上 | 用 WFDB 读 p_signal,或直接用 .txt |
| NU 不是 0 | 数量字段大量出现 NU | 当零读入会凭空造出"完全不喝咖啡"的一类人 | 解析时保留字符串,建模时单列一类或置缺失 |
| 逗号作小数点 | 每日饮水写作 1,5 |
float() 直接抛异常 |
先做一次 replace(',', '.') |
| 大小写不一致 | .hea 写 M、-info.txt 写 m;吸烟字段 voice001 写 no、voice060 写 No |
按字面值分组会把同一取值拆成两类 | 全部字段统一转小写再分组 |
| 长度按 5 秒算 | 实际采样点 38080,约 4.76 秒 | 切窗越界或末尾补零 | 一切以 38080 为准 |
§6 与库内条目的关系
6.1 关系图谱
站内已有多个嗓音与语音方向的 AI-Ready 数据集,VOICED 在其中的位置由"临床验证 + 移动采集 + 持续元音"这三个属性共同决定。
| 相关数据集 | 与 VOICED 的关系 | 分工 |
|---|---|---|
| saarbrucken-voice-db | 同为病理嗓音库,同时提供声学信号与电声门图 | 需要 EGG 通道时选它,需要量表与生活因素时选 VOICED |
| pc-gita | 同为临床采集的病理嗓音库,语言为西班牙语 | 需要更大样本的帕金森嗓音研究时选它 |
| parkinsons-voice-uci | 同为持续元音的小样本嗓音数据 | 做特征层面快速验证时可用它作对照 |
| mdvr-kcl | 同样采用手机采集 | 需要多次采集与随访结构时选它 |
| b2ai-voice-pediatric | 同为有临床背景的嗓音生物标志物数据,人群为儿科 | 需要儿童人群时选它,VOICED 仅覆盖 18 至 70 岁 |
| bagls-vf | 同为声带相关,但提供喉镜图像的像素级分割 | 需要形态学影像证据时选它,VOICED 只有文本诊断 |
| girafe | 同为声带评估,但为高速视频内镜 | 需要振动层面的影像时选它 |
| torgo | 同为病理嗓音,但含构音轨迹 | 需要发音器官运动信息时选它 |
| ua-speech | 同为病理语音,但为词表朗读 | 需要语言内容时选它 |
| bridge2ai-voice | 同为临床语音生物标志物方向的大规模数据 | 需要规模化训练时选它,用 VOICED 做外部对照 |
6.2 检索路径
- 先按"有没有临床诊断"切一刀:有诊断的库数量很少,VOICED 在其中,这是它最主要的检索入口。
- 再按"录音内容"切:持续元音/朗读词表/自发话语三者互不通用,做声源分析只能进持续元音这一支。
- 再按"采集设备"切:手机采集与专业设备采集的结论不能互换,VOICED 属于手机这一支的早期代表。
- 最后按"元数据厚度"切:需要量表与生活因素做协变量时,VOICED 是少数可选之一。
6.3 分工判据
| 你要做的事 | 选谁 | 为什么不选 VOICED |
|---|---|---|
| 大规模训练嗓音障碍筛查模型 | bridge2ai-voice | 208 条太少 |
| 声学特征与主观量表的关系 | VOICED | 少数同时给 VHI 与 RSI 的库 |
| 需要电声门图通道 | saarbrucken-voice-db | VOICED 只有单通道声学信号 |
| 需要声带形态的影像证据 | bagls-vf 或 girafe | VOICED 无图像 |
| 需要语言内容与词边界 | ua-speech | VOICED 只有持续元音 |
| 需要儿科人群 | b2ai-voice-pediatric | VOICED 的年龄下限是 18 岁 |
| 需要随访与多次采集 | mdvr-kcl | VOICED 每人一次 |
| 需要移动采集条件下的对照 | VOICED | 采集条件统一且官方写明,可复述 |
§7 质量评估与局限性
7.0 一处必须前置的长度校正
官方页面的数据描述段写"五秒",而头文件给出的采样点数是 38080。按 8000 Hz 折算,38080 ÷ 8000 约等于 4.76 秒。两者相差约 0.24 秒。
这个差不是错误,但它会进到代码里:按"五秒"设定窗口长度、期望 40000 个采样点的人,会在切片时越界或在末尾补出一截零。所有涉及长度的计算都应以头文件的 38080 为准。这一条在 §5.5 与附录 A 里各出现一次,是因为它是最容易静默出错的地方——不会报错,只会让特征悄悄偏掉。
7.1 五维评分
| 维度 | 评价 | 理由 |
|---|---|---|
| 临床可信度 | 高 | 健康与病理均由参与项目的医学专家逐例验证,诊断按 SIFEL 规程作出 |
| 采集条件的可复述性 | 高 | 设备型号、系统版本、距离、角度、背景噪声、湿度、发声要求、练习次数全部写明 |
| 元数据厚度 | 中高 | 有人口学、职业、两份量表与六类生活因素;但无受试者编号、无采集日期 |
| 规模 | 低 | 208 条、每条约 4.76 秒,总时长不足二十分钟 |
| 标签可用性 | 中 | 诊断是自由文本,需自行归并;健康与病理的划分是二值的,细分类别样本量有限 |
7.2 标注的两层结构
这份数据有两层"标签",语义完全不同,混用是最常见的分析错误。
第一层是临床诊断,由医师作出,写进 .hea 注释行与 -info.txt 的 Diagnosis 字段。它是客观侧的结论,回答"这个人有没有嗓音疾病、是哪一类"。这一层是二分类任务唯一的可用标签来源,而且"健康"一类写作 healthy,可以直接识别。
第二层是量表得分,由受试者自填,写进 -info.txt 的 VHI 与 RSI 字段。它是主观侧的结论,回答"嗓音问题对这个人的生活影响有多大"与"反流症状有多重"。这一层与诊断不是同一维度的东西——诊断明确的人可以量表得分很低,反之亦然。
正确用法是把两层分开:要分类就用诊断,要回归就用量表,不要拿量表阈值去反推诊断标签,也不要把量表当成诊断的置信度。
7.3 可枚举的偏差
| 偏差来源 | 具体表现 | 影响 |
|---|---|---|
| 年龄区间偏差 | 仅纳入 18 至 70 岁 | 老年嗓音与儿童嗓音均不在覆盖范围内 |
| 疾病谱偏差 | 排除声带病变、上呼吸道感染、神经系统疾病 | 无法评估感染期与神经源性嗓音的判别 |
| 地域偏差 | 单一城市、两个采集点 | 语言、方言、环境与就诊习惯单一 |
| 设备偏差 | 全程一部手机、一套应用 | 结论与这一型号的特性绑定,换设备需重新验证 |
| 分组偏差 | 病理 150 例、健康 58 例,比例悬殊 | 二分类需处理类别不平衡 |
| 划分偏差 | 无受试者编号 | 无法排除同一人多次入组造成的泄漏 |
| 字段偏差 | 数量字段大量为 NU | 生活因素只能作粗略协变量,不能作精确计量 |
| 内容偏差 | 只有持续元音 /a/ | 结论不能外推到连续言语 |
7.4 外部验证的位置
VOICED 适合充当外部验证集,而且它作为外部验证集的价值高于作为训练集的价值。原因是它的采集条件与多数嗓音库不同——8 kHz、手机麦克风、意大利语人群、持续元音。在一个条件优越的库上训练出的模型,拿到这里来测,掉多少分就是"条件落差"的直接度量。
反过来的用法也成立:把它当作训练数据的一部分,检验模型在混入低质量采集后是否更鲁棒。但它只有 208 条,作为训练集的一部分只能占很小权重,指望它单独撑起训练是不现实的。
官方页面给出的项目浏览量为 422 次(当前版本与全部版本均为 422)。这个数字只说明它被浏览过多少次,不能说明引用量或使用深度,也不该被当作质量指标来引用。
7.5 它为什么还在被使用
一个 2018 年发布、只有 208 条、采样率只有 8 kHz 的库之所以没有被后来的大规模语料淹没,原因有三条。第一,它同时具备临床诊断与主观量表,这个组合至今稀缺。第二,它的采集条件写得极其具体,方法部分可以直接复述,这在可复现性上是加分项。第三,它是移动采集方向的早期公开素材,"手机录音够不够用"这个问题今天仍然没有被标准答案覆盖。
它的问题也同样稳定:没有受试者编号、诊断是自由文本、规模小。这些不会因为时间推移而改善,因为官方没有给出任何扩版或修订计划,版本始终停在 1.0.0。
§8 生态位与历史
8.1 沿革
| 阶段 | 时间 | 内容 |
|---|---|---|
| 临床积累期 | 2016 年 5 月起 | 费德里科二世大学医院嗓音医学门诊开展受试者招募、喉镜检查与录音 |
| 工程介入期 | 同期 | ICAR-CNR 承担信号采集系统(Vox4Health)与数据整理 |
| 采集收尾 | 2017 年 5 月 15 日 | 十二个月招募期结束 |
| 成果发表 | 2018 年 | 原始论文发表于 Computers & Electrical Engineering 第 68 卷 310–321 页 |
| 公开发布 | 2018 年 6 月 7 日 | 版本 1.0.0 上线 PhysioNet |
| 后续 | 2018 年 10 月、2019 年 2 月 | 补齐 RECORDS 与校验和文件,此后无新版本 |
8.2 与原始论文的关系
官方页面要求使用这份数据时引用原始出版物:U. Cesari、G. De Pietro、E. Marciano、C. Niri、G. Sannino、L. Verde,《A new database of healthy and pathological voices》,Computers & Electrical Engineering 第 68 卷 310–321 页,2018 年,DOI 10.1016/j.compeleceng.2018.04.008。
论文与数据是同一次工作的两个产物,六位作者与数据创建者名单完全一致。这意味着论文里描述的采集流程就是这份数据的采集流程,官方页面的 Data Collection 段可以视为论文方法部分的浓缩。本篇只引用了官方页面给出的题录信息,未读全文,凡是需要引用论文内部具体方法参数的地方,请回到原文核对。
它与挑战赛没有官方关联——PhysioNet 上的挑战赛页面里没有以它为素材的赛题。它是一条独立的、为同行提供对照素材的数据发布。
8.3 生态位
| 生态位 | 占据情况 | 说明 |
|---|---|---|
| 临床验证的病理嗓音声学数据 | 占据,且是较早的一批 | 有诊断、有量表、有专家验证 |
| 移动设备采集的嗓音数据 | 占据,条件写得最具体 | 设备、距离、角度、噪声、湿度全部公开 |
| 持续元音的单任务素材 | 占据 | 只做声源分析,不做语言层 |
| 大规模嗓音筛查训练集 | 未占据,也不打算占据 | 208 条不支撑规模训练 |
| 多中心嗓音数据 | 未占据 | 单一城市两个点 |
| 影像与信号配对 | 未占据 | 无喉镜图像 |
8.4 谁在用
从数据属性推断,使用它的大致有三类人。第一类是嗓音医学与言语治疗方向的研究者,关注声学特征与临床结论、主观量表之间的关系,这类用法直接对应它最厚的元数据。第二类是语音与声学算法工程师,把它当作低采样率、手机采集条件下的鲁棒性测试床。第三类是教学用途,208 条短录音配临床信息,适合做"听—看—判"的课堂示例。
以上是按数据属性的推断,不是使用统计。官方页面没有给出引用列表或用户构成,平台给出的 422 次项目浏览量也只能反映浏览行为。谁在用它、用得怎么样,需要有引用数据的外部来源才能回答,本篇不做断言。
§9 使用指引
9.1 三种角色的路径
| 角色 | 最短路径 | 要避开什么 |
|---|---|---|
| 嗓音医学研究者 | 下载 -info.txt 与 .hea,建元数据表,以诊断或量表为因变量 |
不要把量表当诊断,不要把 NU 当零 |
| 算法工程师 | 下载 .dat 与 .hea,用 WFDB 读物理量,按 38080 点定长切窗 |
不要按 40000 点切窗,不要自己硬算增益 |
| 教学人员 | 下载 .txt 文本副本,直接用任何语言读数组并绘图 |
不要假设编号顺序对应病理与健康分组 |
| 做元分析的人 | 先确定各库的录音内容与采集条件是否可比,再决定纳入 | 不要把持续元音与朗读语料的结果直接合并 |
9.2 最短流程
#-- 第一步:只取需要的三类文件,跳过体积最大的文本副本
wget -r -N -c -np -A "*.hea,*-info.txt,RECORDS,SHA256SUMS.txt" \
https://physionet.org/files/voiced/1.0.0/
#-- 第二步:校验完整性
cd voiced/1.0.0 && sha256sum -c SHA256SUMS.txt
import wfdb, glob, csv
#-- 第三步:确认规模与规格
names = wfdb.get_record_list('voiced') #-- 208 条
rec = wfdb.rdrecord('voice001', pn_dir='voiced')
print(rec.fs, rec.sig_len) #-- 8000 38080
#-- 第四步:建标签表(诊断取自头文件注释行)
rows = []
for n in names:
h = wfdb.rdheader(n, pn_dir='voiced')
txt = ' '.join(h.comments)
rows.append({'id': n, 'comments': txt})
with open('labels.csv', 'w', newline='', encoding='utf-8') as f:
w = csv.DictWriter(f, fieldnames=['id', 'comments'])
w.writeheader(); w.writerows(rows)
print(len(rows))
四步走完就能拿到"208 条记录 + 各自的临床上下文",后续是解析诊断字段与归并类别,这部分没有标准答案,取决于研究问题。
9.3 引用方式
| 引用对象 | 写法 |
|---|---|
| 数据集 | VOICED Database v1.0.0,PhysioNet,2018 年 6 月 7 日发布 |
| 版本 DOI | 10.13026/C25Q2N(指向 1.0.0) |
| 最新版本 DOI | 10.13026/twfd-kb89 |
| 原始论文 | Cesari U, De Pietro G, Marciano E, Niri C, Sannino G, Verde L. A new database of healthy and pathological voices. Computers & Electrical Engineering, vol. 68, pp. 310–321, 2018. DOI 10.1016/j.compeleceng.2018.04.008 |
| 平台 | PhysioNet 平台综述论文(2026 年发表于 Nature Health),按官方页面 Cite 按钮生成 |
| 许可 | Open Data Commons Attribution License v1.0,使用时须署名 |
论文里建议同时写明:使用的版本号(1.0.0)、是否使用文本副本而非二进制本体、标签口径如何归并、以及因缺少受试者编号而采取的划分方式。
§10 AI 使用声明
| 项目 | 声明 |
|---|---|
| 文本生成 | 本文由 AI 辅助撰写,编辑把关结构与事实 |
| 数字来源 | 规模、结构、边界三类数字来自 PhysioNet 官方页面与文件目录 |
| 文件核验 | RECORDS、voice001.hea、voice001-info.txt、voice001.txt、voice060.hea、voice150-info.txt、voice208.hea 经直接访问确认 |
| 不一致说明 | 官方描述"五秒"与头文件 38080 采样点(约 4.76 秒)存在约 0.24 秒的差,已在 §7.0 说明 |
| 论文信息 | 仅使用官方页面给出的题录,未读全文 |
| 未核验内容 | 各诊断类别的具体条数、量表得分的集中趋势、字段填写完整度、是否存在同一人多次入组 |
| 图像 | 无配图;封面为生成式提示词,不含真实波形 |
| 免责 | 本文不构成临床建议;数据使用须遵守 ODC-BY 1.0 的署名要求 |
常见误读(避坑清单)
| 说法 | 实际 | 证据 |
|---|---|---|
| 「它有 207 条记录」 | 208 条,wc -l 少算是因为末行无换行 |
RECORDS 按空白切分得 208 个记录名,末条为 voice208 |
| 「每段是五秒,采样点 40000」 | 38080 个采样点,约 4.76 秒 | 头文件第一行第 4 个字段 |
| 「它是 16 位的音频」 | 32 位 | 头文件信号行格式字段为 32;.dat 148.8 KB 等于 38080 乘 4 字节 |
| 「它是多通道生理信号」 | 单通道 | 头文件记录行第 2 个字段为 1 |
| 「前 150 条是病理,后 58 条是健康」 | 编号顺序与分组无关,两类交错出现 | 需逐条读诊断字段 |
| 「诊断是标准编码」 | 自由文本,按 SIFEL 规程给出 | -info.txt 的 Diagnosis 字段 |
| 「没有写数量的字段就是零」 | NU 表示未填写或不适用 | 元数据文件里的 NU 约定 |
| 「VHI 就是严重程度」 | VHI 是主观生活影响,与诊断不是同一维度 | 官方同时给出客观诊断与两份量表 |
| 「它有喉镜图像可以配合看」 | 无图像,只有文本诊断 | 文件目录里只有 .hea/.dat/.txt/-info.txt 四类 |
| 「可以按受试者划分数据集」 | 无受试者编号 | 元数据字段里没有受试者标识 |
| 「它能代表各年龄段」 | 仅 18 至 70 岁 | 官方 Data Collection 段的纳入与排除标准 |
| 「采样率 8 kHz 就做不了共振峰分析」 | 8 kHz 上限 4 kHz,基频与低阶共振峰仍在范围内 | 官方页面给出的采样率 |
FAQ
Q1:VOICED 一共有多少条录音?
208 条,编号从 voice001 到 voice208,无缺号。如果有人说是 207 条,多半是用 wc -l 数 RECORDS 得到的,该文件最后一行没有换行符,行计数会漏掉最后一条。按空白切分或逐行读到文件尾就不会出错。
Q2:为什么每条只有约 4.76 秒而不是官方说的五秒?
头文件给出的采样点数是 38080,采样率 8000 Hz,相除约 4.76 秒。官方描述取了整。两者不矛盾,但代码里必须以 38080 为准,按 40000 个点切窗会越界或在末尾补零,而且不会报错。
Q3:它能直接用来训练嗓音障碍二分类模型吗?
能跑,但只能做探索性实验,不能指望性能。208 条里 150 例病理、58 例健康,类别比例悬殊;诊断是自由文本,需要先归并;而且没有受试者编号,无法排除同一人多次入组带来的泄漏。把它当作外部验证集比作训练集更合适。
Q4:VHI 和 RSI 有什么区别?能互相替代吗?
不能。嗓音障碍指数衡量嗓音问题对患者生活质量的主观影响,反流症状指数衡量咽喉反流相关症状的严重程度。两者与临床诊断都不在同一维度上:诊断明确的人可能 VHI 很低,诊断轻微的人可能 VHI 很高。做分类用诊断,做回归用量表,不要拿量表阈值反推诊断标签。
Q5:元数据里的 NU 是什么意思?
未填写或不适用。它不等于零,也不是插补后的结果。在 voice001 里,"是否吸烟"为 no,其后"每日吸烟支数"就是 NU。建模时应保留为独立的一类或按缺失处理,直接当零会把一批人错误地归入"完全不摄入"的极端类别。
Q6:为什么采样率只有 8 kHz?这会不会限制分析?
这是设计选择,不是缺陷。采集用的是手机内置麦克风与移动健康应用,8 kHz 是这一链路下的取值。它把可分析的上限频率定在 4 kHz,基频、微扰、谐噪比与低阶共振峰都在这个范围内;需要高阶共振峰或高频噪声细节的研究不适合用它。
Q7:它有配套的图像或电声门图吗?
没有。文件目录里只有四类文件:头文件、二进制信号、文本副本、元数据。诊断由喉镜检查得出,但图像不公开。需要形态学影像证据的研究应转向声门分割或高速视频内镜方向的库。
Q8:两个采集点的数据能分开吗?
不能。官方说明采集在费德里科二世大学医院的嗓音医学与视频喉镜门诊、以及 ICAR-CNR 的医疗室两处进行,但没有逐条标注某条来自哪个点。因此无法评估采集点带来的系统性差异,只能把它当作一个整体的采集条件。
Q9:它的许可允许商业使用吗?
ODC-BY 1.0 允许,包括商业用途,条件是署名。引用时应写清数据集名称、版本号与来源,具体条款以官方许可全文为准。下载无需注册或签署协议,但访问即视为接受许可条款。
Q10:官方会扩充这个库吗?
官方没有给出任何扩版或修订计划。自 2018 年 6 月 7 日发布版本 1.0.0 以来,版本始终只有这一个,后续只补过 RECORDS 与校验和文件。从数据来源看,临床验证加量表填写的采集成本很高,长期扩版的动力有限。
Q11:它和 Bridge2AI-Voice 一类的大规模语音数据怎么选?
看规模需求。需要训练大模型就选大规模语料;需要"临床诊断 + 主观量表 + 移动采集"三者齐备的对照材料就选 VOICED。两者不冲突,常见做法是在大数据上训练、拿它做外部条件落差的检验。
Q12:文本副本和二进制信号会有数值差异吗?
描述的是同一段信号,差别只在于编码与精度:文本副本保留六位小数,二进制本体保留 32 位整数。前者的精度被截断,但对绝大多数声学特征没有实质影响。体积上文本副本约为二进制本体的两倍多。
术语表
| 术语 | 解释 |
|---|---|
| 持续元音 | 以恒定音强长时间发出单一元音,是嗓音声学分析的标准素材 |
| 机能亢进性发声障碍 | 发声时喉部肌肉过度紧张导致的一类嗓音障碍,数据里写作 hyperkinetic dysphonia |
| 机能减退性发声障碍 | 与上一类相反,声带闭合不足、音色虚弱 |
| 反流性喉炎 | 胃内容物反流刺激喉部黏膜引起的炎症,数据里写作 reflux laryngitis |
| 嗓音障碍指数(VHI) | 患者自评量表,衡量嗓音问题对生活、工作与社交的影响 |
| 反流症状指数(RSI) | 患者自评量表,衡量咽喉反流相关症状的严重程度 |
| SIFEL 规程 | 意大利嗓音医学与言语治疗学会编制的临床规程,本库诊断的依据 |
| 视频喉镜 | 带摄像的喉镜检查,用于观察声带形态与运动 |
| WFDB | PhysioNet 使用的波形数据库格式,含头文件、信号与注释三类文件 |
.hea |
纯文本头文件,声明采样率、信号条数、采样点数、增益与基线 |
.dat |
二进制信号文件,本库为 32 位整数 |
| 增益 | 把整数采样值换算为物理量时使用的比例系数 |
| 基线 | 零电平对应的整数值,即头文件增益字段括号内的数 |
| NU | 元数据中"未填写或不适用"的标记,不等于零 |
| mHealth | 移动健康,指以手机等移动设备承担健康数据采集的模式 |
| Vox4Health | 本库使用的移动健康采集系统,运行于安卓手机 |
| 背景噪声 | 采集环境中的非目标声音,本库要求低于 30 dB |
| 八千赫兹采样 | 上限频率为 4 kHz,覆盖基频与低阶共振峰 |
| ODC-BY | 开放数据共享署名许可,允许商业使用但要求署名 |
| 受试者级划分 | 同一受试者的全部记录只进训练或只进测试,本库因缺少标识而无法做到 |
附录 A:核心数字核对表
| 项 | 值 | 来源 | 来源层级 |
|---|---|---|---|
| 记录数 | 208 | 官方页面;RECORDS 按空白切分 | 官方页面 |
| 病理嗓音 | 150 | 官方页面摘要 | 官方页面 |
| 健康嗓音 | 58 | 官方页面摘要 | 官方页面 |
| 年龄范围 | 18 至 70 岁 | 官方页面 Data Collection 段 | 官方页面 |
| 采集期 | 2016-05-16 至 2017-05-15 | 官方页面 Data Collection 段 | 官方页面 |
| 采样率 | 8000 Hz | 官方页面;voice001.hea 记录行 | 官方页面 |
| 位分辨率 | 32 位 | 官方页面;voice001.hea 信号行格式字段 | 官方页面 |
| 每条采样点数 | 38080 | voice001.hea 记录行 | 官方文件 |
| 折算时长 | 约 4.76 秒 | 38080 除以 8000 | 由官方文件折算 |
| 信号条数 | 1 | voice001.hea 记录行第 2 字段 | 官方文件 |
| 录音内容 | 持续元音 /a/,官方描述五秒且不中断 | 官方页面 Data Description 段 | 官方页面 |
| 采集设备 | Vox4Health,三星 Galaxy S4,Android 5.0.1 | 官方页面 Data Collection 段 | 官方页面 |
| 采集距离与角度 | 约 20 厘米、约 45 度 | 官方页面 Data Collection 段 | 官方页面 |
| 环境约束 | 背景噪声低于 30 dB,湿度高于 30%–40% | 官方页面 Data Description 段 | 官方页面 |
| 采集地点 | 费德里科二世大学医院嗓音医学与视频喉镜门诊;ICAR-CNR 医疗室 | 官方页面 Data Collection 段 | 官方页面 |
| 文件格式 | WFDB 与文本双份,另附元数据文本文件 | 官方页面 Data Description 段 | 官方页面 |
| 单条体积 | .dat 148.8 KB,.txt 393.0 KB,.hea 175 B |
文件目录 Size 列(voice001) | 官方文件 |
| 全库体积 | 未压缩 110 MB;ZIP 110.1 MB | 官方页面 Files 段 | 官方页面 |
| 许可 | Open Data Commons Attribution License v1.0 | 官方页面 License 段 | 官方页面 |
| 版本 DOI | 10.13026/C25Q2N | 官方页面 Discovery 段 | 官方页面 |
| 最新版本 DOI | 10.13026/twfd-kb89 | 官方页面 Discovery 段 | 官方页面 |
| 发布日期 | 2018-06-07 | 官方页面版本信息 | 官方页面 |
| RECORDS 日期 | 2018-10-19 | 文件目录 Modified 列 | 官方文件 |
| 校验和文件日期 | 2019-02-20 | 文件目录 Modified 列 | 官方文件 |
| 项目浏览量 | 422(当前版本与全部版本同值) | 官方页面 Project Views | 官方页面 |
| 随附量表 | VHI 与 RSI | 官方页面摘要 | 官方页面 |
附录 B:数字的来源分层
第一层:官方页面。 记录数、病理与健康构成、年龄范围、采集期、采集设备、距离与角度、环境约束、采样率与位深、录音内容、文件格式、许可、DOI、发布日期、项目浏览量。这些数字直接来自项目主页的摘要、Data Collection 段、Data Description 段与 Files 段。
第二层:库内文件。 每条采样点数 38080、信号条数 1、头文件增益与基线的写法、单条各类文件的体积、元数据字段清单与 NU 约定、文件修改日期。这些来自对 RECORDS、voice001.hea、voice001-info.txt、voice001.txt 等文件的直接访问。
第三层:由官方数值折算。 约 4.76 秒这一项由 38080 除以 8000 得到,不是官方直接给出的数字,官方描述为"五秒"。此类折算在正文中已显式标注。
未核实。 各诊断类别的具体条数、量表得分的集中趋势、字段填写完整度、是否存在同一人多次入组、两条记录之间编号顺序与分组的关系。这些需要全量下载后统计,本篇按要求只写规模、结构、边界三类数字,不做任何自行统计的分布性描述。
附录 C:完整参考文献
| 编号 | 文献 | 链接 | 用途 |
|---|---|---|---|
| 1 | VOICED Database v1.0.0 | https://physionet.org/content/voiced/1.0.0/ | 全部规模、结构、边界数据的来源 |
| 2 | 该库的 PhysioNet 文件目录 | https://physionet.org/files/voiced/1.0.0/ | RECORDS、头文件、元数据文件、文本副本 |
| 3 | Cesari 等,《A new database of healthy and pathological voices》 | https://doi.org/10.1016/j.compeleceng.2018.04.008 | 引用要求与方法出处(仅取题录) |
| 4 | PhysioNet 平台综述(2026,Nature Health) | https://doi.org/10.1038/s44360-026-00096-z | 托管模式与引用规范 |
| 5 | ODC-BY 1.0 许可全文 | https://opendatacommons.org/licenses/by/1-0/ | §9.3 与 FAQ 第 9 问的许可依据 |
| 6 | 萨尔布吕肯嗓音库(站内对照) | https://www.qianfanghub.com/ai-ready-dataset/saarbrucken-voice-db/452 | §2.6 与 §6.1 的对照 |
| 7 | BAGLS-VF 声门分割(站内对照) | https://www.qianfanghub.com/ai-ready-dataset/bagls-vf/913 | §4.5 与 §6.3 的影像对照 |
| 8 | Bridge2AI-Voice(站内对照) | https://www.qianfanghub.com/ai-ready-dataset/bridge2ai-voice/66 | §6.3 与 FAQ 第 11 问的规模对照 |
附录 D:任务代码
任务一:建元数据表并归并诊断
import glob, csv, re
def parse_info(path):
#-- 键与值之间为制表符,部分键后带冒号
d = {}
for line in open(path, encoding='utf-8', errors='replace'):
if '\t' not in line:
continue
k, v = line.split('\t', 1)
k, v = k.strip().rstrip(':').strip(), v.strip().lstrip(':').strip()
if k:
d[k] = v
return d
rows = [parse_info(p) for p in sorted(glob.glob('*-info.txt'))]
#-- 诊断归一化:小写、去空格;healthy 单独成类
def norm(diag):
s = re.sub(r'\s+', ' ', (diag or '').strip().lower())
return 'healthy' if s == 'healthy' else s
for r in rows:
r['diag_norm'] = norm(r.get('Diagnosis'))
r['VHI'] = r.get('Voice Handicap Index (VHI) Score')
r['RSI'] = r.get('Reflux Symptom Index (RSI) Score')
with open('voiced_meta.csv', 'w', newline='', encoding='utf-8') as f:
cols = ['ID', 'Age', 'Gender', 'diag_norm', 'Occupation status', 'VHI', 'RSI']
w = csv.DictWriter(f, fieldnames=cols, extrasaction='ignore')
w.writeheader(); w.writerows(rows)
print(len(rows))
归并完再看各类条数,不要先定类别再凑数据。诊断字段是自由文本,同一类障碍可能有多种写法,也可能出现拼写变体;先做一次全集枚举,再决定映射到哪几个类。
任务二:按固定长度切窗并做最基本的幅度特征
import numpy as np, wfdb
rec = wfdb.rdrecord('voice001', pn_dir='voiced')
x = rec.p_signal[:, 0]
fs, n = rec.fs, rec.sig_len #-- 8000, 38080
#-- 去掉首尾 0.25 秒,规避起止瞬态
lo, hi = int(0.25 * fs), n - int(0.25 * fs)
seg = x[lo:hi]
win, hop = int(0.05 * fs), int(0.025 * fs) #-- 50 ms 窗,25 ms 跳
frames = [seg[i:i + win] for i in range(0, len(seg) - win, hop)]
rms = np.array([np.sqrt(np.mean(f ** 2)) for f in frames])
zcr = np.array([np.mean(np.diff(np.sign(f)) != 0) for f in frames])
print('帧数', len(frames))
print('RMS 的最小最大值', float(rms.min()), float(rms.max()))
print('过零率的最小最大值', float(zcr.min()), float(zcr.max()))
这段代码的目的不是给出结论,而是把"固定长度切窗"这一步跑通,并让人看到帧级特征确实随位置变化。真正用于分类的特征(基频轨迹、微扰、谐噪比、倒谱系数)需要更完整的实现,且都要注意 8 kHz 这个上限频率。
附录 E:如果只记五件事
| 序号 | 记住什么 | 为什么 |
|---|---|---|
| 1 | 208 条,150 病理、58 健康,8 kHz、32 位、每条 38080 点 | 这五个数字定义了一切用法与限制 |
| 2 | 它是"检验场"而不是"粮仓" | 拿它做主力训练会立刻撞到样本量上限 |
| 3 | 临床诊断与主观量表是两层标签 | 用诊断做分类、用量表做回归,混用即错 |
| 4 | NU 不是零,逗号是小数点,38080 不是 40000 | 这三条是静默错误,不报错但结果会偏 |
| 5 | 没有受试者编号 | 受试者级划分无从做起,必须在论文里写明 |
编辑说明
本文的核验时间为 2026 年 10 月 28 日。核对方式为直接访问 PhysioNet 项目页与文件目录,逐条确认 RECORDS、voice001.hea、voice001-info.txt、voice001.txt、voice060.hea、voice150-info.txt、voice208.hea 的可访问性与内容。记录数 208 与 wc -l 得到的 207 之间的一字之差,原因是 RECORDS 末行无换行符,这一点在 §2.5、附录 A 与 FAQ 第 1 问里各说明一次。官方描述"五秒"与头文件 38080 采样点之间的约 0.24 秒之差,在 §7.0 单独说明。未覆盖的内容包括:各诊断类别的具体条数、量表得分的集中趋势、字段填写完整度、是否存在同一人多次入组、以及编号顺序与采集顺序的关系。这些需要下载全量后统计,本文按要求只写规模、结构、边界三类数字,不做任何自行统计的分布性描述。
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- saarbrucken-voice-db,共享标签:生理信号 / 语音信号 / 耳鼻喉科 / 嗓音医学
- pc-gita,共享标签:生理信号 / 语音信号 / 嗓音医学
- parkinsons-voice-uci,共享标签:生理信号 / 语音信号 / 嗓音医学
- mdvr-kcl,共享标签:生理信号 / 语音信号 / 移动采集
- b2ai-voice-pediatric,共享标签:语音信号 / 临床量表 / 嗓音医学
- bagls-vf,共享标签:耳鼻喉科 / 嗓音医学
- girafe,共享标签:耳鼻喉科 / 嗓音医学
- torgo,共享标签:语音信号 / 病理语音
- ua-speech,共享标签:语音信号 / 病理语音
- bridge2ai-voice,共享标签:语音信号 / 临床量表
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

