🌏
kaggle Bengaliコンペ 上位解法まとめ
はじめに
- ベンガル語の音声を文字起こしするというタスクのkaggleコンペが、2023/10/18まで行われていました。
- 上位チームの解法から学びを得て、今後のコンペに活かすことが、この記事の目的です。
コンペ概要
- 音声データが与えられ、それを文字起こしした精度(WER)を競うコンペでした。
- テストデータについて、次のような特徴がありました。
- テストデータにのみノイズやBGMがある
- トレーニングデータと比べて、テストデータの音声・文章が長い
- テストデータのみに存在する語彙がたくさんある
上位チーム解法まとめ
1. Approach
- 全てのチームが、ASRモデルを構築してsentenceを推論していました。
- いくつかのチームは、後処理として句読点を予測するモデルを構築していました。
- ASRモデルは、次のいずれかが選ばれていました。
CTC(Connectionist Temporal Classification)+ LM(Language Model)
多くのチームが、Wav2Vec2モデルまたはその派生モデル(ai4bharat/indicwav2vec_v1_bengali
)をバックボーンとしていました(2nd, 3rd, 4th, 5th, 8th, 12nd)。
また、コンペ期間中はCodeやDiscussionにおいてWav2Vec2を使った解法の情報共有が多く行われていました。
STT(Speech-to-Text)
いくつかのチームは、Whisperモデルを使うことでベースラインスコアに差をつけていました(1st, 11st)。
2. ASR Model
- Whisper-mediumをバックボーンとしたチームは、ベースラインスコアに差がついているようでした。
- Wav2Vec2モデルの中でも、より大きいモデル(
facebook/wav2vec2-xls-r-1b
)をバックボーンとしたチームは、よりよいベースラインスコアになっていたようです(4th)。 - テストデータにのみ存在する語彙がたくさんあったため、外部データを使ってLMを自作することでスコアが向上しました。
- テストデータのsentenceには新しい文字が存在しない(全てトレーニングデータ内の文字で構成されている)ことがホストから明言されていました。外部データを際限なく追加するとLMの容量が肥大化するため、前処理としてトレーニングデータ内の文字に制限することで、容量を削減することができていました。
3. Dataset
- CTC/STTでは、与えられた
train.csv
以外にも、様々な外部データ(audio+sentenceのセット)が各チームで用いられていました。OpenSLR、MADASR、Shrutilipi、Kathbath、ULCAなど。 - LMでも、語彙を豊富にするために外部データ(sentences)が用いられていました。IndicCorp v1/v2、Common Voice、fleurs、OSCARなど。
- 次のaugumentationによってCTCモデルの性能を高めているチームがありました(2nd, 4th, 12nd)。
TimeStretch()
-
AddBackgroundNoise()
:MUSANをBGMとして、DNS Challenge 2020をノイズとして、それぞれ加えたようです。 AddGaussianNoise()
Gain()
PitchShift()
4. Denoise
- Demucsによる音源分離がスコアを向上させました(3rd)。
- DeepFilterNet、FAIR Denoiser、CleanUnetによる音声強調はうまくいかなかったようです(4th, 8th, 12nd)。
5. Ensemble
- このコンペでは、予測されるトークン長がモデル間で一致しないため、logitを単純にアンサンブルすることはできませんでした。
- 複数のCTCモデルのembeddingを連結し、Transformer encoder→CTC linear layerで処理することでアンサンブルに成功したチームがありました(5th)。
- 複数のCTC-LMモデルのConfidence Scoreの出力を比較し、最高スコアのsentenceを選択することで、アンサンブルを成功させたチームがありました(8th)。
6. Punctuation Model
- バックボーンはチームによって様々でした。
1stではgoogle/muril-base-cased
、2ndではai4bharat/IndicBERTv2-MLM-Sam-TLM
、3rdではxlm-roberta-large
が使われていました。 - 多くのチームがデータセットにIndicCorpを使っていました。
- 予測対象のラベルは、1stは
।,?
、2ndは।,?!
、3rdは।,?-
など様々でした。 - vocabやLM corpusに句読点を入れることにより、CTC-LMのdecodeのタイミングで句読点を付与させることに成功したチームもありました(8th)
- 句読点を対処しなくても上位に入ることができたようです(4th)。Wav2Vec2の大きなモデル(
facebook/wav2vec2-xls-r-1b
)を使っていたことで、句読点モデルを使わなくても十分ハイスコアになっていたようです。
まとめ
- 今回のコンペでは、バックボーンや外部データセットの選択肢が多岐にわたるため、予備知識がない限りは、かなりの数の試行錯誤が必要でした。あらかじめ柔軟なカスタマイズを想定したパイプラインを構築しておくことで、あとの進捗を楽に進められたように思います。
- テストデータにしかない特徴がいくつかあったものの、CVとLBの相関は良好でした。Public LBとPrivate LBの相関もとても良く、それほど大きなshakeもありませんでした。
- ASR ModelのフェーズとPunctuation ModelのフェーズとでCVを分けて管理する必要がありました。ソロ参加で並行管理するのは並大抵なことではないように思います。
- いろいろな言語のASRが発展することで、より便利な世の中になっていくと思います。社会的な意義がモチベーションに繋がるコンペだったように思います。
Discussion