コード進行認識の手法整理

ここ数か月はコード進行について書いてなかったのですが、色々と調べてるうちにこんがらがってきたし、実装しようとしても色々うまくいかなかったので書けることがありませんでした。

とりあえず何か書いた方がいいかなと思ったので、これまで調べてきたポイントをちょっと整理してみます。

Chromaはどこまでいけるか

今年もMIREXが開催され、コード進行認識タスクのアルゴリズムが競われましたが、やはり特徴量はChromaからは基本離れない。一つは毎年おなじみ、Queen Mary出品のChordinoで、これはNNLS-Chromaという、独自の特徴量を計算して認識するアルゴリズムです(分類は普通のViterbi探索)。ですが、今年は何故かスコアを大きく落としました。

そしてもう一つ、全体的に結果が良かったshineChordsは、こちらも近年連続で参加されてるのですが、やはり色々前処理を施したChromaでの認識。

もう一つは香港大学出品のアルゴリズムで、ChromaはNNLSだがDNNを使ったとのこと。性能は普通。

前処理といえば、今ではframe-wiseのChromaを直接使う代わりに、ビート単位で分割して中位数を取って一つのベクトルにまとめたBeat-synchronized Chromaが多く使われている模様。これは「コードは拍の地点でしか変化しない」という(基本的に間違いないはずの)仮定をもとに、さらにスリム化を図ったものです。

Chromaはもはや具体的な手法というよりオクターブ単位で畳むという「発想」を指すようになってきており、実に直感的で頼れるもの。音楽理論的にもベースの情報が消える以外には大きな問題はないので今日もみんなの人気者。

ただ僕らが耳コピするときにも重要な根拠となる低音情報が消えるのはやはり問題なので、そこをどうにかするのが一番の課題に思えます。shineChordsなどのアルゴリズムは、Chromaを拡張してBass Chromaなる低音を強調したChromaを特徴量に加えるなどの工夫をしています。

HMMもいけるのか

Chromaと同様に、HMMもいまだMIREXの主役でした。Chordinoが使うのは単純なViterbi探索、shineChordsはコードごとにHMMを訓練してそれらをつなげるモデルを使ってました(これの実装に今てこずってます)。

HMMの各状態の出力確率分布は、混合ガウス(GMM)が主流らしいですが、これもどうやら限界という感じ。近年はディープラーニングがブレイクしてるのでHMMの地位がそろそろ危うい・・・?

Chordinoの元ネタ論文では、HMMを一般化したDynamic Bayesian Networkを使った認識を提示してます。

Simultaneous Estimation of Chords and Musical Context from Audio, M. Mauch et al.

このDBNは、拍、キー、コード、ベースの関係性を直感的にモデリングできるという点で、結構魅力的に思えました。しかしどう読み返しても推論の方法が分からない・・・Viterbi探索と言ってるけど・・・

Chordinoのソースコードを読んでみたんですが、どうやらそこの実装はDBNではなくて単純なHMMに過ぎなかった模様。何故・・・

Cho氏の博士論文では、さらに複雑なHMMの訓練手法が提案されてたのですが高度すぎて理解できてない。

Improved Techniques For Automatic Chord Recognition For Music Audio Signals, Taemin Cho

ディープラーニングは使えるのか

音声や画像認識にブレイクスルーをもたらしたディープラーニングを、コード認識に応用できないかと思うのは至極自然な流れ。Chromaの地道な特徴エンジニアリングにとって代わるのかなと期待されてるようですがコード認識ではこれといった飛躍はいまだ起きてません。なんかMIREXタスクで90%達成したよー!っていう論文もありましたがあんまり反響がないのはどうしてだろう。色々論ずる前に、まず何とか実装してみたい。

言語モデルは役に立つのか

この前書いたように、ラベル系列に関する事前知識をあらわす言語モデルは、音声認識システムの性能には大きく寄与するのですが、これもディープラーニング同様、コード認識ではどうもうまくいかない。言語モデル応用を試みた論文は結構あったのですが、どれも目覚ましい進歩をもたらすには至りませんでした。HMMの遷移確率をデータと無関係なものに置き換えても性能に大差はなかったことから、コード進行の事前知識とかはあまり役に立たないのではないか、という説も出てきてそうなのかな・・・と思ったりしたのは、前のブログの通りです。

果たしてどうなのか、今も揺れています。

最近この件について音声認識のエキスパートの方に相談してみたのですが、彼はやはり言語モデルは絶対必要と断言されました。もしかすると反復要素が強い音楽では、音声認識以上に言語モデルが威力を発揮するかもしれない、それができてないのは、まだ正しい応用の仕方を見いだせていないから、としか考えられない、と。

そこで、最近の言語モデル構築のノウハウ、とりわけLSTMのモデルを考えてみてはどうか、と提案されました。

調べてみるとつい今年のISMIRに出されたこの文章がまさにそれをやっていました。

Audio Chord Recognition with a Hybrid Recurrent Neural Network, Siddharth Sigtia et al.

ディープラーニング(DNN)に、LSTM-RNNの言語モデルを応用したモデルです。現在の音声認識のstate-of-artを結集した手法と言えるでしょう。結果を見ると言語モデルによる性能アップはやはり2,3パーセントほどでした。果たして訓練データの量のせいなのか、それともやり方がまだ正しくないのか・・・

まとめ

とりあえずもうしばらくHMMの実装を進めてみるけど、考えてみればあまりこれに時間を費やすべきではないかもしれません。

今提案されている言語モデルがなぜダメなのかについて、もしかしたらという考えがいくつかあるので、それを試す環境を早めに作り上げたい。具体的には、ディープラーニングの実装方法を覚えて、今の言語モデル、とりわけLSTMについてもっと深く理解しておく必要がある。今年以内に進展があればいいなと思ってます。