一、赛事背景
在智能科技日新月异的当下,语音关键词检测功能已深度融入大众生活。无论是清晨唤醒智能音箱播放新闻,还是驾车途中唤醒车载语音助手导航,语音关键词检测技术为人们带来极大便利。但现有技术以已知关键词的定制系统为主,如果使用户能够定义自己的关键词,提供更大程度的灵活性和更好的用户体验个性化成为更具挑战的目标。考虑到用户定义的关键字短语可能与训练数据的分布不一致,导致检测性能的下滑,使用示例查询(Query-by-example)技术成为用户自定义关键词检测功能的热门选择。
二、赛事任务
基于语音注册的关键词检测任务,需要根据注册语音作为先验,自适应的识别测试音频中同文本的关键词。本次大赛提供了多人"文本-语音"配对的关键词作为训练样本,参赛选手需基于提供的样本构建模型,并使用测试集的关键词注册语音,预测关键词测试语音是否与注册语音文本相同。
训练数据:任何开源训练集(含噪声集)均可使用,但须注明来源。
外部模型:允许使用开源模型权重进行特征提取(如 whisper 等); 严格禁止使用任何开源模型权重或 API 直接参与关键词检测判决,开源模型的输出必须服务于训练选手自己的模型
测试:测试集声学场景大致涵盖 -10 ~ 5 dB,将加入部分发音相似词(如 hi <–> haier)以模拟设备误唤醒痛点。
三、评审规则
- 数据说明
本次比赛为参赛选手提供了以下数据:【训练音频,训练文本】信息,二者相匹配,以及【噪声音频】。参赛选手可以自行配对生成训练样本对,相同关键词的唤醒标签为 1,不同为 0,并选择对音频进行加噪。每条标准训练样本可参考【①注册音频,②注册文本,③测试音频,④唤醒标签】。在推理时,需要判断【③测试音频】和注册信息(包含①注册音频和②注册文本,选手可自行决定使用哪些信息)是否匹配来决定是否唤醒,给出唤醒标签,0 代表不唤醒,1 代表唤醒,然后与④唤醒标签进行比较,计算指标。
出于数据安全保证的考虑,所有数据均为脱敏处理后的数据。数据集提供训练集的全部数据以及测试集的【注册文本,注册音频,测试音频】信息,测试集不提供标签信息和测试音频对应的文本信息。
数据字段说明
数据集划分
注:对于训练集中的样本对,选手可以基于标签自行配对更多样本,此外,开源数据和开源噪声也被允许使用,但需要在最终结果中提交使用的数据集详情。
- 评估指标
本模型依据提交的结果文件,采用 AUC(macro-average) 进行评价,比赛文件夹中提供了指标计算代码示例,选手应提交每条测试样本的唤醒后验概率用于 AUC 计算。
计算步骤:
(1)统计 TP(正确唤醒数),FP(错将其他词预测为唤醒词),FN(漏唤醒数)
(2)通过第一步的统计值计算模型的召回率 TPR 和误警率 FPR,计算公式如下:
(3)通过第二步计算结果计算离散 AUC,得到最后评测结果,计算方式如下:
根据 AUC 得分决定最后的模型得分:score = AUC
训练结果
root@dsw-2040063-54c995dd6-jn7d5:/mnt/workspace/keyword_detect/baseline# python train.py # 训练模型train:50000/50000pairs model params:22,978(0.02M)ep1100/390loss=3.2576ep1200/390loss=2.8155ep1300/390loss=2.5900[epoch1]seen=0.5760unseen=0.5045mean=0.5403(25s)saved ->/mnt/workspace/keyword_detect/baseline/checkpoints/best.pt ep2100/390loss=1.7608ep2200/390loss=1.7095ep2300/390loss=1.6690[epoch2]seen=0.5865unseen=0.5044mean=0.5455(23s)saved ->/mnt/workspace/keyword_detect/baseline/checkpoints/best.pt ep3100/390loss=1.4723ep3200/390loss=1.4363ep3300/390loss=1.4289[epoch3]seen=0.5848unseen=0.5023mean=0.5435(23s)ep4100/390loss=1.2969ep4200/390loss=1.3003ep4300/390loss=1.2816[epoch4]seen=0.5869unseen=0.5024mean=0.5446(22s)ep5100/390loss=1.2193ep5200/390loss=1.2098ep5300/390loss=1.1897[epoch5]seen=0.5847unseen=0.4992mean=0.5420(22s)ep6100/390loss=1.1135ep6200/390loss=1.1169ep6300/390loss=1.1147[epoch6]seen=0.5792unseen=0.5091mean=0.5442(23s)ep7100/390loss=1.0586ep7200/390loss=1.0718ep7300/390loss=1.0582[epoch7]seen=0.5833unseen=0.5045mean=0.5439(23s)ep8100/390loss=1.0114ep8200/390loss=1.0094ep8300/390loss=1.0087[epoch8]seen=0.5859unseen=0.5009mean=0.5434(23s)ep9100/390loss=0.9752ep9200/390loss=0.9809ep9300/390loss=0.9672[epoch9]seen=0.5868unseen=0.4985mean=0.5426(22s)ep10100/390loss=0.9521ep10200/390loss=0.9413ep10300/390loss=0.9366[epoch10]seen=0.5880unseen=0.4982mean=0.5431(23s)done. best dev mean AUC=0.5455root@dsw-2040063-54c995dd6-jn7d5:/mnt/workspace/keyword_detect/baseline#推理结果
root@dsw-2040063-54c995dd6-jn7d5:/mnt/workspace/keyword_detect/baseline# python infer.py # 推理loaded /mnt/workspace/keyword_detect/baseline/checkpoints/best.pt(dev meanAUC=0.5454807083333333)total:100000rows wrote /mnt/workspace/keyword_detect/baseline/submission.csv提交文件
赛题使用 AUC 作为评价指标,AUC越高,代表模型二分类判别能力越强,排名越靠前 。
提交记录