赛题介绍

一、赛事背景

在全球化的浪潮中,语音技术已成为打破语言壁垒、增进文化交流的关键桥梁,然而,在低资源语言领域,行业内往往难以积累足够的语音数据以供模型训练,使得现有的语种分类系统在这些语言上的表现远不及主流语言。其次,语种分类技术在短语流、高噪声和实时场景的判别准确性仍然是工业界的一个技术难题。

鉴于此,我们希望通过举办“面向受限场景的低资源多语种分类”竞赛来激发全球研究学者、技术开发者和语音技术爱好者的创新热情,共同研究和开发适用于受限场景的低资源的多语种分类技术。

二、赛事任务

本次比赛的任务是开发一个面向受限场景下的低资源语种分类模型,这里受限场景指的是(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']

三、评审规则

  1. 评估指标
    本题评估指标设置为recall召回率(average设置为macro)。

  2. 评测及排行
    1)比赛提供下载数据,选手在本地进行算法调试,在比赛页面提交结果。
    请注意:测试集仅可用于输出最终的推理结果,不可以任何形式参与训练过程。
    2)排行按照得分从高到低排序,排行榜将选择团队的历史最优成绩进行排名。

四、作品提交要求

  1. 文件格式:按照txt格式提交,编码为UTF-8,提交格式见样例
  2. 文件大小:无要求
  3. 提交次数限制:每支队伍每天最多3次
  4. 排行榜更新结束后,前三名选手需要提交代码、模型和说明文档
  5. 提交样例:
    1
    00001 belarusian

测试音频名+Tab键+语种分类结果

五、赛程规则

  • 本赛题实行一轮赛制

【赛程周期】
9月26日-10月30日

  1. 9月26日10:00发布训练集、开发集、测试集(即开启比赛榜单)
  2. 比赛作品提交截止日期为10月30日17:00,公布名次日期为11月中旬

解决方案及算法

比赛流程

看完赛题,首先因为笔记本算力有限、网络有限,因此本团队将开源数据集musanfluers下载至本地来运行(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继续训练,而不是重新开始训练,这样可以节省时间,同时也可以避免因为训练中断而导致的数据丢失。
这样做的好处是:

  1. 作为笔记本电脑,显存有限、内存有限,因此加载全部数据集训练会导致爆显存,因此,我们会每隔一段进度保存一次检查点。这样,如果训练中断,我们可以从上次保存的检查点继续训练,而不是重新开始训练。
  2. 为了确保连续性,除了保存检查进度,还需保存训练进度。

但是仍有缺陷,例如第二次载入时训练可能会降低模型的训练效果,导致模型训练不佳,因此尽量一次训练完成,或者第二次载入时需要等待到模型loss值稳定以及acc值稳定后才能保证训练效果。

模型推理

模型推理方面,也是采用与训练时同样的数据处理方法,但比赛要求推理的测试集仅允许使用前1s的音频数据,因此按此方式进行数据预处理。然后按照流程开始推理,输出submission.txt结果文件来提交。

优化

我们记录了详细的训练日志、推理日志、以及采用数据增强、训练方法、训练进度等,还输出了热力图来显示模型的训练效果,以便我们更好地了解模型的训练情况,从而更好地优化模型。

模型训练复现流程

项目说明

本项目主要包含两个脚本:

  • train.py:基于开源模型的语种分类模型训练(支持断点续训、MUSAN 增强、验证与测试评估)。
  • g.py:批量推理,将测试集 wav 文件分类为目标语种。

目标在比赛中使用的运行环境为 Windows11(VScode powershell终端),Python 3.12.3,CPU。

本项目遵守比赛规则以及赛题FAQ

  1. 赛事材料基本使用要求
    本次大赛提供的全部数据、信息等,视为科大讯飞的保密信息。未经允许,任何人不可以任何形式使用、传播、披露、授权他人使用。
  2. 选手参赛基本原则
    作品必须健康、合法、无任何不良信息及商业宣传行为,不违反任何中华人民共和国有关法律。须保证原创性,不侵犯任何第三方知识产权或其他权利;一经发现或经权利人指出,主办方将直接取消其参赛资格,科大讯飞保留赛事解释权。
  3. 作弊行为界定及处罚
    一旦发现任何利用平台或规则漏洞进行作弊的行为,以及其他一切使用不良手段影响竞赛公平、公正的行为,赛事组委会有权取消该选手成绩。尤其是同一团队组建多支队伍提交多次结果的刷榜行为,一经发现则取消所有雷同队伍的成绩。赛事组委会保留最终解释权。
  4. 数据集使用基础规范
    选手按照赛事要求下载官方数据集进行比赛,请注意测试集仅可用于输出最终的推理结果,不可以任何形式参与训练过程。如有违反一经发现,取消其参赛资格。
  5. 是否允许使用除官方数据集之外的其他数据?如果允许,是否有限制,例如数据来源、数据集规模或数据处理方式?
    允许使用FLEURS数据集之外的其他开源数据。但提交的报告必须明确使用的开源数据集信息。
  6. 是否允许使用预训练模型?如果允许,是否对预训练模型来源有限制,例如官方、开源、第三方训练?
    可以使用开源预训练模型
  7. 是否允许使用开源大模型?是否允许使用闭源大模型或API?
    允许使用开源大模型,但不允许使用闭源大模型或API。
  8. 是否允许选手将数据集用于科研或论文发表?
    可以。

注意

本次使用开源数据集musanfluers
本项目使用的开源模型: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
2
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu126
pip install torchaudio

如果因为电脑版本问题,导致库的安装出现问题,可以在运行代码时发现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=1HF_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=1HF_DATASETS_OFFLINE=1

含义:强制离线。若未提前缓存 FLEURS 数据集,会报错退出。解决方案二选一:

  • 方案 A(推荐):提前在同一环境中在线下载并缓存数据集与模型,然后再切回离线。
  • 方案 B:临时改为在线模式(修改 train.py 中对应环境变量为 '0'),首次运行自动下载并缓存,后续可再切回离线。

四、运行训练

请在对应环境下运行
有两种方式开始训练

  1. 方法一:(推荐)进入code/train目录,运行train.py脚本
    1
    python train.py
  2. 或者方法二:进入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左右


五、运行推理

请在对应环境下运行
有两种方式开始推理

  1. 方法一:(推荐)进入code/test目录,运行g.py脚本
    1
    python g.py
  2. 或者方法二:进入code目录,运行test.sh脚本(注:Windows powershell可能无法进入conda环境,因此推荐使用方法一)
    1
    ./test.sh
    如果使用虚拟环境,请使用方法一

说明:

  • 自动从以下路径按优先级加载模型:
    • user_data/model_data/mms_best_model.pth
    • user_data/model_data/mms_latest_checkpoint.pth
    • user_data/model_data/mms_final_checkpoint.pth
    • 若以上缺失,会在当前目录尝试同名文件。
  • 扫描 xfdata/testset/ 下所有 wav,批量推理并将结果写入 prediction_result/result/submission.txt
  • 如果Windows加载不了sh脚本,可以采用git bash或者以方法一来开始推理

六、目录结构示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Project/
README.md
requirements.txt
code/
train/
train.py
test/
g.py
user_data/
models/
mms-lid-256/
config.json
model.safetensors | pytorch_model.bin
preprocessor_config.json
...
datasets/
musan/
music/ noise/ speech/
tmp_data/
model_data/
mms_best_model.pth
mms_latest_checkpoint.pth
xfdata/
testset/
iflytek_1.wav
iflytek_2.wav
prediction_result/
result/
submission.txt

七、故障排查(FAQ)

  • 无法加载 MMS 模型:

    • 确认 user_data/models/mms-lid-256/ 存在且包含必要文件;路径不要含中文或特殊符号;权限可读。
  • 数据集离线报错:

    • train.pyTRANSFORMERS_OFFLINEHF_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/)。

八、许可

仅供比赛/研究用途。