返回列表

8th place solution

576. Bengali.AI Speech Recognition | bengaliai-speech

开始: 2023-07-17 结束: 2023-10-17 音视频处理 数据算法赛
第8名解决方案

第8名解决方案

作者:ktr
发布时间:2023年10月18日 10:33:06 UTC

感谢组织这次比赛。
我是语音识别领域的新手,从比赛中学习了很多。感谢所有竞赛参与者和主办方。

解决方案概述

  • 数据集清洗
  • 标点符号处理
  • 简单集成(重打分)

数据集

首先,我应用了数据过滤器。由于不熟悉音频领域,我使用了简单的过滤方法:
其一是转录文本与音频数据长度的比率。我基于每秒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。

未生效的方法

  • xls-r-300m
    • Common Voice的CV与indicwav2vec竞争相当,但在测试集上表现很差。加入集成后无效。
  • 语音增强
    • 发现带混响的示例音频分数较差,因此使用DeepFilterNet进行降噪。有时提升LB分数,有时无效,最终未采用。
  • 添加阿萨姆语
    • 我理解其与孟加拉语共享字符。添加后未提升分数。
同比赛其他方案