MASS — 蒙特利尔睡眠研究档案 AI-Ready Wikipedia | 千方病案医数集

200 例实验室 PSG 睡眠分期基准 · 5 子集 · 256 Hz · 引用 443+

来源 Université de Montréal / CÉAMS (Centre d'études avancées en médecine du sommeil) url: https://borealisdata.ca/dataverse/MASS发布时间: 2026-09-09最后更新: 2026-09-09 阅读 2

信息速览

数据集名称MASS — 蒙特利尔睡眠研究档案 AI-Ready Wikipedia | 千方病案医数集
数据类型200 例整夜 PSG,256 Hz 采样,SS1-SS5 五子集,EDF+ 格式,需伦理批准申请,AASM / R&K 双分期手册
规模200 名受试者(97 男 / 103 女)
接入方式Université de Montréal / CÉAMS (Centre d'études avancées en médecine du sommeil) url: https://borealisdata.ca/dataverse/MASS
AI 就绪度

数据集封面

MASS — 蒙特利尔睡眠研究档案 AI-Ready Wikipedia


INFOBOX

数据集名称 MASS(Montreal Archive of Sleep Studies)
英文全称 Montreal Archive of Sleep Studies
别名/简称 MASS、MASS-C1(首个 cohort)、Montreal Archive of Sleep Studies database
疾病分类 睡眠分期基准(面向睡眠-觉醒障碍研究领域;ICD-11 见 §2.1)
SNOMED CT 需见 §2.1b 映射表
数据模态 多导睡眠图(PSG):EEG + EOG + EMG + ECG + 呼吸信号,256 Hz
AI 任务类型 自动睡眠分期、跨数据库迁移/域自适应、睡眠纺锤波与 K 复合波检测、事件检测、脑电表征学习
样本总数 200 例整夜 PSG(SS1-SS5 五子集,200 名受试者)
数据大小 各子集不一(如 SS4 约 10.8 GB,80 个 EDF 文件;全库需分子集下载)
数据格式 EDF / EDF+(European Data Format)+ 描述符 .xlsx
许可证 Creative Commons CC0(开放描述符)/ 生物信号需当地伦理委员会(IRB)批准
访问级别 申请审核(开放描述符无需申请;生物信号与受限人口学描述符需提交项目与伦理批准)
DUO 标签 HMB, NPUNCU, IRB
语言 英文
首发日期 2014-12(J Sleep Res 论文)/ 子集数据 2022-01-13(Borealis V1 发布)
最后更新 2022-01-13(Borealis 五子集 V1 全量上线)
发布机构 Université de Montréal / CÉAMS(CARSM),经 Borealis Dataverse 分发
官方主页 http://ceams-carsm.ca/mass/
下载地址 https://borealisdata.ca/dataverse/MASS
DOI 10.1111/jsr.12169(论文)/ 各子集 DOI 见 §9
引用次数 443+(Google Scholar,截至 2026-09)
AI 就绪度评分 ⭐⭐⭐⭐(4/5)— 格式统一(EDF)、专家分期、跨库生态成熟;扣分项:双分期手册/双 epoch 长度需自行对齐、无官方 train/test 划分、生物信号需人工伦理申请
页面状态 published

§0 E-E-A-T 信任声明与免责声明

医学审核者:千方病案医学编辑部交叉审核:§2 医学背景(睡眠分期手册 AASM 与 R&K、ICD-11/SNOMED CT 映射、分期金标准描述)、§7 偏倚分析。

数据工程审核者:千方病案医学编辑部交叉审核:§4 DAIMS 数据字典(EEG/EOG/EMG 通道、EDF+ 标注格式)、§5 数据划分策略、§6 预处理 Pipeline 与坑点(双手册对齐、epoch 拼接等)。

审核日期:2026-09-05

审核方式:交叉审核

利益冲突声明:千方病案医数集与 Université de Montréal、CÉAMS/CARSM、Borealis Dataverse 无任何商业利益关联。本页面不销售 MASS 数据集本身,仅提供 AI 就绪指南与学术信息服务。编辑者未接受上述机构的任何形式资助。

医疗免责声明:本页面提供的医学信息仅供研究和教育目的,不构成医疗建议、诊断或治疗方案。数据集的医学描述基于公开发表的文献,未经逐一临床验证。任何基于该数据集训练的 AI 模型在应用于临床决策前,必须经过独立的临床验证和监管审批。

技术免责声明:本页面的代码示例、预处理建议和基准性能数据基于公开资料整理,不保证在特定环境下的准确性和适用性。使用者应自行验证代码安全性和数据预处理流程的正确性。千方病案医数集不对因使用本页面信息而导致的任何直接或间接损失承担责任。

数据使用合规:使用本页面描述的数据集前,请务必阅读并遵守数据集原始许可协议。MASS 的生物信号(EEG/EOG/EMG/ECG 等)访问需研究者提交当地研究伦理委员会(IRB/REB)批准的项目描述,经 CÉAMS 审核后分发;开放描述符以 CC0 方式提供。DUO 标签仅供参考,具体使用限制以数据集官方协议为准。


§1 数据集概览

§1.0 30 秒速览

MASS 是加拿大蒙特利尔大学高级睡眠医学研究中心(CÉAMS/CARSM)整理的开放多导睡眠图(PSG)档案,收纳了 200 例在实验室里录制的完整整夜睡眠记录(97 男 / 103 女,18-76 岁),全部 256 Hz 采样。它把人工睡眠分期做得好的地方和难处都摆上了桌面:每段脑电都由训练有素的专家按 AASM 或 R&K 手册标注成 W、N1、N2、N3、REM 等睡眠阶段,这就是训练"自动睡眠分期"算法的金标准标签。

它的地位在于"让不同算法的结果第一次可比"。自动睡眠分期系统过去各评各的私有数据,分数无法横向比较;MASS 统一了公开基准,把分期、纺锤波检测等任务放进同一个 200 例档案里。正是这种"去私有化",使它成为睡眠 AI 领域被引用最频繁的公共 PSG 数据集之一(原始论文引用 443+,截至 2026-09)。

你可以用它来:训练和评估睡眠分期神经网络(TinySleepNet、DeepSleepNet 等在它上面报告分数)、做跨数据库迁移学习(在 MASS 训练、在 SHHS 或 Sleep-EDF 测试)、检测睡眠纺锤波与 K 复合波,或者作为教学数据带你入门脑电信号处理。数据需注册并经当地伦理审查后获取,标注与分期质量兼顾、生态成熟,是睡眠 AI 入门绕不开的基准库。

§1.1 摘要

MASS(Montreal Archive of Sleep Studies)由 O’Reilly、Gosselin、Carrier 与 Nielsen 于 2014 年 12 月在 Journal of Sleep Research 正式描述(23(6):628-635,DOI 10.1111/jsr.12169),设计初衷是提供一个标准且易得的 PSG 数据源,用于"睡眠分析自动化系统"的基准测试、实验结果的快速验证与探索性分析,以及跨中心大型合作。首个 cohort(记为 MASS-C1)从 2001-2013 年间在蒙特利尔三家医院睡眠实验室执行的八个研究方案中汇整了 200 例完整整夜记录(97 男 / 103 女),年龄 18-76 岁(男性 42.9±19.8 岁、女性 38.3±18.9 岁)。

为保持子集内同质、子集间异质,档案被切成 SS1-SS5 五个子集:SS1 为 55-76 岁中老年样本(53 例)、SS2 为 18-33 岁年轻健康样本(19 例)、SS3 为 20-69 岁混合样本(62 例)、SS4 为 18-35 岁青年(40 例)、SS5 为 20-59 岁(26 例),合计 200 例。全部记录 256 Hz 采样,含 4-20 通道 EEG(10-20 系统)与标准 EOG、EMG、ECG、呼吸信号。分期手册依子集而异:SS1/SS3 采用 AASM(epoch 30 s),SS2/SS4/SS5 采用 R&K(epoch 20 s)——这一"双手册、双 epoch"结构既是 MASS 的特色,也是跨子集复用前必须处理的工程要点。

数据经 Université de Montréal 的 Borealis Dataverse 于 2022-01-13 以五个子集(生物信号+睡眠分期、睡眠标注两套 DOI)正式发布,官方下载入口为 ceams-carsm.ca/mass/。围绕 MASS 已生长出 TinySleepNet、DeepSleepNet、SeqSleepNet、XSleepNet 等分期模型的公开评测记录与 SleePyCo 等标准化预处理工具,是跨数据库睡眠分期研究的事实标准源。

从采集到发布的时间跨度本身值得注意:档案源记录诞生于 2001-2013 年间,描述论文在 2014 年定稿,而数据最终以标准化、带 DOI 的可引用形态托管到 Borealis 则到 2022 年才完成。这意味着 MASS 的"数据年代"(2001-2013)与"发布年代"(2022)并不重合——使用者应意识到其底层采集自较早的实验室设备世代,但其标注、格式与托管都经过了当代的规范化处理。

§1.2 战略价值分析

基准统一维度:MASS 出现前,睡眠分期自动化论文"各自为政",在私有数据库上自评分数、无法互比,O’Reilly 等人将这种困境直指为"阻碍睡眠研究进展的根本方法论障碍"。MASS 通过公开 200 例多中心 PSG 与专家分期,把"谁更准"变成可证伪的问题,直接催生了此后以固定数据子集(MASS-C1/SS1-SS5)为评测台的算法论文群。这份"可复现评测"范式至今仍是睡眠 AI 论文的默认写法。

数据多样性维度:MASS 的五个子集刻意覆盖了年龄、分期手册、epoch 长度、采集协议的多重差异——既有老年样本(SS1)也有青年样本(SS2/SS4/SS5),既有 AASM 也有 R&K,既有 30 s 也有 20 s。这种"可控异质性"使它成为研究睡眠分期模型跨年龄、跨手册、跨协议可迁移性的理想实验场,被多篇域自适应与迁移学习论文选作源/目标数据。

工具生态维度:MASS 是 SleePyCo、sleepless 等开源睡眠工具包的官方支持数据集,社区围绕其固定了目录结构(Base_EDF/Base_Annotations/SS1-SS5)与预处理惯例(20 s 转 30 s、R&K 的 N3/N4 合并等)。数据、代码、基准三者闭环,降低了复现门槛,使 MASS 成为衔接"数据仓库"与"可运行算法"的枢纽。

事件级标注稀缺维度:多数开放 PSG 数据集只带分期标签,MASS 的 SS2 额外提供了两名专家在 NREM2 期 C3 通道上的逐事件纺锤波标注(19 例中 15 例为双评),SS1 还含呼吸暂停/低通气等专家标注。这使得 MASS 同时服务"逐 epoch 分期"与"逐事件检测"两类任务,比仅含分期标签的数据集覆盖了更宽的自动化睡眠分析需求。

§1.3 同类数据集横向对比

数据集 记录数 模态 采样率 分期手册 人群 差异化定位
MASS 200(5 子集) 实验室 PSG,4-20 通道 EEG 256 Hz AASM + R&K 双手册 健康志愿者为主,年龄 18-76 跨越大 多中心、多手册、可控异质性,迁移学习源
Sleep-EDF(2013/2018) 20 / 153 实验室 PSG 100 Hz R&K / AASM 健康者 + 失眠患者 单通道简化,最常被引的入门集
SHHS(NSRR) 约 5,800(shhs-1) 家庭/门诊 PSG 125 Hz R&K 社区睡眠健康队列 大规模社区队列,流行病学价值高
ISRUC-Sleep 118(亚组) 实验室 PSG 200 Hz AASM + R&K 睡眠呼吸障碍患者 多亚组、含自动伪迹标注
Physio2018(Cinc) 994(训练) 家庭 PSG(单/双通道) 200 Hz AASM 患者为主 挑战赛规模大、信号较简化

MASS 的相对稀缺性在于其"非单一手册、非单一医院、含全通道 PSG 与专家事件级标注(纺锤波等)"的组合——这是多数仅含单通道分期标签的数据集不具备的。

§1.4 版本时间轴

日期 事件
2001-2013 MASS-C1 所涉八个研究方案在三家医院睡眠实验室完成采集
2014-12 描述论文在线发表:O’Reilly et al., J Sleep Res 23(6):628-635(DOI 10.1111/jsr.12169)
2022-01-13 SS1-SS5 五子集以"生物信号+睡眠分期"与"睡眠标注"两套文件经 Borealis Dataverse 发布(V1)
持续 CÉAMS 通过 ceams-carsm.ca/mass/ 受理生物信号与受限描述符的伦理审查申请

需要厘清的是,"首发 2014"与"数据上线 2022"并非矛盾,而是同一档案在不同阶段的产物:2014 是描述论文确立档案定位的时点,2022 是数据完成规范化托管、获得各子集独立 DOI 的时点。两者之间的多年空隙也解释了为何部分文献引用 ceams-carsm.ca/mass/ 而非 Borealis DOI——引用时应优先采用带版本信息(V1,2022-01-13)的子集 DOI。

§1.5 典型应用场景

  1. 自动睡眠分期基准测试:在 MASS-C1/SS1 或 SS3(AASM,30 s)上训练与报告 W/N1/N2/N3/REM 五类分期准确率,与 TinySleepNet、DeepSleepNet 等公开记录横向比较。
  2. 跨数据库迁移与域自适应:用 MASS 作源或目标,研究在 SHHS、Sleep-EDF 间迁移分期模型的鲁棒性(多篇迁移论文采用此设定)。
  3. 睡眠纺锤波 / K 复合波检测:SS2 提供两名专家在 NREM2 期 C3 通道的逐事件纺锤波标注,可做事件级检测器的精确率/召回率/F1 评测。
  4. 脑电表征与自监督学习:利用全通道 PSG 做睡眠脑电信道关系、表征学习的训练素材。
  5. 教学与工具链演示:作为 SleePyCo/sleepless 等工具的官方支持集,用于睡眠信号预处理教学。

一个典型研究路径:新手若想在睡眠分期上复现一个 SOTA 成绩,通常会选 SS3(62 例、AASM、30 s)作为唯一训练源,取单通道 EEG(C4 或 F4),降至 100 Hz,切成 30 s epoch,按受试者划分后用 TinySleepNet 训练,得到 acc ≈ 85-87% 的内部成绩;随后再把同一模型放到 Sleep-EDF 或 SHHS 上做跨库测试,量化分布偏移。这条"训练于 SS3 → 泛化于外部库"的路径,正是 MASS 论文生态中被反复使用的主流工作流。


§2 医学背景

§2.1 ICD-11 编码映射

MASS 本身并非单一疾病队列,而是以健康研究志愿者为主的睡眠研究档案;其临床意义在于为睡眠-觉醒障碍研究中的"睡眠分期测量"环节提供金标准。下表列出 MASS 所服务领域中最相关的 ICD-11 类别(睡眠-觉醒障碍章节 07),作为研究者界定自身课题时的编码参考,而非断言 MASS 受试者携带相应诊断。

ICD-11 编码 ICD-11 中文名 与 MASS 的关系
7A00 慢性失眠障碍 SS 子集研究常见下游目标;分期基准可服务于失眠表型研究
7A20 阻塞性睡眠呼吸暂停 分期与呼吸信号联合分析的临床场景之一
7A60 发作性睡病 睡眠分期金标准用于确诊辅助的研究场景
6A82 睡眠不足综合征 睡眠剥夺相关研究方案的临床相关主题
(程序类) XM6B 睡眠研究/多导睡眠监测 MASS 数据本身即为该测量过程的产物

注:ICD-11 睡眠-觉醒障碍为第 07 章;分期类别本身是"测量标签"而非诊断,MASS 的价值主要在测量层。研究者不应把 MASS 的健康志愿者队列误当成患者人群做患病率研究。

这套编码表的用途边界值得再强调一次:它帮助你给"用 MASS 训练分期模型"这一行为贴上临床归属(例如你最终想服务失眠或 OSA 的分期辅助),但不能被解读为 MASS 内含相应诊断标签。若论文把 MASS 的 W/N1/N2/N3/REM 直接当疾病结局,会在 ICD 编码层面产生语义错位——正确的做法是把 MASS 分期当作测量中间层,疾病诊断另用真正的患者队列。

§2.1b SNOMED CT 映射

标签 ICD-11 SNOMED CT 码 SNOMED 术语
多导睡眠监测 XM6B(程序) 274433002 Polysomnography
睡眠分期(测量) 248230004 Sleep staging
清醒/觉醒 248218007 Awake (finding)
慢波(深)睡眠 248239003 Slow wave sleep
快速眼动睡眠 248235008 REM sleep (finding)
睡眠纺锤波 445920006 Sleep spindle finding
失眠 7A00 193462001 Insomnia (disorder)
睡眠呼吸暂停 7A20 73430006 Sleep apnea (disorder)

§2.2 疾病与临床背景简介

睡眠分期是睡眠医学的基石测量。人类整夜睡眠由若干 90 分钟周期构成,每个周期依次经历清醒(W)、浅睡眠(N1、N2)、深睡眠(N3,慢波睡眠)与快速眼动睡眠(REM)。多导睡眠监测(PSG)通过同步记录脑电(EEG)、眼电(EOG)、颏肌电(EMG)、心电(ECG)与呼吸信号,让技师能以固定时长的"epoch"为单位逐段判读睡眠阶段。目前全球通行两套分期手册:美国睡眠医学会(AASM)的规则将睡眠分为 W/N1/N2/N3/REM 五类;更早的 Rechtschaffen & Kales(R&K)规则在深睡眠上区分 N3 与 N4 两档(共六类)。

MASS 的独到之处正是同时涵盖这两套手册:SS1/SS3 按 AASM 标成五类、epoch 为 30 s;SS2/SS4/SS5 按 R&K 标成(含 N4 的)六类、epoch 为 20 s。跨子集复用者须把 R&K 的 N3 与 N4 合并回 AASM 的 N3,并把 20 s epoch 重采样/拼接成 30 s,才能得到统一的五类标注——这是 MASS 迁移研究最常做的第一步,也是很多新手踩坑之处。

两套分期手册对同一睡眠阶段在脑电判据上的差异,直接决定了标注语义的不可混用:

睡眠阶段 AASM(SS1/SS3) R&K(SS2/SS4/SS5) 主要脑电判据
清醒 W W α 节律(8-13 Hz)占优势或低频混合波
浅睡 1 N1 N1(S1) α 消失、θ 波(4-7 Hz)活动、顶部锐波
浅睡 2 N2 N2(S2) 睡眠纺锤波 + K 复合波
深睡 N3(慢波) N3 + N4 两档(S3/S4) 高幅慢波(0.5-2 Hz)占比;R&K 再按占比分 N3/N4
快速眼动 REM REM 低幅混合频率 + 快速眼动 + 肌电近乎消失

正因 R&K 在深睡上保留了两档、AASM 合并为一档,做跨子集统一标注时的核心动作是 R&K 的 N3 与 N4 合并回 AASM 的 N3——这一映射在 Phan 等人及多篇迁移论文中均被采用,是 MASS 预处理事实上的第一步。

§2.3 临床任务定义

MASS 面向的研究任务聚焦于睡眠信号的"自动判读",横跨从筛查到表征的多个层次:

任务层次 定义 MASS 中的作用
分期(分类) 逐 epoch 判别 W/N1/N2/N3/REM 核心金标准任务,含双手册版本
事件检测 检测纺锤波、K 复合波、觉醒、呼吸事件 SS2 提供专家逐事件标注;SS1 含呼吸暂停/低通气等标注
表征学习 学习睡眠脑电的通用/跨受试者表征 全通道 PSG 作为预训练语料
迁移/域自适应 使分期模型跨数据集、跨手册、跨 epoch 泛化 MASS 的五子集异质结构即为天然迁移实验

注意 MASS 不直接承载"临床诊断分级/预后"标签——它是测量与判读层面的基准,而非结局预测队列。做诊断 AI 时应把它当作分期中间层而非最终疾病标签来源。

§2.4 患者人群表

子集 记录数 来源 采集时段 年龄(岁) 性别 健康状态
SS1 53 三家医院睡眠实验室之一 2001-2013(归档期) 63±5.3(55-76) 34 男 / 19 女 中老年研究志愿者
SS2 19 同上 同上 23.6±3.7(18-33) 8 男 / 11 女 年轻健康志愿者
SS3 62 同上 同上 42.5±18.9(20-69) 29 男 / 33 女 混合年龄研究志愿者
SS4 40 同上 同上 25.3±4.3(18-35) 14 男 / 26 女 青年志愿者
SS5 26 同上 同上 25±7.4(20-59) 13 男 / 13 女 青年志愿者
合计 200 3 家睡眠实验室 2001-2013 18-76 97 男 / 103 女 以健康研究志愿者为主

说明:子集计数 53+19+62+40+26 = 200,与 cohort 总数一致;受试者来自多中心研究方案而非单一门诊队列,故年龄呈明显的双峰结构(老年 SS1 对青年 SS2/SS4/SS5)。

§2.5 临床价值

MASS 的临床价值不在于提供某一疾病的结局数据,而在于把"睡眠分期"这一项占用技师大量时间、却又高度主观的测量,变成可训练、可验证、可横向比较的对象。对睡眠中心而言,可靠的分期自动化有望缓解技师负担并提高跨中心一致性;对睡眠科研而言,统一基准让"分期系统之争"第一次有了可复现的裁判。CÉAMS 建立该档案时即明确指出,其目标是成为"跨中心协作、改善分期标注者间一致性"等难题的催化剂——这一方向至今仍是睡眠医学自动化的核心议题。

需要界定的是,"临床价值"在这里更多指向分期工具链而非诊断路径:MASS 提供的 W/N1/N2/N3/REM 标签是睡眠质量评估、失眠/OSA/发作性睡病等多类睡眠问题的通用前置测量,而非某一疾病的结局变量。对研究者而言,这意味着 MASS 适合训练"把原始脑电变成可信分期"的通用模块——这个模块可作为临床分期辅助工具、或下游疾病分析的前端,但不宜直接把 MASS 当作出结局预测或患病率估计的队列。

§2.6 金标准描述

属性 说明
划分方式 按子集(SS1-SS5)与 cohort(MASS-C1)组织,子集内相对同质
标注方式 训练有素的专家逐 epoch 人工判读;SS2 另含两名专家逐事件纺锤波标注
标注者 CÉAMS 相关研究团队的技术人员/专家评分者(SS2 纺锤波为两名专家 V4、V5)
分期手册 AASM(SS1、SS3,epoch 30 s);R&K(SS2、SS4、SS5,epoch 20 s)
性质 主观人工标签;事件级(如纺锤波)标注者间一致性偏低(SS2 两专家 Cohen’s Kappa ≈ 0.39),分期层面相对更高
非起始对齐 官方明确:睡眠分期不一定从 PSG 记录起点开始,需自行对齐

§3 数据集规格

§3.0 版本抉择矩阵

MASS 目前官方发布即 Cohort 1(MASS-C1)、Borealis 五子集 V1(2022-01-13)。尚无第二 cohort 的公开数据版本,故"版本"选择实际上是子集选择问题:

你的需求 推荐子集 大小/规模 理由
AASM 五类分期、30 s epoch、与多数 SOTA 可比 SS3 62 例,59,317 个 epoch 规模最大且为 AASM,最常用于深度学习基准
AASM、含全通道(20 电极)、老年人群 SS1 53 例,51,293 个 epoch AASM 三十秒,中老年样本,含呼吸事件标注
R&K + 事件级纺锤波标注 SS2 19 例(其中 15 例双专家标注纺锤波) 唯一公开双专家逐事件纺锤波标注的子集
迁移/域自适应研究(含 20 s epoch) SS4 / SS5 40 / 26 例 R&K、20 s,适合研究跨 epoch 泛化
跨年龄分布一致性 SS1 + SS3 115 例 老年+混合年龄合并,扩大样本

§3.1 模态详情

MASS 是**实验室多导睡眠监测(PSG)**档案,整夜连续记录。官方描述论文规定全部记录特征为 256 Hz 采样率,EEG 蒙太奇 4-20 通道,外加标准眼电(EOG)、颏下肌电(EMG)、心电(ECG)与呼吸信号。具体到子集,EEG 通道布局并不统一:

  • SS3:延伸蒙太奇,含最多 20 个 EEG 电极(国际 10-20 系统)。
  • SS4:EEG 为 C3/C4/O1/O2(计算链接耳参考 CLE),另含 4 通道 EOG、1 通道双极 EMG、3 通道 ECG、1 呼吸热敏、1 血氧。
  • SS5:20 个 EEG 电极、链接耳参考(LER)、2 通道 EOG、3 通道参考 EMG、1 通道 ECG。

大多数已发表的分期分析取单一中央通道(如 C4-A1 / C4)以简化输入,并在预处理时降到 100 Hz。因此"模态"既是全通道 PSG,也可拆成单通道 EEG 使用——这种灵活性是 MASS 流行的重要原因。

为什么多通道对分期有可加价值:睡眠分期的核心判据虽主要依赖中央/枕部 EEG,但 EOG(识别 REM 快速眼动与清醒眼动)、颏 EMG(REM 期肌张力下降)与 ECG(心率变异的睡眠关联)都能提供互补信号。MASS 的 SS3/SS4/SS5 提供了这些非 EEG 通道,使研究者既能做"最轻量单通道"方案,也能做"EEG+EOG+EMG 多模态"方案——两种设定在文献中都出现过(如经典 ML 管线会用 EEG+EOG 或 EEG+EOG+EMG 特征)。因此选通道本质上是在"复现可比性(用 C4/F4 单通道)"与"信息增益(用多模态)"之间做权衡。

§3.2 按子集样本数表

子集 PSG 记录(例) epoch 长 分期手册 分期标注文件 事件标注
SS1 53 30 s AASM * Base.edf 专家标注(呼吸暂停/低通气等)
SS2 19 20 s R&K * Base.edf 两名专家纺锤波(15 例双评)
SS3 62 30 s AASM * Base.edf 自动肌电伪迹检测
SS4 40 20 s R&K * Base.edf 睡眠分期(同名标注文件)
SS5 26 20 s R&K * Base.edf 自动肌电伪迹检测
合计 200 AASM + R&K

§3.3 格式表

数据类型 格式 内容 获取门槛
生物信号 + 睡眠分期 EDF / EDF+(* PSG.edf + * Base.edf EEG/EOG/EMG/ECG/呼吸原始波形与分期 需 IRB 项目批准申请
睡眠标注 EDF+(* Annotations.edf 分期与事件级标注(与 Base.edf 同名内容) 部分子集开放下载
开放描述符 Excel .xlsx 基本记录与分期信息、部分睡眠指数 开放,无需申请
受限描述符 Excel .xlsx 人口学变量(年龄、性别、教育等) 需提交研究假设经委员会审查

§3.4 存储大小

各子集因文件数与信号通道数不同,压缩/原文件大小差异明显。以 SS4 为例,官方标注"40 个 PSG 文件 + 40 个分期文件,共 10.8 GB";SS4 睡眠标注子集为 24.4 MB(40 个 .edf 标注文件)。SS5 单个 Annotations.edf 大小在数百 KB 到数十 MB 之间(如 01-05-0001 15.7 MB、01-05-0003 560.8 KB)。全库建议按子集按需下载并预留数倍于压缩包的解压空间。

可作参考的已公开部分存储口径如下(其余子集若官方未公布总数则省略,下载页面会逐文件列示大小):

文件/数据集 规模口径
SS4 生物信号 + 分期 80 个 EDF(40 PSG + 40 分期),共 10.8 GB
SS4 睡眠标注 40 个 *Annotations.edf,共 24.4 MB
SS5 睡眠标注(示意) 单文件 0.5-32 MB 不等(如 01-05-0001 15.7 MB)
全库 未公布统一压缩包大小;按子集分别下载

注意生物信号 EDF 通常远大于标注 EDF——全通道记录整夜(SS3/SS5 的 20 电极)会产生数 GB 级单文件,务必预估磁盘与内存。

§3.5 标注方式

MASS 的分期标签由训练有素的专家人工判读产生,逐 epoch 标注;事件级标签(纺锤波、K 复合波、呼吸暂停/低通气等)则由领域专家在特定通道/睡眠期上逐事件标注。SS3 与 SS5 还提供自动肌电伪迹检测结果作为辅助标注。整体为"人工为主 + 自动辅助"的混合标注策略,无任何监督式伪标签。

§3.6 标注者资质与一致性

分期层面的一致性未见大规模公开报告,但事件层面存在可引用的量化数据:SS2 的纺锤波由两名专家(代号 V4、V5)在 NREM2 期的 C3 通道上评分,两者按样本事件对齐的 Cohen’s Kappa 仅约 0.39(O’Reilly & Nielsen)。需强调的是,V4 采用传统 AASM 纺锤波定义,而 V5 用 11-17 Hz sigma 滤波协助识别短时程、小幅值或受背景波遮蔽的纺锤波,且未设最小持续时长——因此低一致性部分源于判读标准差异而非单纯随机误差。纺锤波计数差异显著:V4 标出 11,147 个(19 例)、V5 标出 21,951 个(15 例),两专家交集仅 9,514 个。这一数据直接提示研究者:事件级"真相"具有强主观性,评测时应对单/双/并集标注分别报告。

§3.7 采集周期

MASS-C1 汇集了 2001-2013 年间在三家医院睡眠实验室执行的八个不同研究方案。受试者按各方案设计在实验室佩戴整夜 PSG;具体到 SS5,官方标注"评分日期 2014-06-09"。采集软件方面,SS4/SS5 标注使用 Harmonie 采集系统。

§3.8 地域覆盖

采集均位于加拿大魁北克省蒙特利尔的三家医院睡眠实验室,隶属蒙特利尔大学附属高级睡眠医学研究中心(CARSM/CÉAMS,现为 CIUSSS-NIM 下辖)。该档案是单城市、多中心的样本,不代表加拿大或全球人群的睡眠分布。

§3.9 设备规格

项目 规格
采样率 256 Hz(全库统一;多篇研究预处理降到 100 Hz)
EEG 蒙太奇 4-20 通道,国际 10-20 系统布局(依子集而变)
参考 SS4 计算链接耳(CLE);SS5 链接耳参考(LER,10 kΩ);SS2 通道 C3 链接耳参考
EOG 2-4 通道(依子集)
EMG 1 双极(SS4)或 3 参考(SS5)颏下肌电
ECG 1-3 通道(依子集)
呼吸 热敏/呼吸信号 + 血氧(SS4)
采集软件 Harmonie(SS4/SS5 标注)

一处易被论文误导的更正:Borealis 官方在 SS5 页面上明确注明,其 EMG 通道是参考式(referential)而非论文(O’Reilly 2014)所述的"双极式"(bipolar)。读取 SS5 的 EMG 时若照论文描述做双极差分处理,会得到错误信号——请以数据文件实际标注(referential)为准,这一差异也是坑点 7 的实例之一。

§3.10 深度溯源链

采集(2001-2013,三家医院睡眠实验室,八个研究方案)→ 数据整合与分期(CÉAMS/CARSM,AASM/R&K 双手册)→ 论文发布(2014,J Sleep Res,DOI 10.1111/jsr.12169)→ 数据托管(2022-01-13,Borealis Dataverse,五子集 V1)→ 官方申请渠道(ceams-carsm.ca/mass/,伦理审核后分发生物信号)。受试者伦理保护贯穿全程,受限人口学文件仅在假设审查通过后提供。

这条链的关键可信点在于每一步都有可核验的落点:采集对应三家睡眠实验室的研究方案;分期对应 CÉAMS 的专家与手册;发布对应 DOI 10.1111/jsr.12169 的可检索论文;托管对应 Borealis 五个含元数据的 DOI(见 §9)。研究者做数据溯源审计时,应沿这五个 DOI 逐条核对记录数、年龄与许可条款,以确认自己拿到的子集与官方口径一致。


§4 数据结构

§4.0 目录树

以 SleePyCo 等社区工具对 MASS 的整理惯例为例,下载并解压后期望的目录结构大致如下(各子集实际以文件存在为准):

MASS/
├── Base_EDF/                     # 原始 PSG 记录(社区整理命名,非官方强制)
│   ├── 01-02-0001 PSG.edf
│   ├── 01-02-0002 PSG.edf
│   └── ...
├── Base_Annotations/             # 基线与分期标注(* Base.edf)
│   ├── 01-02-0001 Base.edf
│   ├── 01-02-0002 Base.edf
│   └── ...
├── SS1/
│   └── 01-02-0001/
│       └── 01-02-0001 Annotation.txt   # 子集专属标注(文本格式)
├── SS2/  ...                    # 19 例(含双专家纺锤波标注)
├── SS3/  ...                    # 62 例(AASM,30 s)
├── SS4/  ...                    # 40 例(R&K,20 s)
└── SS5/  ...                    # 26 例(R&K,20 s)

命名约定为 cohort-subset-索引,如 01-02-0001 表示 cohort 1、subset 2、第 0001 号记录;官方 Borealis 文件形如 01-04-0001 PSG.edf / 01-04-0001 Base.edf(SS4)、01-05-0001 Annotations.edf(SS5)。

§4.1 DAIMS 8 列字段字典(核心文件)

以下描述 MASS 核心文件(EEG 信号 + 分期标注)的代表性字段。EDF 头信息以官方文件为准,下表为社区实践中的常见字段映射:

字段名 类型 说明 示例值 AI 用途 观测误差 缺失编码 取值范围
记录号(文件名) Text cohort-子集-编号 01-04-0007 分组/追踪样本 cohort1/子集 1-5/序数
子集(subset) Text 所属子集 SS1-SS5 SS4 组间对照 SS1-SS5
EEG 通道 Float(µV) 各通道采样点(如 C3/C4/O1/O2) 电压值 分期/表征输入 采集噪声/电极移动 通道缺(信号断)不标注 依记录而定
EOG 通道 Float(µV) 左/右眼电 电压值 分期辅助(REM) 眼动伪迹 同上 依记录而定
EMG 通道 Float(µV) 颏下肌电 电压值 分期辅助(REM/N2) 咀嚼等伪迹 同上 依记录而定
分期标签(stage) Categorical 该 epoch 的睡眠阶段 N2 分类靶标 专家主观性 未评分区段(见坑点 6) W/N1/N2/N3/(N4)/REM
事件标注 Categorical/区间 纺锤波/K 复合波/呼吸事件起止 纺锤波区间 事件检测靶标 低一致性(κ≈0.39) 未评事件不表示不存在 SS2 双专家等
epoch 长度 Integer(s) 分期单位 20 / 30 对齐必需信息 20(R&K)/ 30(AASM)
肌电伪迹标记 Flag 自动检测的肌电伪迹 0/1 质量过滤 自动检测误差 SS3/SS5
评分专家 Text 分期/事件标注者 V4/V5 标注者差异建模 因人而异 V5 部分记录弃标 SS2 事件标注
呼吸/血氧 Float 呼吸热敏/血氧通道(SS4 等) 数值 呼吸相关下游分析 传感器漂移 通道缺则不提供 依记录而定
睡眠指数 Float 受限描述符中的 AHI 等(部分) 如 12.3 探索性关联 测量依赖评分 部分文件不提供 开放/受限描述符

读表提示stage 是最常作为监督靶标的字段;epoch 长度评分专家 是"元标签"——它们不直接进网络输入,却是正确组织数据集(对齐、防泄漏、标注者分离)的先决信息。真正常被忽略的是 评分专家:SS2 里 V4 与 V5 对同一段脑电给出的纺锤波区间可相差甚远,建模时必须把标注者身份纳入实验设计。

§4.2 标签分布

基于迁移学习综述论文公开的 epoch 计数,两个 AASM 子集的五类分布(W/N1/N2/N3/REM)如下:

子集 W N1 N2 N3 REM 总计
SS1 12,242 7,112 22,167 3,407 6,365 51,293
SS3 6,442 4,839 29,802 7,653 10,581 59,317

可以看出:N2 占比最高(SS1 约 43%、SS3 约 50%),N3(深睡)占比最低(SS1 约 7%、SS3 约 13%)——这是睡眠分期数据集的普遍长尾特征。R&K 子集(SS2/SS4/SS5)官方未集中公布逐类计数,使用者应自行统计并留意 N3/N4 合并问题。

类不平衡的训练含义:N2 动辄过半、N1/N3 偏低意味着"始终猜 N2"的基线就能拿到高分,accuracy 因此极具欺骗性。表内 epoch 数来自迁移学习论文的统计口径(即分期覆盖区间内的有效 epoch),也印证了 §6.9 必须同时报告 macro-F1 与逐类 F1 的结论。若做类别加权,应基于你实际用的子集重新统计占比,而非照搬另一篇论文的权重。

§4.3 关键统计

指标 数值
整夜记录总时长(首个 cohort) 约 1,700 小时
每例典型时长 7-9 小时整夜
采样率 256 Hz
受试者 200(97 男 / 103 女)
年龄 18-76 岁(整体均值约 40.6,SD 19.4;子集各不同)
覆盖研究方案 8 个(三家睡眠实验室,2001-2013)
SS2 纺锤波计数 V4:11,147(19 例);V5:21,951(15 例);交集 9,514;并集 22,388

§4.4 数据层级

MASS 是一个"档案-子集-记录"的三级结构,无患者→多次住院的嵌套病历层级(不同于 EHR 数据库)。层级可归纳为:

Cohort(MASS-C1)→ Subset(SS1-SS5)→ Recording(1 例整夜 = 1 名受试者)→ Epoch(20/30 s)→ 采样点(256 Hz)

每名受试者通常贡献 1 例整夜记录,样本单位即"记录/受试者"。跨子集时受试者不重叠,因此以"记录/子集"为划分颗粒,泄漏风险主要体现在同一子集内部而非跨子集(见 §5.3)。

这个层级的工程含义有两层:

  • 序列粒度:记录级是唯一的独立样本。任何以"epoch"为单位随机打散的划分都会破坏记录内部的时序自相关(睡眠分期本质上是平滑的马尔可夫序列),因此划分必须落在 Recording 层。
  • 信号粒度:采样点(256 Hz)是物理底层;跨多通道读取时(SS3/SS5 的 20 电极),一次整夜记录的内存占用随通道数线性增长,需在读取阶段就决定取单通道还是多通道。

§4.5 缺失值与信息性缺失

场景 编码/表现 是否信息性 处理建议
信号断/通道失效 通道内恒零或大幅漂移,官方不单独标记 部分信息性(设备故障时段需剔除) 质量检测过滤坏段
未评分时段 分期不以记录起点开始,开头/结尾段可无标签 是(通常为觉醒/入睡前) 严格按标注起止截取
SS2 事件标注缺省 15 例双专家标注;4 例(V5)因睡眠质量差/信号伪迹未标 是(V5 未标 01-02-0004/0008/0015/0016) 引用时注明标注者与例数
自动伪迹标记 SS3/SS5 提供 0/1 标记 用作数据质量分层

官方明确提示"睡眠分期不一定从 PSG 记录起点开始",这是最常见的隐性缺失来源——直接用全文件做序列模型会把记录开头的清醒段误当缺失或错位,必须在 DataLoader 里按标注起止对齐。

补充两点信息性缺失的实践细则:

  1. R&K 的 N4 在 AASM 中"消失"不属于缺失——这是手册合并造成的映射,不应把未合并的 N4 当作缺失值处理,而应作为标签清洗步骤显式完成(见 §6.3 的 map_stage())。
  2. V5 弃标不是质量普适信号——SS2 中 V5 因"睡眠质量差(如 N2 期间 α 侵入)或信号/伪迹间歇不佳"弃标了 01-02-0004、0008、0015、0016 四条记录,但 V4 仍对它们标了分期。用 SS2 时需明确"分期 vs 纺锤波事件标注"各自覆盖的记录集并不相同。

§5 划分与使用建议

§5.1 官方划分

MASS 官方不提供固定的 train/validation/test 划分,也不设官方挑战赛评测协议(区别于 Physio2018 等挑战赛数据集)。官方只定义了两级组织粒度:整 cohort(MASS-C1)与按子集组合(如 MASS-C1/SS1-SS3),供研究者声明自己用了档案的哪一部分。因此"用哪个子集做训练/测试"完全由研究者自行决定,复现论文时必须核对对方的确切子集与受试者子集。

§5.2 社区惯例划分

社区(如 SleePyCo、sleepless 工具)为 MASS 提供了约定俗成的受试者级划分惯例,典型做法是每个子集内按 7:1.5:1.5 或 6:2:2 的 train/val/test 比例、以受试者(记录)为单位切分。以 sleepless 的协议为例(非官方,仅供复现对齐):

子集 训练 验证 测试
SS1 33 10 10
SS2 11 4 4
SS3 38 12 12
SS4 24 8 8
SS5 16 5 5

注:这些数字来自单一社区工具的快照,不同论文可能采用不同切分;严谨做法是报告自己使用的具体记录号集合,便于他人复现。

§5.3 泄漏风险(重点)

MASS 的记录间无跨样本信息复用,主体泄漏风险集中在两类:

  1. epoch 邻域泄漏:睡眠分期模型(DeepSleepNet/TinySleepNet 等)常把连续多个 epoch 组成上下文序列。若按 epoch 而非记录切分,同一记录的相邻 epoch 会同时出现在训练与测试,导致乐观偏差。解决:永远以"记录/受试者"为单位做 GroupShuffleSplit。
  2. 手册/epoch 混淆:若把 SS1/SS3(AASM, 30 s)与 SS2/SS4/SS5(R&K, 20 s)未经对齐直接混合并随机切分,模型可能学到"手册特征"(N4 出现与否、epoch 长度差异)而非真实睡眠特征,跨手册评估分数失真。解决:先完成 R&K→AASM 的 N3/N4 合并与 20 s→30 s 对齐,再统一划分。

此外,同一次采集方案衍生的多条记录理论上可能在受试者层面相关,但 MASS 每名受试者多为 1 例记录,此风险较低。

一个量化泄漏影响的思考实验:若 SS1(53 例、51,293 个 epoch)里按 epoch 随机 8:2 切分,同一记录的相邻 epoch 会大量同时落在训练与测试。由于睡眠分期平滑性极强(相邻 epoch 常属同一阶段),测试集里"见过邻居"的比例可能高达一半以上——这会系统性地抬高准确率数个百分点。这正是"报告时必须声明按受试者划分"的原因,也是为何 §8.1 强调只能与同样采用受试者级划分的基准比较。

§5.4 交叉验证建议

  • 使用 k-fold(k=5)受试者分层交叉验证,每折以记录为基本单位,报告均值±标准差。
  • 分层依据按子集平衡(若合并多子集)或按主要阶段类别占比粗略分层。
  • 固定随机种子并记录受试者 ID 清单,确保与社区基准可对齐比较。
  • 若你的课题只关心单子集(如 SS3),可在其内部做 5-fold;若关心跨手册泛化,则把 SS1+SS3(AASM)与 SS2+SS4+SS5(R&K)各做一组,报告两组之间的一致性,而不是把两者当同一人群混叠后打乱。

§5.5 外部验证建议

跨数据库验证是 MASS 的标准用法:在 MASS 训练/微调后,应在至少一个外部 PSG 数据集上测试泛化,如 Sleep-EDF(R&K/AASM,单通道 100 Hz)SHHS(NSRR 社区队列,125 Hz)ISRUC-Sleep(患者人群)。多篇迁移学习论文已证明 MASS→Sleep-EDF/SHHS 存在显著分布差异(源-目标精度下降),因此单库报告不足信,外部验证几乎是睡眠分期论文的发表门槛。验证时须统一分期手册(R&K 的 N4 合并)与 epoch 长度。

外部验证的实证策略分三步:先在 MASS 目标子集(如 SS3)上得到内部成绩作为上限;再在 Sleep-EDF/SHHS 上直接测试(零样本迁移)量化真实掉点;最后用目标域少量样本微调或域自适应,报告"微调后"能挽回多少。这样报告的"内部 / 零样本迁移 / 微调后"三档数字,恰好对应社区衡量模型真实泛化能力的三个刻度。


§6 AI 就绪指南

§6.0 云端快速启动

MASS 生物信号需伦理申请、无法一键自动下载,不适合无凭证的云快速启动。若已获批且文件就位,可借助社区工具快速搭建。推荐两条云端/本地路径:

# 路径一(推荐,声明式):安装 SleePyCo 依赖 MASS(支持 SS1-SS5)
pip install sleeppyco

# 路径二(灵活):安装 sleepless 库,其内建 MASS loader 与受试者级划分协议
pip install sleepless

# 注:两者都假设你已手动下载并摆放好 MASS 文件到 data_root 目录

实际使用中需要你自行执行 Borealis 下载或 CÉAMS 申请流程(见 §6.2)。

§6.1 快速上手(目录结构与最小可用子集)

假设 DATA_ROOT 指向你整理后的 MASS 目录(见 §4.0),SS3 是 AASM 且规模最大、最适合快速上手。一个可直接运行的 MASS 分期数据加载骨架如下:

# -*- coding: utf-8 -*-
# 目录预期:DATA_ROOT/SS3 下每个记录文件夹含 "<id> PSG.edf" 与 "<id> Base.edf"
# 本脚本演示:定位 EDF、读取通道表、展示分期,为后续训练做最小子集铺垫
import os
import glob
import numpy as np
import mne

DATA_ROOT = "/path/to/MASS"          # 请改为你的 MASS 根目录
SS = "SS3"                            # 最小可用子集:SS3(62 例,AASM,30 s epoch)

# 约定:子集文件夹内每个记录一个目录,包含 PSG 与 Base EDF
subset_dir = os.path.join(DATA_ROOT, SS)
record_dirs = sorted([d for d in os.listdir(subset_dir)
                      if os.path.isdir(os.path.join(subset_dir, d))])
print(f"找到 {len(record_dirs)} 条记录于 {SS}")

if not record_dirs:
    raise FileNotFoundError("目录为空——请先按 §6.2 下载并解压 MASS,再设置 DATA_ROOT")

rec = record_dirs[0]
files = glob.glob(os.path.join(subset_dir, rec, "*.edf"))
print("该记录 EDF 文件:", [os.path.basename(f) for f in files])

# 用 MNE 读取 EDF(PSG 与标注同名的两个文件)
psg_files = [f for f in files if "PSG" in os.path.basename(f)]
if psg_files:
    raw = mne.io.read_raw_edf(psg_files[0], preload=False, verbose="ERROR")
    print("EEG 通道数:", len(raw.ch_names))
    print("采样率:", raw.info["sfreq"])

要点:DATA_ROOT 与目录摆放须与 §4.0 一致;最小可用子集选 SS3(AASM、无跨手册转换负担)。若你的 EDF 内只有单文件(PSG 与分期合并),请改用 SleePyCo 的成熟加载器直接消费官方目录结构。

§6.2 数据获取(下载/申请/大小)

MASS 的获取分两档:开放部分(SS1-SS5 睡眠标注 EDF、开放描述符)可在 Borealis 直接下载;生物信号(含 EEG 波形)与受限人口学描述符需走伦理申请。官方流程如下:

数据类别 获取方式 前置条件
睡眠标注(* Annotations.edf / Base.edf) Borealis Dataverse 页面直接下载 部分子集开放,无需申请
开放描述符(.xlsx) Borealis / CEAMS 下载 无需申请
生物信号 + 睡眠分期(* PSG.edf) 邮件申请 mass.cnmtl@ssss.gouv.qc.ca ① 项目说明 ② 当地研究伦理委员会(IRB)批准
受限描述符(人口学 .xlsx) 邮件申请 ① 完整项目描述供 MASS 科学委员会审查 ② IRB 批准
# 开放部分可直接用 wget 拉取单个 Borealis 文件(以 SS5 一条标注为例,需真实 token/链接)
# 生物信号部分无脚本可自动化——需人工邮件申请,获批后由 CÉAMS 提供文件
echo "请访问 https://borealisdata.ca/dataverse/MASS 浏览各子集开放文件"

建议:首次申请时写清数据类型(生物信号和/或受限描述符)、研究用途与拟用子集;获批后由 CÉAMS 提供整子集文件。引用时务必遵守"须引用 O’Reilly et al. 2014"的条款。

申请实操贴士

  • 邮件中注明你隶属的研究机构与 PI,Borealis 的受限文件下载还需登录并在 guestbook 中登记用途。
  • "生物信号 + 睡眠分期"获批后拿到的是整子集的 * PSG.edf 波形文件;若你只要分期标签,可先尝试直接下载 Borealis 的 * Annotations.edf(部分子集开放),不必申请生物信号。
  • 处理时限通常取决于你的伦理审批进度而非数据分发——尽早提交项目说明与 IRB 文件能显著加快获批。
  • 合规红线:生物信号不得未经授权共享给第三方,也不得在默认留存训练数据的在线 LLM/API 平台上处理(若确需云端,须满足零留存条款),这部分与 PhysioNet 类受控数据的要求一致。

§6.3 预处理全流程

跨子集复用的标准化预处理按以下顺序执行,每一步都解决一个 MASS 特有的一致性问题:

  1. 格式解析——用 MNE/EDF 库读取 * PSG.edf 波形与 * Base.edf 分期标注,勿手动解析 EDF 头。
  2. 双手册对齐(N3/N4 合并)——把 R&K 的 N3/N4(及 S3/S4)统一映射为 AASM 的 N3,使 SS1-SS5 共享五类语义(见下面 map_stage)。
  3. epoch 长度统一——把 20 s(R&K 子集)重标定/拼接为 30 s,消除与 AASM 子集的时序不一致(见坑点 2)。
  4. 通道/参考选择——取各子集共有的目标通道(社区默认单通道 C4 或 F4),必要时重参考为统一差分,统一通道顺序。
  5. 滤波与标准化——按目标采样率降采样(常见 256→100 Hz)、可选带通滤波(如 0.5-35 Hz)、逐记录 z-score。
  6. 质量过滤——用自动伪迹标记(SS3/SS5)或自建坏段检测剔除含伪迹/断信号区间,并按标注起止截取(见坑点 5)。
# -*- coding: utf-8 -*-
# MASS 预处理全流程(双手册 / 双 epoch 对齐 + 通道规整 + 质量过滤)
# 前置:DATA_ROOT 下含 SS1-SS5,使用 mne + numpy
import os, glob
import numpy as np
import mne

DATA_ROOT = "/path/to/MASS"
OUT_EPOCH = 30          # 统一到 30 s(AASM 惯例)
STAGES_ALLOWED = ["W", "N1", "N2", "N3", "REM"]

def load_record(subset_dir, rec):
    psg = glob.glob(os.path.join(subset_dir, rec, "*PSG.edf"))
    base = glob.glob(os.path.join(subset_dir, rec, "*Base.edf"))
    raw = mne.io.read_raw_edf(psg[0], preload=False, verbose="ERROR")
    ann = mne.read_annotations(base[0])
    return raw, ann

def map_stage(desc):
    # 社区惯例把 AASM 名称映射到统一五类;R&K 的 N3/N4 在此合并
    d = desc.strip().upper()
    if d.startswith(("N3", "N4", "S3", "S4", "3", "4")):
        return "N3"
    if d.startswith(("N2", "S2", "2")):
        return "N2"
    if d.startswith(("N1", "S1", "1")):
        return "N1"
    if d in ("REM", "R", "5"):
        return "REM"
    if d in ("W", "0", "WAKE", "WK"):
        return "W"
    return None  # 未知/未评分

# —— 示意主流程:单记录 ——
# for each SS in [SS1..SS5], for each rec:
#   raw, ann = load_record(SS_dir, rec)
#   stages = [(onset, map_stage(desc)) for onset, dur, desc in zip(...) if desc]
#   首尾未评分段:仅保留 ann 覆盖范围内、且能整除 OUT_EPOCH 的区段
#   20 s R&K 记录:按需要拼接/重标定到 30 s(见坑点 2)
print("完成手册/epoch 对齐的骨架——实际使用时请按子集 epoch 长度处理序列边界")

提示:EDF 标注的 epoch 起点请以文件内时间戳为准,勿假定与波形 0 点对齐(官方已注明分期不一定始于记录起点)。

从 EDF 到 .npz(连接 §6.3 与 §6.4 的粘合层)

为让 §6.4 的 DataLoader 直接可用,先在预处理阶段把每一条记录切成对齐后的 30 s、五类片段存盘。下面补全 epoch 切分与落盘代码:

# -*- coding: utf-8 -*-
# 将一条对齐后的 EDF 切成 30 s 五类片段,输出 {rec}.npz(data + stage)
# 前置:raw 与 stages 已按 §6.3 对齐(stages: 绝对时间起点的 label 序列)
import numpy as np
import mne

EPOCH = 30          # 秒
SF = 256            # MASS 原生采样率;若已降采样请同步修改

def cut_and_save(raw, stages, out_npz, eeg_ch="C4", epoch_s=EPOCH, sf=SF):
    """stages: 由 EDF 标注对齐得到的 dict {onset_sec: stage_code_int}。"""
    data = raw.copy().pick_channels([eeg_ch]).load_data()
    step = epoch_s * sf
    X, y = [], []
    for onset, code in sorted(stages.items()):
        # 用最近样本点把秒级 onset 映射到采样点索引
        start = int(round(onset * sf))
        seg = data.get_data(start=start, stop=start + step).ravel()
        if len(seg) == step:        # 边界不足则丢弃,避免坏段
            X.append(seg); y.append(code)
    np.savez(out_npz, data=np.stack(X).astype("float32"),
             stage=np.array(y, dtype="int64"))
    print("已写出", out_npz, np.stack(X).shape)

# 使用示例(示意)
# cut_and_save(raw, stages, "/tmp/npz/01-03-0001.npz", eeg_ch="C4")

关键点:pick_channels 只取你计划训练的那条通道(社区默认多为 C4/F4 对应);get_data(start, stop) 用采样索引精确切片,规避了浮点 epoch 边界误差;len(seg)==step 的守卫把末段不足 30 s 的碎片丢弃,避免形状污染训练张量。

§6.4 PyTorch DataLoader 完整可运行代码

下面给出一个可直接运行的 PyTorch Dataset:假设每个子集记录已切成对齐后的 30 s 五类分期片段的 .npz(含 datastage),Dataset 负责按记录分组、提供邻域上下文,供 DeepSleepNet/TinySleepNet 类模型使用。

# -*- coding: utf-8 -*-
# 运行前置:先执行 §6.3 生成 {rec}.npz(data: [T_e, ch, 30s*sf] 浮点;stage: [T_e] 整数)
import os, glob
import numpy as np
import torch
from torch.utils.data import Dataset, DataLoader
from torch.utils.data.sampler import SubsetRandomSampler

N_CLASSES = 5          # W/N1/N2/N3/REM
CTX = 2                # 前后各看 2 个 epoch(窗口共 2*CTX+1)
SF = 100               # 若降采样到 100 Hz,每 30 s 即 3000 点

class MASSStageDataset(Dataset):
    """整夜记录级 Dataset;sample = 中心 epoch 邻域窗口。返回 (input, label)。"""
    def __init__(self, npz_list, ctx=CTX, sf=SF):
        self.records, self.labels, self.rec_of = [], [], []
        for n in npz_list:
            d = np.load(n)
            x, y = d["data"].astype(np.float32), d["stage"].astype(np.int64)
            # 依记录为单位收集中心索引
            for c in range(ctx, len(y) - ctx):
                self.records.append(x); self.labels.append(y[c]); self.rec_of.append(c)
        self.ctx = ctx

    def __len__(self):
        return len(self.labels)

    def __getitem__(self, i):
        x, c = self.records[i], self.rec_of[i]
        win = torch.from_numpy(x[c - self.ctx:c + self.ctx + 1])   # [2ctx+1, ch, T]
        return win, self.labels[i]

# —— 组装(受试者级分组划分,防泄漏)——
def make_loaders(npz_dir, rec_train, rec_val, batch=32):
    files = {os.path.basename(f)[:-4]: f for f in glob.glob(os.path.join(npz_dir, "*.npz"))}
    tr = MASSStageDataset([files[r] for r in rec_train])
    va = MASSStageDataset([files[r] for r in rec_val])
    return DataLoader(tr, batch_size=batch, shuffle=True), DataLoader(va, batch_size=batch)

# 使用示例
# tr_dl, va_dl = make_loaders("npz", ["01-01-0001","01-01-0002"], ["01-01-0003"])
# for xb, yb in tr_dl:
#     print(xb.shape, yb.shape)   # ([B, 5, ch, 3000], [B])
#     break

这段代码假定你已完成 §6.3 的输出;若你直接用 SleePyCo,其内建 .npz 预处理与通道选择可省去手写这一步。

§6.5 坑点 8 个

⚠️ 坑点 1:双分期手册(AASM vs R&K)混用导致标签不兼容(分类:标签理解)

问题:MASS 的 SS1/SS3 按 AASM 分五类(W/N1/N2/N3/REM),SS2/SS4/SS5 按 R&K 分(其深睡含 N3、N4 两档)。把全库 epoch 直接汇入同一训练集而不合并 N3/N4,会让"深睡"类别语义不一致。

症状:合并训练后 N3 类混淆矩阵异常;R&K 子集深睡段被误标成多类;跨手册验证的 F1 明显偏低。

解决

  1. 简单方法:只用单一手册子集(如仅 SS1+SS3,纯 AASM)训练,避开混用。
  2. 进阶方法:写一个 map_stage() 把 R&K 的 N3/N4(及 S3/S4)统一映射为 AASM 的 N3(见 §6.3),再做 N4 合并后重标。
  3. SOTA 方法:在框架层面显式记录每 epoch 的"手册来源"作为元特征,用域标签辅助域自适应或做分层评测(如 MASS→SHHS 手册差异已被验证为迁移瓶颈)。
    参考https://www.sciencedirect.com/science/article/pii/S0933365723000544

⚠️ 坑点 2:epoch 长度不一致(20 s vs 30 s)破坏序列模型对齐(分类:预处理陷阱)

问题:SS1/SS3 为 30 s epoch、SS2/SS4/SS5 为 20 s epoch。DeepSleepNet/TinySleepNet 等序列模型的固定输入窗口多按 30 s 设计,直接喂 20 s 段会错位。

症状:模型形状不匹配报错;强行 padding 后分期准确率下降;R&K 子集结果与社区基准不可比。

解决

  1. 简单方法:仅选用 30 s 子集(SS1/SS3)做实验。
  2. 进阶方法:社区常见做法是把 20 s 段重采样/拼接成 30 s 窗口(保留中心标注);或以 20 s 为最小单位、让模型自己读邻域组合成固定总时长。
  3. SOTA 方法:改用支持可变时长的序列模型,或用与 epoch 长度无关的逐段分类 + 后期时序平滑(CTC/CRF 类),从根上规避固定窗。
    参考https://deepwiki.com/gist-ailab/SleePyCo/2.2-dataset-preparation

⚠️ 坑点 3:事件级标注(纺锤波)极低一致性(两专家 κ≈0.39)(分类:偏倚陷阱)

问题:SS2 的两名纺锤波评分专家(V4/V5)样本级 Cohen’s Kappa 仅约 0.39,V5 检出量几乎是 V4 的两倍(21,951 vs 11,147)。把任一名专家当"绝对真值"评测检测器会得到误导性结论。

症状:同一检测器对 V4 与 V5 的 P/R 天差地别;精度在交集/并集真值上波动巨大;复现文献对不上。

解决

  1. 简单方法:只在与你的检测器定义匹配的那名专家标注上评测,并明示。
  2. 进阶方法:分别对 V4、V5、两专家交集、并集四种真值报告 P/R/F1,披露标准敏感性(O’Reilly & Nielsen 即如此处理)。
  3. SOTA 方法:把低一致性本身当研究对象——用标记者模型估计标注噪声/置信区间,或在训练中引入标注者身份作为辅助任务。
    参考https://pmc.ncbi.nlm.nih.gov/articles/PMC5435763/

⚠️ 坑点 4:记录间 epoch 邻域泄漏(按 epoch 而非记录划分)(分类:数据泄漏)

问题:睡眠分期高度依赖前后文,序列模型窗口横跨相邻 epoch。若测试集与训练集来自同一记录的相邻 epoch,模型能看到"记忆中的邻居",分数虚高。

症状:内部准确率异常高,一到外部库就断崖下跌;同一协议不同随机划分结果差异大。

解决

  1. 简单方法:以"记录/受试者"为最小单位随机划分 train/val/test(GroupShuffleSplit)。
  2. 进阶方法:划分后断言训练与测试的受试者 ID 集合零交集,并记录到复现清单。
  3. SOTA 方法:做跨数据库外部验证(MASS→Sleep-EDF/SHHS),用库外泛化作为真实性能下限。
    参考https://www.wizwand.com/sota/sleep-stage-scoring-on-mass-subject-wise

⚠️ 坑点 5:分期不以记录起点开始(隐性时间偏移)(分类:预处理陷阱)

问题:官方明确"睡眠分期不一定从 PSG 记录起点开始"。很多 EDF 的波形起点是开灯/设备校准,而分期从入睡才开始,两者起点错位。

症状:把整文件当序列对齐后,首段 epoch 标签与波形时间对不上;Hypnogram 时序被平移,造成模型学错对应关系。

解决

  1. 简单方法:仅用分期标注覆盖的区间做训练,截取而非全文件。
  2. 进阶方法:用 EDF 标注的时间戳(onset)把分期映射回波形绝对时间,构建对齐后的 (wave_interval, stage) 字典。
  3. SOTA 方法:在 DataLoader 中显式记录每记录的真实 onset 偏移量,供任何窗口采样精确对齐。
    参考https://borealisdata.ca/dataset.xhtml?persistentId=doi:10.5683/SP3/CHG82L

⚠️ 坑点 6:健康志愿者 ≠ 临床患者——人群分布不可外推(分类:偏倚陷阱)

问题:MASS-C1 以健康研究志愿者为主(青年、无系统性睡眠疾病队列),年龄双峰、且各子集来自不同方案。把它当"睡眠疾病患者数据库"会带来人群偏倚。

症状:在 MASS 上训出的模型对失眠/OSA 患者泛化差;把子集分布当临床患病率报告是错的。

解决

  1. 简单方法:在论文方法中明示 MASS 为健康志愿者/研究人群,避免疾病患病率类结论。
  2. 进阶方法:用 ISRUC-Sleep、SHHS-OSA 等患者数据集做人群外部验证,度量分布偏移。
  3. SOTA 方法:把"健康-患者"当域维度做域自适应或校准,量化并缩小人群泛化差距。
    参考https://www.sciencedirect.com/science/article/pii/S0933365723000544

⚠️ 坑点 7:采集设备/参考/通道布局随子集而变(分类:工程陷阱)

问题:SS4 用 CLE 参考 + C3/C4/O1/O2;SS5 用 LER(10 kΩ)+ 最多 20 电极;SS3 也含延伸蒙太奇。把不同子集的原生通道原样拼接,等于混入参考与通道差异。

症状:同一网络在不同子集输入的通道数不同导致崩坏;跨子集训练时模型把参考差异当信号。

解决

  1. 简单方法:只取各子集共有的单通道(如 C4-A1 / C4,社区标准输入)做统一。
  2. 进阶方法:做共平均/双极重参考(如转为 C4-A1 差分)并统一通道顺序,再喂模型。
  3. SOTA 方法:做通道/参考不变的增强或域适配,或在多子集上用通道随机遮盖增强鲁棒性。
    参考https://borealisdata.ca/api/datasets/export;jsessionid=11c128a3c2cde5c6f5a4f1135aaa?exporter=html&persistentId=doi%3A10.5683/SP3/MUELFO

⚠️ 坑点 8:N1 类是长尾陷阱——分期"平均准确率"掩盖低 N1 召回(分类:评估误用)

问题:睡眠分期各阶段分布极不均衡,N2 动辄占一半、N1 常最少(SS1 的 N1 约 14%、SS3 约 8%)。只看 accuracy 会掩盖 N1 的低下识别。

症状:总准确率看似高(80%+),但混淆矩阵显示 N1 几乎全被分到 N2/REM;模型"学会了偷懒猜 N2"。

解决

  1. 简单方法:除 accuracy 外必报 macro-F1、Cohen’s Kappa 与逐类 F1(尤其 N1)。
  2. 进阶方法:用类别加权损失或重采样缓解长尾;报告混淆矩阵定位 N1 去向。
  3. SOTA 方法:参考综述统一评测口径(acc/κ/macro-F1),使你的结果能与 TinySleepNet、DeepSleepNet 等横向可比。
    参考https://pmc.ncbi.nlm.nih.gov/articles/PMC9707228/table/Tab4/

§6.6 数据增强

安全 ✅

  • 加性高斯噪声(低幅)——增强抗噪性,不改变分期语义。
  • 通道随机遮盖/丢弃(DropChannel)——模拟坏通道,已在通道鲁棒性研究中使用。
  • 小幅时移(<半个 epoch)——不跨阶段,增强时序平移不变性。
  • 幅度/增益抖动——生理信号振幅幅值缩放。

危险 ❌

  • 大幅时间拉伸/变速——会改变纺锤波频率结构,破坏分期语义。
  • 频率域随机重排/去相位——可能生成非生理波形,误导模型。
  • 跨子集无标注的伪增强(如直接混叠不同参考信号)——引入参考/通道伪影作为假特征。

判断增强是否"安全"的一条经验法则:若变换会改变"这段脑电应该属于哪个睡眠阶段"的人类判读结果,它就是危险增强;若它只改变记录噪声/振幅/通道呈现而保持阶段判读不变,则通常是安全的。下表把这四条判据落到 MASS 的具体场景:

增强 是否改变阶段语义 安全判定 依据
低幅高斯噪声 ✅ 安全 阶段判读不变,增强抗噪
通道随机遮盖 否(少通道时近似) ✅ 安全 模拟坏通道
< 0.5 epoch 时移 ✅ 安全 不跨越阶段边界
幅度增益抖动 ✅ 安全 阶段判读对绝对幅值不敏感
大幅时间拉伸 是(纺锤波频率漂移) ❌ 危险 破坏 N2 纺锤波判据
跨参考伪混叠 ❌ 危险 引入假通道特征

§6.7 模型推荐表

任务 推荐起点 输入 理由
单通道分期(入门) TinySleepNet 单通道 EEG(C4/F4),30 s epoch,序列窗 轻量、可快速复现社区 87%+ 成绩
高精度分期 DeepSleepNet / SeqSleepNet 单/多通道 + 上下文序列 经典高精度架构,基线充足
跨库迁移 SleepTransformer / XSleepNet 单通道 在 MASS 上评测且向 SHHS 等泛化记录良好
表征学习 自监督 EEG encoder 全通道 PSG 利用多通道预训练后再下游分期

§6.8 硬件需求表

配置 内存 GPU 适用
最小(CPU 调试) 16 GB SS2 单子集小实验、事件检测原型
标准(单卡) 32 GB 1×12-16 GB SS3/SS1 分期训练(TinySleepNet 级)
扩展(多子集/迁移) 64 GB 1×24 GB 或以上 SS1-SS5 合并、域自适应、表征预训练

单通道 30 s、100 Hz 输入下,每记录约 700-1000 个 epoch,SS3(62 例)单卡数小时可收敛;合并全库或做迁移需多卡或更长时间。

§6.9 评估指标代码

# -*- coding: utf-8 -*-
# MASS 分期评测标准口径:Accuracy / Cohen's Kappa / macro-F1 / 逐类 F1
from sklearn.metrics import accuracy_score, cohen_kappa_score, f1_score

def evaluate(y_true, y_pred, labels=None):
    labels = labels or [0, 1, 2, 3, 4]     # W, N1, N2, N3, REM
    acc = accuracy_score(y_true, y_pred)
    kappa = cohen_kappa_score(y_true, y_pred, labels=labels)
    macro_f1 = f1_score(y_true, y_pred, labels=labels, average="macro",
                        zero_division=0)
    per = f1_score(y_true, y_pred, labels=labels, average=None, zero_division=0)
    return {"acc": acc, "kappa": kappa, "macro_f1": macro_f1,
            "f1_per_class": dict(zip(labels, [round(float(v), 4) for v in per]))}

# 使用示例
# print(evaluate(y_true_val, y_pred_val))

§6.10 MLOps 笔记

  • 版本锁定:论文方法中注明使用子集(如 MASS-C1/SS3)与确切记录清单;数据为 Borealis 2022-01-13 V1。
  • 引用三件套:数据集论文(10.1111/jsr.12169)+ 你使用的具体子集 DOI(见 §9)+ 官方平台链接。
  • 可复现清单:记录 (a) 手册合并映射 (b) epoch 对齐方式 © 受试者级划分种子与记录 ID (d) 通道/参考选择——缺一不可。
  • 伦理留痕:生物信号受当地 IRB 约束,模型与派生数据不得未经授权共享给第三方;云端 LLM 处理须遵守数据使用协议的零留存要求。

工程化要点补充:MASS 的 EDF 文件较大,读取时建议用 preload=False + 惰性加载,按需切片而非一次性载入整夜波形;多次跑同一子集时,把 §6.3/§6.4 产出的 .npz 作为缓存层可把训练启动成本从"每次读 GB 级 EDF"降到"毫秒级读数组"。在团队/持续集成环境里,把"记录 ID + 划分种子 + 预处理哈希"打进实验目录名,能有效防止"改了预处理却不自知"导致的复现事故。


§7 质量评估与局限性

§7.1 已知偏倚表

类型 描述 严重程度 缓解
人群选择偏倚 健康志愿者为主,非患者队列 中-高 明示人群属性;用患者库外部验证
年龄双峰偏倚 SS1 老年 vs SS2/4/5 青年,整体非均匀 按子集/年龄分层报告
单城市偏倚 全来自蒙特利尔三家睡眠实验室 跨库(SHHS/Sleep-EDF)验证
手册不一致 双分期手册/双 epoch 造成语义混叠 N3/N4 合并 + 手册域标识
标注者偏倚 事件级标注一致性低(κ≈0.39) 高(事件级) 双专家四真值报告
记录稀疏性 每受试者多为 1 例记录 以记录为样本单位即可

对上述偏倚的三个关键提醒:

  1. 人群选择偏倚是 MASS 最被低估的点——档案的官方定位是"研究志愿者/探索性数据",并非"睡眠障碍患者库"。若你的下游课题是失眠、OSA 等临床人群,仅靠 MASS 训练的分期模型在真实患者上会有系统性掉点。
  2. 年龄双峰是"特征"而非"缺陷"——只要你不把它误当均匀人群,SS1(老年)与 SS2/4/5(青年)的并存反而是跨年龄泛化研究的宝贵素材。
  3. 手册不一致是"可修复偏倚"——通过 N3/N4 合并与 20 s→30 s 对齐可显著缓解,且对齐过程本身即可复现,这与人群偏倚这类"不可修复偏倚"性质不同。

§7.2 标注质量

分期层面由训练有素的专家人工判读,是 MASS 的核心资产,质量与 CÉAMS 的资深技师/评分者规范绑定;但事件级标注主观性显著——SS2 两纺锤波专家的 κ≈0.39 即为例证。分期与事件两级标注质量不可混为一谈:分期类别在多数迁移研究中被视作相对可靠的真值,而事件检测必须谨慎对待"单一标注者即绝对真值"的假设。

需要澄清的是,纺锤波的低一致性很大程度来自判读协议差异而非单纯技能差距:V4 恪守传统 AASM 定义(往往设最小持续时长 0.3 s),而 V5 借助 11-17 Hz sigma 滤波、刻意捕获更短/更小/被背景波遮蔽的纺锤波且未设时长下限。因此这两名专家并非"谁更准",而是"定义不同"。对分期这类更大颗粒、更规范化的任务,标注者间一致性通常远高于事件级任务——但 MASS 未公开大规模分期重评分研究,分期层面的"专家共识置信区间"仍是使用者需自行通过重复评测验证的空缺。

§7.3 泛化性表

场景 失效风险 证据
MASS → Sleep-EDF 中(手册/采样率/单通道差异) 多篇迁移论文报告源-目标精度下降
MASS → SHHS 中-高(社区队列、家庭 PSG、R&K) 跨库评测普遍显著掉点
MASS → 患者库(ISRUC/OSA) 高(人群偏倚 + 设备差异) 需额外微调或域适配
子集间 SS1/SS3 → SS2/4/5 中(手册 + epoch 未对齐时) 对齐后有所缓解

§7.4 伦理

MASS 采用分级访问来平衡开放性与受试者隐私:开放描述符 CC0 开放;生物信号与人口学需研究者具备机构隶属 + 当地伦理委员会批准 + 假设审查。这一机制保证了受试者身份数据不公开散播,同时让合规研究者获得完整数据。使用者须遵守数据使用协议,不得将生物信号未经授权地转给第三方或用于在线平台的模型训练。

§7.5 公平性

MASS 的性别比例在总样本上接近平衡(97 男/103 女),但按子集看分布不均(SS4 26 女/14 男等);种族/民族变量不公开(仅受限描述符可能含部分人口学信息)。由于缺乏种族标签,跨族裔公平性无法在库内直接评估——应视作待外部数据补足的限制。

§7.6 数据漂移

MASS-C1 采集于 2001-2013 年、分期与发布集中于 2014-2022 年,属于"相对静态"的归档档案,不存在持续滚动更新带来的在线漂移。真正的"漂移"体现在设备世代与现代 PSG 蒙太奇的差异,以及分期规则随 AASM 手册修订的演进——把 2014 年的标注直接用于今日临床级分期假设时,需评估规则漂移风险。

§7.7 DAIMS 24 项数据就绪度评估

# 检查项 状态 说明
1 数据为宽格式(每行一个样本/事件) 每记录 1 例整夜 PSG;epoch 为行级单元
2 有唯一标识符列 记录号 01-xx-xxxx(cohort-子集-编号)唯一
3 无 Unicode 或特殊字符 ⚠️ EDF 标注文本含手工描述,需清洗与标准命名
4 无重复行 每记录独立;无重复采样段问题
5 缺失值已识别并编码 ⚠️ 通道断/未评分段不统一标记;需自行检测
6 标签列被明确标识 分期为明确五类(六类 R&K)靶标
7 已对罕见类别(<3%)进行分组 ⚠️ N3(深睡)占比低、N1 亦偏少,未预分组
8 偏倚评估已完成 §7.1 人群/手册/标注者偏倚分析
9 有完整的数据字典 ⚠️ 官方描述论文 + Borealis 元数据;无逐通道逐字段表
10 对"信息性缺失"有明确编码解释 ⚠️ 未评分起始、SS2 V5 弃标属信息性;无统一编码
11 数据采集设备和设置已记录 §3.9 采样率/参考/通道布局齐全(Harmonie 等)
12 已移除完全共线性变量 各信号通道物理上独立,无重复变量问题
13 对编码的映射标准已说明 AASM/R&K 与 N3/N4 映射社区惯例明确
14 对时间戳的处理已明确说明 ⚠️ 官方注明分期起点偏移,但未给统一对齐规范
15 训练/验证/测试划分建议已给出 官方无划分;依赖社区工具协议
16 数据泄漏风险已被讨论 §5.3 受试者级划分 + 手册混淆泄漏
17 标签分布已被分析 §4.2 SS1/SS3 逐类 epoch 计数
18 选择性测量偏倚已被讨论 健康志愿者人群 + 事件标注者差异
19 外部验证建议已给出 §5.5 MASS→SHHS/Sleep-EDF/ISRUC 跨库验证
20 数据更新和版本信息已记录 ⚠️ 论文 2014 + Borealis V1 2022;无逐版本 change log
21 最小必要预处理脚本已提供 ⚠️ 无官方脚本;依赖 SleePyCo/sleepless 社区实现
22 合规使用要求已明确 IRB 申请 + CC0 开放描述符 + 引用条款
23 多模态对齐方法已说明 EEG/EOG/EMG/ECG 同步于同一 EDF;分期与之时间对齐
24 去标识化方法已被记录 分级访问隔离身份数据;生物信号去元数据后分发

DAIMS 评分:18.5 / 24

评分解读良好——数据格式统一(EDF)、分期与事件标注质量有量化记录、跨库生态成熟;扣分项集中在"档案型数据集"的先天短板:无官方 train/test 划分、无官方预处理脚本、双手册/双 epoch 需自行对齐、缺乏逐字段字典。

对你意味着什么:MASS 的 18 个 ✅/⚠️ 项反映了它在"标注与生态"上极强、在"工程封装"上靠社区补位。真正要你亲自动手的有三件事:一是划分——任何论文前先定受试者级划分协议(社区惯例见 §5.2);二是对齐——把 R&K 的 N3/N4 合并成 AASM 五类、把 20 s 转成 30 s(§6.3);三是质量声明——报告用子集、记录清单与手册来源。这三件事做扎实,MASS 就能像基准论文那样给你可复现、可横向比较的结果。

§7.8 外部验证矩阵

外部数据集/场景 来源机构 评估任务 性能指标 相对内部变化 关键发现
Sleep-EDF 多方(PhysioNet 分发) 自动睡眠分期迁移 acc 较单库下降明显 显著掉点 手册/通道差异是迁移主障碍
SHHS 美国 NSRR 分期迁移与域自适应 acc/κ 下降 中-高 社区队列 + R&K 需域对齐
ISRUC-Sleep 葡萄牙 Coimbra 分期迁移到患者人群 acc 下降 人群偏倚是主要来源

注:上表性能数字因各迁移论文划分/通道/epoch 不同难以统一抄录,故以"变化趋势 + 定性发现"呈现;精确数值请回原论文核对。

关于这张表的三点补充:其一,MASS 作为"源"时,被迁移到患者/社区库(SHHS、ISRUC)的掉点主要来自人群偏倚与采集环境差异,而非分期标注质量;其二,作为"目标"时,用 MASS 验证外部模型能暴露对方模型对健康志愿者人群的适配度,但不代表其在临床人群的表现;其三,表中"相对内部变化"均指"相对该论文在 MASS 单库的内部成绩",不同论文的内部分数不同,横向看趋势比看绝对值更有意义。


§8 基准性能与生态

§8.1 排行榜(睡眠分期 subject-wise)

以下为在 MASS 上(多为 AASM 子集)以受试者级划分报告的典型分期成绩。不同论文的子集、通道、epoch、划分不一致,数值不可直接精比,仅作量级参考。

排名 模型 准确率 Macro-F1 κ 年份 关键技术 完整引用 代码
1 TinySleepNet 87.5% 83.2 0.82 2020 CNN+RNN 轻量自编码分期 Supratak & Guo, IEEE JBHI 2020 https://github.com/akaraspt/tinysleepnet
2 Classical ML (Catboost) 86.7% 81.7 0.803 2022 EEG+EOG+EMG 特征+GBM —(聚合榜单)
3 IITNet 86.3% 80.5 0.79 2019 CNN+RNN,raw F4-EOG,many-to-one Zhou et al., 2019
4 DeepSleepNet 86.2% 81.7 0.80 2017 CNN+RNN + 深度监督 Supratak et al., IEEE TBME 2017 https://github.com/akaraspt/deepsleepnet
5 SeqSleepNet 87.0% ~83.3 0.815 2019 序列注意循环网络 Phan et al., IEEE TNSRE 2019
6 XSleepNet 87.6% 83.8 0.823 2021 序列端到端分期 Phan et al., 2021

注:表格取自 Wizwand/综述聚合,同一模型在不同来源报告略有出入(如综述 PMC9707228 中 DeepSleepNet 为 acc 86.4/κ 0.805/MF1 82.2)。评判任何新模型时,务必锁定与基准论文完全一致的子集、通道、划分与评测脚本

§8.2 SOTA 总结与选型建议

目前 MASS 上单通道分期的实用 SOTA 在 acc ≈ 87-88%、macro-F1 ≈ 83-84%、κ ≈ 0.82 附近(以受试者级、AASM 五类、30 s epoch 计)。选型建议:追求轻量与快速迭代用 TinySleepNet;追求高精度与公平对比用 XSleepNet/SeqSleepNet 级序列模型;跨库迁移任务优先选在 MASS 与 SHHS 均有报告的模型(如 XSleepNet),以便引用其外部泛化证据。

判断一个"新纪录"是否真的更高,务必先对照下表所列的可变性来源——这些因素每差一项,分数都可能偏离几个百分点:

可变因素 影响
用 SS1/SS3(AASM)还是 R&K 子集 手册不同导致标注语义与 class 数不同
epoch 20 s 还是 30 s 与绝大多数 30 s 基准不可比
单通道 vs 多通道 输入信息量不同
受试者级还是 epoch 级划分 决定有无泄漏,可差数个百分点
是否含邻域上下文 序列模型 vs 逐段模型天然不同

§8.3 评测协议

社区对 MASS 的评测协议趋同:以受试者(记录)为单位做 train/val/test;训练样本为 30 s epoch 五类;指标统一报 acc / Cohen’s Kappa / macro-F1(+ 逐类 F1);序列模型使用邻域上下文。R&K 子集须先将 N3/N4 合并为 N3 再与 AASM 口径对齐。报告时写明子集、通道、epoch、参考选择、划分种子与记录清单。

数据集 定位 与 MASS 的关系
Sleep-EDF(2013/2018) 单通道入门 PSG 迁移目标;分期对比
SHHS 社区睡眠队列 迁移目标;规模最大的泛化检验
ISRUC-Sleep 患者(OSA 等) 患者人群迁移对照
Physio2018(Cinc Challenge) 大规模简化 PSG 挑战赛协议范本
DREAMS 睡眠纺锤波小样本数据库 事件检测(纺锤波)交叉验证

这些数据集与 MASS 最常见的搭配不是"比拼谁更强",而是构成迁移链条:论文常选 1-2 个训练源(往往是 MASS)加 1-2 个跨库目标(Sleep-EDF/SHHS),用来回答"这个分期模型换到别的设备/人群/手册还灵不灵"。相比单库刷分,这种跨库评测更能反映真实部署价值,也是近年来睡眠 AI 论文的主流写法。

§8.5 关键论文 Top5

  1. O’Reilly C, Gosselin N, Carrier J, Nielsen T (2014), J Sleep Res 23(6):628-635. “Montreal Archive of Sleep Studies: an open-access resource for instrument benchmarking and exploratory research.” — 数据集本体论文,权威引用入口。DOI: 10.1111/jsr.12169
  2. O’Reilly C, Nielsen T (2015), Front. Hum. Neurosci. 9:206. 利用 MASS-SS2 与双专家纺锤波标注评估检测方法,量化标注者间低一致性的方法论文献。DOI: 10.3389/fnhum.2015.00206
  3. Supratak A, Guo Y (2020), IEEE JBHI. “TinySleepNet: An efficient deep learning model for sleep stage scoring based on raw single-channel EEG.” — MASS 上广泛引用的轻量分期基准。DOI 见期刊。
  4. Supratak A, Dong H, Wu C, Guo Y (2017), IEEE TBME 64(6):1286-1295. “DeepSleepNet.” — 分期深度基线。DOI: 10.1109/TBME.2016.2600793
  5. Phan H 等(2019/2021),IEEE TNSRE / J.Neural Eng. “SeqSleepNet / XSleepNet.” — 序列端到端分期,跨库(MASS/SHHS)报告的代表。DOI 见期刊。

一句话定位这些论文在 MASS 生态中的分工:论文 [1] 定义了档案本身;[2] 揭示了 MASS-SS2 事件级标注的主观性(纺锤波 κ≈0.39)并示范了用多真值评测事件检测器;[3][4] 是绝大多数分期复现所依赖的轻量/深度基线模型;[5] 展示了在 MASS 训练后向 SHHS 迁移的高精度序列方案——合起来覆盖了"数据→标注→模型→评测"的完整链路。复现任何分期论文前,先核对它引用了上面哪一组,能帮你判断对方用的是哪个子集与通道口径。

§8.6 社区活跃度

MASS 是 SleePyCo(gist-ailab)、sleepless 等开源睡眠工具包的官方支持数据集;围绕其形成了"20 s→30 s、R&K→AASM、受试者级划分"等半标准化实践。因其需人工伦理申请、不能一键下载,社区活跃度体现在"论文评测惯例"而非"在线下载量"——被引用 443+(Google Scholar,截至 2026-09)即为其科研热度指标。

活跃度的另一个可见维度是评测口径的收敛:不同团队逐渐统一到 acc / κ / macro-F1 三指标 + 受试者级划分,使分散论文的成绩首次可在同一把尺上比较——这在档案型 PSG 数据集中并不常见。社区的热议话题仍集中在:手动/自动分期在 R&K 子集上的语义可比性、跨库迁移的公平评测、以及事件级标注(纺锤波)的真值规范。

§8.7 生态快照表

资源 类型 链接 推荐理由
CEAMS MASS 官方页 官方入口 http://ceams-carsm.ca/mass/ 权威下载/申请流程与子集说明
Borealis Dataverse/MASS 数据托管 https://borealisdata.ca/dataverse/MASS 各子集 DOI、开放文件直接下载
SleePyCo 工具 https://github.com/gist-ailab/SleePyCo 五数据集统一预处理,含 MASS 结构支持
sleepless 工具 https://sleepless.readthedocs.io/ MASS 内建 loader 与受试者级划分协议
Wizwand SOTA 页 评测聚合 https://www.wizwand.com/sota/sleep-stage-scoring-on-mass-subject-wise 各模型在 MASS 上的分数一览

§9 相关资源与引用

官方资源

子集与数据 DOI

内容 子集 DOI
生物信号 + 睡眠分期 SS1 10.5683/SP3/OVISPE
生物信号 + 睡眠分期 SS2 10.5683/SP3/K26LXJ
生物信号 + 睡眠分期 SS3 10.5683/SP3/9MYUCS
生物信号 + 睡眠分期 SS4 10.5683/SP3/MUELFO
生物信号 + 睡眠分期 SS5 10.5683/SP3/WZQMAB
睡眠标注 SS1 10.5683/SP3/8ZEAWT
睡眠标注 SS2 10.5683/SP3/Y889CS
睡眠标注 SS3 10.5683/SP3/YD8AYI
睡眠标注 SS4 10.5683/SP3/CHG82L
睡眠标注 SS5 10.5683/SP3/7BBHEH
数据集论文 10.1111/jsr.12169

BibTeX 引用

@article{oreilly2014mass,
  title={Montreal Archive of Sleep Studies: an open-access resource for instrument
         benchmarking and exploratory research},
  author={O'Reilly, Christian and Gosselin, Nadia and Carrier, Julie and Nielsen, Tore},
  journal={Journal of Sleep Research},
  volume={23},
  number={6},
  pages={628--635},
  year={2014},
  doi={10.1111/jsr.12169}
}

引用指南

使用 MASS 数据发表任何成果,按官方条款须引用数据集论文(10.1111/jsr.12169)。严谨做法是"论文 + 实际使用的子集 DOI + 官方页面"三件套一起引用,并注明访问/数据版本日期(Borealis V1,2022-01-13 发布)。

场景 应引用 说明
任何使用 MASS 的成果 O’Reilly et al. 2014(10.1111/jsr.12169) 官方硬性条款,缺一不可
使用某一子集的生物信号/分期 该子集 DOI(如上表) 指明数据来源便于他人复现
使用开放描述符 对应子集 DOI + CEAMS 官方页 追溯托管与分发渠道
提到分期/标注细节 可在上述基础上加引 O’Reilly & Nielsen 2015 澄清事件级标注的判读差异

子集 DOI 采用"一子集两类文件"设计(生物信号+睡眠分期 与 睡眠标注 各一个 DOI),引用时应与实际下载的文件集匹配,避免张冠李戴。

输入来源清单(研究检索引用)

  1. O’Reilly et al. 2014, J Sleep Res — 数据集论文
  2. CEAMS 官方 MASS 页(ceams-carsm.ca/mass/)— 子集/申请流程
  3. Borealis Dataverse/MASS 各子集元数据(borealisdata.ca)— 记录数/年龄/通道/许可
  4. Sciencedirect 迁移学习综述(S0933365723000544)— epoch 计数/手册分布
  5. Emergent Mind MASS 专题(emergentmind.com)— 蒙太奇/规范综述
  6. SleePyCo / sleepless 文档 — 目录结构/受试者级划分
  7. PMC9707228(Artif Intell Rev 2022 综述)— 分期模型性能表
  8. Wizwand SOTA 页 — subject-wise 排行榜

§10 AI 使用声明卡

§10.1 AI 模型使用

本文由 AI 写作 Agent(large language model)根据检索到的公开事实生成初稿,并经人工编辑审核。AI 用于:整合 CEAMS/Borealis/PubMed 等多来源事实、构建符合 AI-Ready 结构规范的章节、撰写代码示例与数据字典。所有规模数字、子集构成、DOI、基准分数均来自检索来源。

§10.2 AI 参与范围

AI 负责组织事实、起草叙述与生成代码骨架;事实核对、数字来源标注、医学/工程审校与最终发布由千方病案医学编辑部完成。任何未经检索确认的数值均已省略而非臆造。

§10.3 输入来源列表

  1. O’Reilly, C., et al. (2014), Journal of Sleep Research 23(6):628-635. DOI: 10.1111/jsr.12169
  2. CEAMS MASS 官方页 — http://ceams-carsm.ca/mass/
  3. Borealis Dataverse / MASS — https://borealisdata.ca/dataverse/MASS
  4. Borealis SS2/SS3/SS4/SS5 子集元数据页(2022-01-13,V1)
  5. PubMed/Medscape MEDLINE 摘要(PMID 24909981)
  6. Frontiers in Human Neuroscience 9:206(纺锤波方法,含 κ≈0.39)
  7. PMC5435763(纺锤波检测多目标优化,SS2 标注细节)
  8. ScienceDirect 迁移学习论文(S0933365723000544,epoch 计数与手册)
  9. SleePyCo README/文档(DeepWiki 镜像)— 目录结构与下载入口
  10. sleepless.readthedocs.io — MASS loader 与受试者级划分协议
  11. PMC9707228 — Artif Intell Rev 2022 睡眠分期综述(性能表)
  12. Wizwand SOTA 页 — subject-wise 排行榜
  13. Emergent Mind MASS 专题 — 蒙太奇与规范综述
  14. Google Scholar 引用快照(443,检索于 2026-09-09)

§10.4 人工校验表

内容模块 审核者 审核方式 审核状态
§2 医学背景(睡眠分期手册、SNOMED/ICD 映射、金标准) 千方病案医学编辑部 交叉审核 ✅ 已通过
§3 数据集规格(200 例、五子集构成、格式、DOI) 千方病案医学编辑部 与 Borealis 官方元数据及论文摘要交叉比对 ✅ 已验证
§4 数据结构(DAIMS 字典、epoch 计数、目录树) 千方病案医学编辑部 与 CEAMS/Borealis/SleePyCo 文档交叉比对 ✅ 已验证
§5 数据划分策略 千方病案医学编辑部 交叉审核 ✅ 已通过
§6 代码示例与坑点 千方病案医学编辑部 逻辑审查 + 与社区工具惯例比对 ✅ 已通过
§7 质量评估与 DAIMS 评分 千方病案医学编辑部 交叉审核 ✅ 已通过
§8 排行榜与引用数表述 千方病案医学编辑部 与 Wizwand/综述/原文及 Scholar 快照交叉比对 ✅ 已验证
§C JSON-LD @graph 千方病案医学编辑部 Schema v3.9 字段逐项校验 ✅ 已通过

§10.5 AI 生成章节标注

以下章节由 AI 生成初稿并经人工审核:§1.0 30 秒速览、§3.0 版本抉择矩阵、§4.0 目录树、§6.0-§6.4 代码示例、§6.5 八个坑点、§6.9 评估指标代码、§7.7 DAIMS 评估表与评分、§8.7 生态快照、§C JSON-LD。

§10.6 最后审核

最后一次人工审核日期:2026-09-05

页面状态:published(全部内容已完成审核并发布)

返回 AI-Ready 数据集