576. Bengali.AI Speech Recognition | bengaliai-speech
感谢组织这次比赛。
我是语音识别领域的新手,从比赛中学习了很多。感谢所有竞赛参与者和主办方。
首先,我应用了数据过滤器。由于不熟悉音频领域,我使用了简单的过滤方法:
其一是转录文本与音频数据长度的比率。我基于每秒20个字符的标准过滤数据。如果高于该值,我认为可能存在字符过多或音频数据损坏的情况。
另一个过滤基于yellow_king模型的预测结果。我过滤掉CER大于0.6的数据。
通过在干净数据上训练,我获得了良好的初始分数。
由于竞赛数据集非常大,我重复在子集上进行训练而非使用全部数据。模型达到一定性能后,计算剩余数据集的WER并加入数据,这个流程重复了多次。
kathbath, openslr37, 53, ulca
这些外部数据也经过了过滤处理
IndicWav2Vec
该模型在测试集上表现非常出色。
根据以往竞赛报告的建议,模型收敛后重新训练效果不佳,因此我使用了预训练模型而非孟加拉语微调的检查点(从faireseq检查点转换为HF模型)。另一个原因是我自定义了词汇表(在标点符号部分提及)。
5-gram语言模型(使用全部Indiccorpus v1和v2、BangaLM以及mC4文本语料库)。文本语料总计45GB,5gram.bin文件约22GB。
使用pyctcdecoder,通过示例音频CV调整了alpha、beta和beam_width参数。最初使LB分数提升了0.01,但随着分数提高收益递减,最终稳定在约0.003的提升。
标点符号非常重要。
我没有创建专门的标点模型,而是采用简单方法:将标点符号包含在词汇表和LM语料库中。即使包含标点,wav2vec仍难以预测。但发现将其包含在词汇表中可使LM解码时将其作为候选考虑。仅通过在模型和LM语料库中包含标点,分数就从0.44提升到0.428。
由于输出结构限制,无法在logit级别进行简单集成。因此采用策略:使用LM模型计算解码句子的LM分数,选择分数最高的句子。

使用三个模型输出的句子(训练数据和解码参数有变化)。公共和私有模型均提升了约0.006-0.008。