はじめに
SpecAugmentは、音声認識分野の分野で広く採用されてきたデータ拡張の手法です。この手法は、音声データに周波数方向や時間方向へのマスキングを適用することで、モデルがより汎用的で堅牢な学習を行えるようにするものです。
一方で、音楽データへのSpecAugmentの適用は、まだあまり探究されていません。音楽は、リズム、メロディ、ハーモニーなど、一般的な音声データとは異なる特徴を持っています。
この記事では、音楽データでのSpecAugmentの最適なパラメーターを検証していきます。
セットアップ
音楽データと言っても予測するタスクによって性質は変わってきます。
キーやセクションなどは時間における長期的な依存関係があります。コードやリズムなどはそれよりかは短い依存関係があるでしょう。
今回予測するタスクとしては、ノート(構成音)、コード、コード(ルートノート)、コード(ベースノート)、キーの5つです。
モデルはwav2vec2.0を改造して音楽の特徴量を作成するという記事で作成したwav2vec2.0のフレームワークを利用したものです。特徴エンコーダーはフリーズし、Transformerのみをファインチューニングします。
特徴エンコーダー前にSpecAugmentを挿入して検証します。
マスキング方法はSpecAugment++で提案されたMini-batch based mixture maskingを利用します。ゼロマスクの代わりにミニバッチ内の別のサンプルとミックスするというものです。
今回検証するパラメーターは、マスクスパン、マスク率です。時間方向のみを検証していきます。
検証
特徴エンコーダー前にSpecAugmentを挿入した場合を検証していきます。
特徴エンコーダー前にレイヤーは存在しないので入力のスペクトログラムに直接SpecAugmentを適用するということになります。
マスクスパン: 20ms
マスクスパン20msの時のマスク率ごとの各タスクのロスです。ばらつきはありますが、全体的にマスク率40%くらいがよいようです。ただコードやノートは改善が少なく、あまり効果が見られませんでした。
マスクスパン: 80ms
マスクスパン: 200ms
80ms、200msでは、マスクスパン20msの時と比較すると全体的に改善幅が少なくなっています。マスクスパンが長くなると予測が難しくなり、周囲のコンテキストから補完するようにモデルが学習してくれると期待していたのですが、あまりよくない結果となりました。
マスクスパン: 2080ms
これはマスクスパン2080msのものです。80msや200msの時よりも改善幅が大きくなり、20msの時のものに近いです。2秒という長い期間をマスクしているのに正しく学習できていることに驚いてます。
結果
短いマスクスパン(20ms)か長いマスクスパン(2080ms)が有効で、中途半端な長さのマスクスパンはあまり精度を改善できないことがわかりました。マスク率はだいたい40%くらいが有効なようです。
周波数方向のマスクも試しましたがコードの精度が急激に悪化したため検証はスキップしました。