☰
brain2qwerty数据完全指南:如何下载并处理262GB的SpanishBCBL MEG/EEG数据集
2026/10/15 10:54:59 网站建设 项目流程

【免费下载链接】brain2qwerty

Non-invasive decoding of typed sentences from MEG and EEG brain recordings using a convolutional encoder, transformer, and character-level language model.

项目地址:https://gitcode.com/gh_mirrors/bra/brain2qwerty
点击查看免费下载

brain2qwerty 是一个从 MEG(脑磁)和 EEG(脑电)非侵入记录中解码敲击句子的开源项目,它的核心训练数据是约262GB 的 SpanishBCBL 数据集。很多新手第一次接触这个项目时,最头疼的就是:数据从哪下、下多大、目录长什么样、怎么清洗成能喂给模型的训练样本。本文将带你走完完整流程——下载、理解结构、事件对齐、信号预处理、缓存预热、验证可用性,全部基于仓库内 brain2qwerty_v1/README.md 与 studies/spanishbcbl.py 的真实实现。

一、先认识 SpanishBCBL 数据集:262GB 里装了什么

SpanishBCBL 数据集由 BCBL(Basque Center on Cognition, Brain and Language)采集,被试在 MEG 磁控椅中完成"读句 → 记忆 → 敲击输入"任务,数据由三类文件组成:

内容格式说明
MEG 原始记录.fif每个被试 2 个 session、每个 session 含 block1/block2 敲击任务 + tapping 任务
EEG 原始记录BrainVision(.vhdr等)61 通道、1000Hz,20 名被试、62 条时间线
行为日志.mat记录每次按键(key press/release)与 RSVP 单词呈现的精确时刻

几个关键数字,帮助你理解数据规模 📊:

  • 2 个 session / 被试,每个 session 有 2 个敲击 block(block1、block2)
  • 每个 trial 分两阶段:perception(RSVP 逐词呈现)和production(凭记忆敲击输入)
  • 每个 block 的前 2 个 trial 是练习 trial,其余为正式 test trial
  • 共128 句唯一测试句,最长 8 个词
  • MEG 侧经去重清洗后保留19 名独立被试(代码已内置被试合并与剔除逻辑,见 brain2qwerty_v1/utils.py 的select_participants)

数据集托管在 Hugging Face Hub 的bcbl190626/SpanishBCBL仓库(gated,需申请访问权限),下载入口就写在研究定义里:studies/spanishbcbl.py 中的HF_REPO_ID与_download()方法。

二、下载前准备:环境、磁盘与权限

1. 安装依赖

要求 Python 3.12+ 和一块 CUDA GPU(训练时),先装锁定版本依赖:

pip install -r requirements.lock pip install -e . --no-deps pip install neuralset neuralfetch # 数据层框架

2. 确认磁盘空间

262GB 是全量体积(MEG + EEG + 日志)。如果你只跑 v1 的 MEG 解码,只下MEG/*子树即可,能省下一大半空间。另外预处理特征缓存(BRAIN2QWERTY_CACHE)还会再占用可观空间,建议为缓存额外预留 100GB 以上。

3. 认证(gated 数据集必读)⚠️

该数据集是gated仓库,必须先通过 Hugging Face 认证,否则下载会报 401/403:

hf auth login # 或在环境变量中设置 HF_TOKEN

流程:先在 Hugging Face 页面申请bcbl190626/SpanishBCBL的访问权限并等待批准,再执行上面的登录命令。

三、下载 262GB 数据集的两种方式

方式一:用 hf CLI 手动下载(推荐新手)

支持断点续传,中断后重跑即可跳过已有文件:

# 全量下载(MEG + EEG + 日志) hf download bcbl190626/SpanishBCBL --repo-type dataset --local-dir SpanishBCBL # 只下 MEG 模态(跑 brain2qwerty_v1 就够用了) hf download bcbl190626/SpanishBCBL --repo-type dataset --local-dir SpanishBCBL --include "MEG/*" # 只下 EEG 模态 hf download bcbl190626/SpanishBCBL --repo-type dataset --local-dir SpanishBCBL --include "EEG/*"

方式二:让 neuralset 自动下载

如果你只需要事件时序(按键/单词/句子的起止时间),不需要原始信号,可以让neuralset自动完成下载和事件构建(只拉取对应模态子树 + README):

import studies # noqa: F401 注册 Pinet2024Meg / Pinet2024Eeg from neuralset.events import Study study = Study(name="Pinet2024Meg", path="SpanishBCBL") # EEG 换成 "Pinet2024Eeg" study.download() # 从 HF Hub 拉取该研究的记录与日志到 path events = study.build() # 得到标准化事件 DataFrame

events每行一个事件,type列为Keystroke/Word/Sentence(外加Meg/Eeg原始记录行),start(起始秒)和duration(持续秒)就是时序信息。注意:这段代码要在仓库根目录运行(或先pip install -e .),因为studies是本仓库自带的研究定义包,见 studies/spanishbcbl.py。

下载完成后:配置环境变量

export BRAIN2QWERTY_STUDIES="$PWD/SpanishBCBL" # 原始数据根目录 export BRAIN2QWERTY_CACHE="$HOME/.cache/brain2qwerty" # 预处理特征缓存 export BRAIN2QWERTY_RESULTS="$HOME/.cache/brain2qwerty/results" # 检查点与输出

这三个变量的含义在 AGENT_README.md 的"Configuration & environment"一节有完整说明;读取它们的代码位于 brain2qwerty_v1/config/xp_config.py 的STUDY_PATH/CACHE/RESULTS。

四、看懂目录结构:文件是怎么组织的

以 MEG 为例,代码约定的目录布局(Pinet2024Meg加载器会按此结构定位文件):

SpanishBCBL/ ├── MEG/ │ ├── FIF/ # 原始记录,按 被试/会话日期/任务 组织 │ │ └── 05_3660/ │ │ └── 230419/ │ │ └── block1.fif │ └── logs/ # 行为日志,形如 S5-session1_block1_list1.mat └── EEG/ ├── EEG/ # BrainVision 记录(005_DECOMEG_S1_9846_task1.vhdr ...) └── logs/ # 行为日志(S5_session1_block1_*.mat)

加载逻辑在 studies/spanishbcbl.py 中,两个类各管一个模态:

  • Pinet2024Meg(别名"SpanishBCBL"):扫描MEG/FIF下的.fif文件,自动跳过 tapping 任务、重复目录、左手被试 S13,并维护一份已知坏文件黑名单BADS(如损坏的05_3660/230405/block1.fif)
  • Pinet2024Eeg:扫描EEG/EEG下的*_DECOMEG_*.vhdr,同样维护黑名单剔除日志缺失/错位的记录

也就是说,坏文件过滤、被试重命名等脏活代码已经替你干完了,你不需要手工整理 262GB 文件。

五、处理流程:从原始信号到训练样本

数据管线整体是:Study.run()产出事件表 → 链式EventsTransform清洗 → 切分 → 信号提取 → 特征编码 → 训练样本。逐段拆解:

1. 事件对齐与清洗(studies/spanishbcbl.py)

_load_timeline_events是核心入口,做四件事:

  1. 读日志:_read_log解析.mat,拆出 key 事件与 RSVP 呈现事件,计算按键持续时间
  2. 字符对齐:_preproc_log用match_list把"实际敲出的字符"与"目标句子"逐字匹配,标注每个按键属于哪个词(word_id)、词内第几个字符(char_id)
  3. 触发器校正:MEG 触发通道噪声较大,reassign_trigger_values用 DTW 对齐日志与 MEG 事件间隔,把正确 trigger 值回填
  4. 后处理:_postprocess_meta统一按钮语义(空格 →<space>、数字 →<number>等),生成 Word 事件并拼出 Sentence 事件

2. 训练侧预处理(brain2qwerty_v1/transforms.py)

配置在 brain2qwerty_v1/config/xp_config.py 中注册了两个 transform:

  • SpanishBCBLPreprocessing:剔除练习 trial、按select_participants收敛到 19 名独立被试、为每句生成唯一sentence_UID与每个按键的button_unique_id
  • Brain2QwertyV1Splitter:80/10/10 的句级 train/val/test 划分——先用 TF-IDF 余弦相似度把改写相近的句子聚成簇,再整簇分配到同一 split,防止同义句泄漏到测试集

3. 脑信号提取参数(新手常问"信号怎么切的")

xp_config中的neuro段定义了MegExtractor的关键参数:

参数值含义
frequency50重采样到 50Hz
filter(0.1, 20.0)带通滤波 0.1–20Hz
baseline(0.0, 0.2)按键前 0.2s 做基线校正
clamp5异常值截断(±5)
scalerRobustScaler稳健标准化
start/duration-0.2 / 0.5每个按键取前 200ms + 后 500ms 的 700ms 窗口

按键标签用LabelEncoder+ 预定义BUTTON_MAPPING编码成 29 类(含<space>、<special>、<number>),映射表见 brain2qwerty_v1/utils.py。

4. 缓存预热:让训练不再卡在读数据

特征提取是 CPU 密集型操作,全量跑一遍可能要数小时。仓库提供专门的cache模式提前构建特征缓存(brain2qwerty_v1/main.py 暴露cache子命令):

python -m brain2qwerty_v1.main cache # 全量预热(可配合 SLURM 集群并行) python -m brain2qwerty_v1.main cache --debug # 只跑 1 条时间线,快速验证

缓存建好后,后续train/eval直接命中BRAIN2QWERTY_CACHE,训练循环里几乎不再重复提取信号。

六、验证数据是否真正可用

下载和处理完,用两步确认管线健康 ✅:

第 1 步:单时间线全链路冒烟测试。仓库自带的实时检查脚本会依次执行:发现文件 → 读原始事件 → 应用两个 transform → 构建 extractor 和 segments → 拉取第一个样本,并打印事件类型分布、split 数量、张量形状:

python tests/live_spanish_check.py "$BRAIN2QWERTY_STUDIES" # 看到 "LIVE SPANISH CHECK PASSED" 即通过

脚本源码在 tests/live_spanish_check.py,它复现了xp_config里MegExtractor的完整参数,是很好的"管线解剖图"。

第 2 步:debug 训练。跑 1 条时间线、2 个 epoch 的单卡冒烟训练,确认 loss 下降且无 NaN:

python -m brain2qwerty_v1.main debug

通过后,就可以放心执行全量python -m brain2qwerty_v1.main train了。

七、常见问题排查(FAQ)

问题原因与解法
下载报 401/403 / 权限拒绝数据集是 gated 仓库:先在 HF 页面申请访问,再hf auth login或设置HF_TOKEN
下载中断直接重跑同一命令即可,snapshot_download/hf download自动断点续传、跳过已有文件
磁盘装不下 262GB加--include "MEG/*"(或EEG/*)只下单模态;v1 训练只需要 MEG
日志找不到 / 缺文件报错属正常现象:部分被试的日志确实缺失,BADS黑名单会自动剔除这些记录,不影响全量训练
被试数量对不上(S18/S14 等)多个 subject 编号属于同一个人(如 S18→S1、S14→S4),select_participants已自动合并,做按被试分析时以清洗后的subject列为准
预处理特别慢先main cache预热特征缓存;集群环境可用cluster="auto"让 exca 把 MEG 提取扇出到多节点并行

小结

回顾一下完整路径:申请权限 → hf CLI 下载(或 neuralset 自动拉取)→ 配置三个环境变量 → 理解 MEG/EEG 双模态目录 → 事件对齐与句级切分 → MegExtractor 信号提取 → cache 预热 → 冒烟验证。整套流程的代码入口都可以对照仓库内的 brain2qwerty_v1/README.md 找到。数据就位之后,下一篇可以聊聊 Conv + Transformer 解码器的训练与 N-gram 重打分如何把字符错误率再压下去。

【免费下载链接】brain2qwerty

Non-invasive decoding of typed sentences from MEG and EEG brain recordings using a convolutional encoder, transformer, and character-level language model.

项目地址:https://gitcode.com/gh_mirrors/bra/brain2qwerty
点击查看免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询