面向受限场景的低资源多语种分类挑战赛
赛题介绍
一、赛事背景
在全球化的浪潮中,语音技术已成为打破语言壁垒、增进文化交流的关键桥梁,然而,在低资源语言领域,行业内往往难以积累足够的语音数据以供模型训练,使得现有的语种分类系统在这些语言上的表现远不及主流语言。其次,语种分类技术在短语流、高噪声和实时场景的判别准确性仍然是工业界的一个技术难题。
鉴于此,我们希望通过举办“面向受限场景的低资源多语种分类”竞赛来激发全球研究学者、技术开发者和语音技术爱好者的创新热情,共同研究和开发适用于受限场景的低资源的多语种分类技术。
二、赛事任务
本次比赛的任务是开发一个面向受限场景下的低资源语种分类模型,这里受限场景指的是(1)每一位参赛者仅能使用提供音频1s以内的时长信息(含1s)就需要抛出语种分类的结果;(2)测试数据中覆盖了不同的噪声;本次比赛提供的测试集数据中包括了小于1s和大于等于1s的音频,其中针对大于1s的音频,参赛者只能使用前1s的信息(如果发现使用1s以后的音频信息则取消比赛资格)。
数据参赛者需要利用提供的低资源的开源语音数据集和噪声数据,训练一个高准确率和鲁棒的语种分类模型,并在测试集上进行评估。具体如下:
(一)数据
数据集请使用FLEURS开源数据来完成模型训练和验证,本次比赛面向低资源语种,因此请使用FLEURS中低资源语种;我们同时提供了开源噪声数据集MUSAN下载链接;数据集情况说明和下载链接如下:
数据介绍:https://www.openslr.org/17
MUSAN数据集下载链接:https://www.openslr.org/17
低资源语种限定范围:斯瓦希里语,阿姆哈拉语,阿萨姆语,约鲁巴语,尼泊尔语,冰岛语,卢森堡语,豪萨语,林加拉语,祖鲁语,信德语,马耳他语,爱沙尼亚语,吉尔吉斯语,旁遮普语,立陶宛语,白俄罗斯语,威尔士语,索马里语
即标签限定范围:['swahili' 'amharic' 'assamese' 'yoruba' 'nepali' 'icelandic' 'luxembourgish' 'hausa' 'lingala' 'zulu' 'sindhi' 'maltese' 'estonian' 'kyrgyz' 'punjabi' 'lithuanian' 'belarusian' 'welsh' 'somali']
三、评审规则
评估指标
本题评估指标设置为recall召回率(average设置为macro)。评测及排行
1)比赛提供下载数据,选手在本地进行算法调试,在比赛页面提交结果。
请注意:测试集仅可用于输出最终的推理结果,不可以任何形式参与训练过程。
2)排行按照得分从高到低排序,排行榜将选择团队的历史最优成绩进行排名。
四、作品提交要求
- 文件格式:按照txt格式提交,编码为UTF-8,提交格式见样例
- 文件大小:无要求
- 提交次数限制:每支队伍每天最多3次
- 排行榜更新结束后,前三名选手需要提交代码、模型和说明文档
- 提交样例:
1
00001 belarusian
测试音频名+Tab键+语种分类结果
五、赛程规则
- 本赛题实行一轮赛制
【赛程周期】
9月26日-10月30日
- 9月26日10:00发布训练集、开发集、测试集(即开启比赛榜单)
- 比赛作品提交截止日期为10月30日17:00,公布名次日期为11月中旬
解决方案及算法
比赛流程
看完赛题,首先因为笔记本算力有限、网络有限,因此本团队将开源数据集musan和fluers下载至本地来运行(fluers仅下载比赛需要的19种低资源数据集)。
随后,我先编写了一个使用卷积模型的训练脚本与对应推理脚本,将比赛提供的测试集推理出来提交,发现recall召回率(average设置为macro,此召回率应该是排行中的得分)得分仅0.05,因此,我们认识到CNN仍主要用于图像,对音频类处理表现并不佳。
接着我们尝试分析其音频频谱等特征,转为图片来尝试卷积模型训练,发现其频谱特征可能与语种分类有关,但训练后推理仍仅得分0.20左右,因此我们决定使用开源模型mms-lid-256进行训练,推理,最终得分0.42左右。
注意:mms-lid-256模型是facebook开源的,基于wav2vec2模型,wav2vec2模型是facebook开源的,基于Transformer的音频分类模型,其训练数据为LibriSpeech数据集,符合此赛题FAQ种允许使用的开源模型,因此我们使用该模型进行训练推理。
数据预处理
数据预处理方面:我们使用开源数据集musan进行数据增强,使用开源数据集fluers进行训练,使用比赛提供的测试集进行推理。
首先我随机读取了部分数据,发现如果按照比赛说的低资源要求:仅使用前1s的音频数据来推理,但如果全使用前1s的音频来进行训练,那么部分音频前1s可能是空白,没有人声,训练可能效果不佳,因此我采用的数据预处理方法是将fluers数据集切分为1s的音频片段,将所有的1s音频片段进行训练。(因为推理是1s的素材,因此采用1s的音频片段进行训练效果最好)注意:推理仅使用前1s的音频,符合比赛要求,并未使用1s后的音频。比赛提供的测试集并未以任何形式参与训练
针对未满1s的素材,留空(补零)会给模型误导信息,因此,我们采用的方法是,如果素材长度小于1s,则将素材复制,直到素材长度为1s,再进行训练。而大于1s的数据则直接切分为1s的音频,仅使用前1s来推理。
我们采用了musan数据集进行数据增强,增强模型的鲁棒性
模型训练
模型训练方面:我们使用开源模型mms-lid-256进行训练,训练时,我们采用断点续训的方式,即如果训练过程中断,则从上次训练的epoch继续训练,而不是重新开始训练,这样可以节省时间,同时也可以避免因为训练中断而导致的数据丢失。
这样做的好处是:
- 作为笔记本电脑,显存有限、内存有限,因此加载全部数据集训练会导致爆显存,因此,我们会每隔一段进度保存一次检查点。这样,如果训练中断,我们可以从上次保存的检查点继续训练,而不是重新开始训练。
- 为了确保连续性,除了保存检查进度,还需保存训练进度。
但是仍有缺陷,例如第二次载入时训练可能会降低模型的训练效果,导致模型训练不佳,因此尽量一次训练完成,或者第二次载入时需要等待到模型loss值稳定以及acc值稳定后才能保证训练效果。
模型推理
模型推理方面,也是采用与训练时同样的数据处理方法,但比赛要求推理的测试集仅允许使用前1s的音频数据,因此按此方式进行数据预处理。然后按照流程开始推理,输出submission.txt结果文件来提交。
优化
我们记录了详细的训练日志、推理日志、以及采用数据增强、训练方法、训练进度等,还输出了热力图来显示模型的训练效果,以便我们更好地了解模型的训练情况,从而更好地优化模型。
模型训练复现流程
项目说明
本项目主要包含两个脚本:
train.py:基于开源模型的语种分类模型训练(支持断点续训、MUSAN 增强、验证与测试评估)。g.py:批量推理,将测试集wav文件分类为目标语种。
目标在比赛中使用的运行环境为 Windows11(VScode powershell终端),Python 3.12.3,CPU。
本项目遵守比赛规则以及赛题FAQ
- 赛事材料基本使用要求
本次大赛提供的全部数据、信息等,视为科大讯飞的保密信息。未经允许,任何人不可以任何形式使用、传播、披露、授权他人使用。 - 选手参赛基本原则
作品必须健康、合法、无任何不良信息及商业宣传行为,不违反任何中华人民共和国有关法律。须保证原创性,不侵犯任何第三方知识产权或其他权利;一经发现或经权利人指出,主办方将直接取消其参赛资格,科大讯飞保留赛事解释权。 - 作弊行为界定及处罚
一旦发现任何利用平台或规则漏洞进行作弊的行为,以及其他一切使用不良手段影响竞赛公平、公正的行为,赛事组委会有权取消该选手成绩。尤其是同一团队组建多支队伍提交多次结果的刷榜行为,一经发现则取消所有雷同队伍的成绩。赛事组委会保留最终解释权。 - 数据集使用基础规范
选手按照赛事要求下载官方数据集进行比赛,请注意测试集仅可用于输出最终的推理结果,不可以任何形式参与训练过程。如有违反一经发现,取消其参赛资格。 - 是否允许使用除官方数据集之外的其他数据?如果允许,是否有限制,例如数据来源、数据集规模或数据处理方式?
允许使用FLEURS数据集之外的其他开源数据。但提交的报告必须明确使用的开源数据集信息。 - 是否允许使用预训练模型?如果允许,是否对预训练模型来源有限制,例如官方、开源、第三方训练?
可以使用开源预训练模型。 - 是否允许使用开源大模型?是否允许使用闭源大模型或API?
允许使用开源大模型,但不允许使用闭源大模型或API。 - 是否允许选手将数据集用于科研或论文发表?
可以。
注意
本次使用开源数据集musan和fluers
本项目使用的开源模型:mms-lid-256
本项目不使用比赛提供的测试集以任何形式参与训练过程
一、环境准备
1. 安装 Python
- 推荐 Python 3.12.3。
- 在 powershell 运行
python --version确认。
创建虚拟环境
1 | conda create -n fluers python=3.12.3 |
运行上述代码会安装默认的python库以及安装python 3.12.3版本(按y确认安装),如果不安装虚拟环境,请默认安装以上库
进入虚拟环境1
conda activate fluers
2. 安装依赖
安装依赖以及后续启动请在环境内运行
默认依赖(CPU 或已安装匹配 CUDA 的 PyTorch):1
pip install -r requirements.txt
注意:本次比赛我们团队采用的是cuda 12.6
训练代码会根据设备选择batch_size,cuda是4,cpu是2,但比赛我们使用的是4的batch_size
如需安装特定 CUDA 版本的 PyTorch(示例:CUDA 12.6):
1 | pip install torch torchvision --index-url https://download.pytorch.org/whl/cu126 |
如果因为电脑版本问题,导致库的安装出现问题,可以在运行代码时发现no modules xxx,然后根据报错信息,去pip对应的库进行安装
注意,建议使用cuda,这样batch_size与我们团队训练的一致,有更好的复现效果。
二、准备模型与数据
项目会读取以下目录(相对于项目根目录):
预训练模型目录(必须):
user_data/models/mms-lid-256/- 内容应包含
config.json、权重(.safetensors或.bin/.pt)、preprocessor_config.json等。
HF 数据集缓存(默认是离线运行,因此需要将数据集下载至本地):
user_data/datasets/train.py默认设置TRANSFORMERS_OFFLINE=1与HF_DATASETS_OFFLINE=1,需提前缓存 FLEURS 数据集或改为在线模式(见下)。
MUSAN 数据集(可选,用于噪声增强):
user_data/musan/,内部包含music/、noise/、speech/各自的wav文件。
推理测试集(
g.py使用):xfdata/testset/下放置*.wav文件,文件名形如iflytek_123.wav便于数值排序。
输出目录(自动创建):
- 训练日志与检查点:
user_data/tmp_data/、user_data/model_data/ - 推理结果:
prediction_result/result/submission.txt
三、在线/离线模式说明(仅训练)
注意,本次比赛本团队采用离线训练,因此数据集全部保存在本地train.py 在开头设置了环境变量:
TRANSFORMERS_OFFLINE=1,HF_DATASETS_OFFLINE=1
含义:强制离线。若未提前缓存 FLEURS 数据集,会报错退出。解决方案二选一:
- 方案 A(推荐):提前在同一环境中在线下载并缓存数据集与模型,然后再切回离线。
- 方案 B:临时改为在线模式(修改
train.py中对应环境变量为'0'),首次运行自动下载并缓存,后续可再切回离线。
四、运行训练
请在对应环境下运行
有两种方式开始训练
- 方法一:(推荐)进入
code/train目录,运行train.py脚本1
python train.py
- 或者方法二:进入
code目录,运行train.sh脚本,(注:Windows powershell可能无法进入conda环境,因此推荐使用方法一)1
./train.sh
如果使用虚拟环境,请使用方法一
说明:
- 首次运行将初始化并开始训练。
- 如检测到
mms_latest_checkpoint.pth,会询问是否继续训练。 - 训练过程中会在
user_data/model_data/保存检查点,最佳模型另存为mms_best_model.pth。 - 训练结束会输出训练/验证曲线图
mms_training_history.png,并在测试集上评估。 - (注,此测试集不是比赛赛题的测试集,比赛测试集并未以任何形式参与训练)
- 如果Windows加载不了sh脚本,可以采用git bash或者以方法一来开始训练
重要:复现请训练至少1个epoch,中途如果硬件允许请不要中断训练,recall得分应该都在0.4左右
五、运行推理
请在对应环境下运行
有两种方式开始推理
- 方法一:(推荐)进入
code/test目录,运行g.py脚本1
python g.py
- 或者方法二:进入
code目录,运行test.sh脚本(注:Windows powershell可能无法进入conda环境,因此推荐使用方法一)1
./test.sh
如果使用虚拟环境,请使用方法一
说明:
- 自动从以下路径按优先级加载模型:
user_data/model_data/mms_best_model.pthuser_data/model_data/mms_latest_checkpoint.pthuser_data/model_data/mms_final_checkpoint.pth- 若以上缺失,会在当前目录尝试同名文件。
- 扫描
xfdata/testset/下所有wav,批量推理并将结果写入prediction_result/result/submission.txt。 - 如果Windows加载不了sh脚本,可以采用git bash或者以方法一来开始推理
六、目录结构示例
1 | Project/ |
七、故障排查(FAQ)
无法加载 MMS 模型:
- 确认
user_data/models/mms-lid-256/存在且包含必要文件;路径不要含中文或特殊符号;权限可读。
- 确认
数据集离线报错:
- 将
train.py中TRANSFORMERS_OFFLINE与HF_DATASETS_OFFLINE设为'0',联网运行一次以缓存;或预先复制缓存到user_data/datasets/。
- 将
GPU 未被识别:
python -c "import torch;print(torch.cuda.is_available())"检查;- 重装符合显卡驱动与 CUDA 版本的 PyTorch;或先用 CPU 运行验证。
内存/显存不足:
- 降低
batch_size,或提高accumulation_steps; - 已启用梯度检查点与定期
cuda.empty_cache(),仍不足时请缩减数据或关闭图像绘制。
- 降低
推理无输出文件:
- 检查
xfdata/testset/是否存在且包含.wav; - 查看日志输出和异常信息(日志文件位于
user_data/tmp_data/)。
- 检查
八、许可
仅供比赛/研究用途。
