データ収集


楽曲は文章と比べ容量が重く、またジャンルなどのラベル付けも画像に比べ曖昧でフリー素材も少ないので、ラベルのついたデータを潤沢に集めるのは他に比べて困難です。しかし機械学習をするには正例と負例が無ければ話が始まりませんので、まずはここを何とかしましょう。

集め方

今回は「東方楽曲の分類する」などのように、「○○を機械学習的に分類する」という目的があると仮定します。一般的な楽曲から○○を分類する場合、まず○○な楽曲と一般的な楽曲をそれぞれ大量に集めなければいけません。

○○な楽曲はおおよそ想定がついていると思うので、片っ端から購入してしまいましょう。100曲以上程度あればまともな結果が出るのではないかと思います。

一方、「一般的な楽曲」を意図的に大量に持っているという人は少ないと思います。普通は自分の好みの楽曲を買うし、好みがあるということは何らかの傾向を持っているということだからです。これを解決する方法の一つはタワレコでランダムにCDを100枚ぐらい買うことですが、趣味でやるにはなかなかハードな作業になります。以下に、購入する以外の方法で「出来るだけ全体として一定の偏りを生まないような楽曲群」を作る方法を書きます。

1. 研究用データセット

Music AnalysisやMusic information retrievalの分野で用いられているジャンル別に分類された研究用の楽曲のセットを使用する方法です。以下のデータセットをまとめたサイトが2016/04地点でup to dateなように感じました。他にもいろいろなサイトがありますがリンク切れが多いです。
http://www.audiocontentanalysis.org/data-sets/
利点はとにかく楽曲数が多いことです。また、ジャンル分類用のデータセットであれば基本的にジャンルに偏りがないと考えてよいと思います。タグ付けしてあるものも多いので、分析にタグが必要になる場合も便利だと思います。

2. ツタヤでレンタル

旧作なら1000円で5枚ぐらいレンタルできますし、オムニバスやベストミックスのようなものが存在するジャンルであれば、1000円でそれなりの楽曲数が集められます。iTuneで取り込んだ際にタグもつきます。欠点は楽曲数に比例して金がかかるところですが、いずれにせよ近所にツタヤがあるなら周回することで手早く所望の楽曲を集められます。

3. 音楽系SNSのCreative Commonsの楽曲を使う

幾つかのサイトでは、Creative Commonsのライセンスで楽曲が配布されています。
Creative Commons Music Communities 例えば、Sound CloudにはCreative Commons楽曲だけをシェアするアカウントが存在し、ダウンロード可能な楽曲を一覧を見ることが可能です。ただ、やはりというかなんというかSNSごとにジャンルがどうしても偏ります。

今回使用したデータ

  1. 東方のゲームから231曲
  2. 過去M3とかで購入したCDから極端なジャンルの偏りを排除して179曲
  3. レンタルしたJ-アニソン 神曲祭りシリーズ6枚から269曲
  4. MagnaTagATuneから18703曲
  5. GTZANから1000曲

J-アニソン神曲祭りシリーズは深夜アニメのCMでよく見かけますが、ツタヤでのレンタル可能、カバーではない、数が多い、最新のものまである、という感じで、1000円ちょいで270曲程度手に入るのでおすすめです。MagnaTagATuneは死ぬほど楽曲が多いうえ纏めて一つのCCライセンスです。GTZANはexperimental resultの公開には形態問わずメールでの申請が必要なようなので、メールで用途を説明し許可を取りました。 CC-BYライセンスの楽曲で機械学習したモデルで分析した結果の掲載時に、訓練データ全てのCCライセンスが必要になるのかはかなり微妙な問題だと思いますが、現実的にはかなり厳しいので、具体的に言及した楽曲についてランセンスが付されるという考えでやっています。記事で言及するのは不安なので2.は最終データには使ってないです。

エンコード

実行時にはffmpegでwavにして分析するのですが、HDDにwavでおいておくと要領がそれなりに膨らむのでmp3 196kbpsの品質で取り込んでおきます。

後述のリズムパターンなどではおよそ16kHzまでデータを取り出すので、196kbpsのあたりでこのあたりまでサポートできるというのを読んだのでこの品質にしました。あと、エンコードの方法によるleakageを防ぐために全部同じエンコーダでmp3にエンコードしてます。不可逆な圧縮をしたかしてないかわからなくなると面倒なので、一回全部取り込みなおした方が多分早いです。

楽曲の管理

日本語名だとエンコードや処理に際してエラーが起きやすいので、曲のパスにユニークなIDを振り、中間ファイルはすべて[id].wavなどにしました。

楽曲のリストアップはpythonのglob関数でワイルドカードを使ってやったのですが、glob関数の返り値はosのファイルシステムに依存した非ソート配列なので、LinuxとWindowsでデータをやり取りながら進めると不整合が生じます。気を付けましょう。(かなり最後の時期までこれに気づきませんでした)

また、たまにメドレーとかで異常に重い長いmp3があったりするので、最初のリストの時に重いやつははじいておくか、処理の時に最初の数分を取り出すとかしましょう。

results matching ""

    No results matching ""