LoginSignup
2

More than 1 year has passed since last update.

posted at

Neural Network Console Challenge ~BGMから飲食店をレコメンド~

1.Neural Network Console Challenge

 "Audiostockの10,000点の音声(BGM)データを解析するAI開発コンテスト" のレポートです。
  A:AudiostockのBGM検索の自動分類アルゴリズムを作り出す
  B:自由な発想で音声データを解析する
どちらか選択ということで、音楽のセンスは無いので"B"を選択。

学習用データ提供:Audiostock

2.テーマ

 テーマは聞いているBGMからおすすめなランチ:ramen:(お店)を分類するアルゴリズム作成に挑戦。と言うのも、ランチのお店選びって迷いませんか?例えばドライブシーンで、お店を調べながらの運転は難しいので、聞いている音楽からレコメンドしてもらえると助かる:relaxed:(妻のご機嫌を損ねる心配がなくなる)というモチベーションでテーマを決めました。

3.アノテーション

 音声データを解析した経験は無く、音楽も流行りの曲を聴く程度で知識が無いため、できるだけデータに基づいた分類をしたい:point_up:。また、提案してくれるお店も毎回同じ様なお店ばかり出てくると面白くないので、できるだけ多くの中から推薦してくれるモデルを作りたい:v:

 今回ドンピシャお店を当てにいくというより、イメージから大きく外れないことが重要と思い、アノテーションはデータを基に実施しました。ありがたいことに各BGMに対し、関連タグを付けていただけていたので、これも利用しました。アノテーション手順は下記になります。

音声データをメル周波数スペクトログラムとして特徴量化し、画像データへ変換。メル周波数スペクトログラムを画像化した一例は下記です。
sample.png
②メル周波数スペクトログラムの数値データを用い、k-meansで4つにクラスタリング。ここで各クラスに対しBGMタグを形態素解析し、WordCloudで可視化してみました。お店のジャンルをラベリングしてます。ここは完全に独断と偏見です。
image.png

③次に4つの各クラスについて、メル周波数スペクトログラムの数値データをPCAで次元削減し2次元で可視化しています。可視化することでグッとアノテーションしやすくなります。また、PCAの第1、第2主成分を混合ガウスモデルで、1店舗毎にクラスタリングしてます。この方法で音声データとお店のイメージをリンクさせました。下図はClass:1について処理をした一例です。image.png

④お店は食べログのランチ(~2000円)で、ランキングが高いところから、③のイメージと合うものを選定。今回はエリアを東京に限定。
image.png
 以上の手順でアノテーションを実施しました。ちょいちょいBGMを聞きながら作業しましたが、聞いているうちに混乱して分からなくなるので、かなり疲れました:skull:
 短い曲調データで構成されたクラスや、少数のクラスを削除し最終的なデータ数は以下。

音楽データ数 アノテーション数
8244 73

4.学習用データセットの作成

 データセットの準備、アップロードは公式サポートに詳細があり、悩むことなく実行できました。
 今回は、アノテーションの①で作成したメル周波数スペクトログラムの画像(x)とアノテーション(y)をデータセットとしています。

x y
audiostock_42554.png 43
audiostock_42555.png 60
audiostock_42556.png 62
... ...

5.Neural Network Console

 今回初めてNeural Network Consoleを使ったのですが、ネットワーク設計であったり、結果の参照が非常に簡単で、楽に進めることが可能でした。スピーディーに様々なトライができることに感動。エラーにハマることが少ないのが良い:joy:

  • ネットワーク設計

 基本はドラッグ&ドロップでレイヤーを操作し、最後に数値を入力するだけです。まずは簡単なネットワークを設計しトライ実施。
image.png

 CUPで学習開始したところ、たった10エポックなのに予測完了時間が3時間45分・・・:sweat:。今回のチャレンジでは、申請すれば学習用GPU/推論用GPUを合算で10,000円分利用可能ということで、迷わす申請:sunglasses:。NVIDIA®Tesla®V100 GPUを利用したところ比較にならないくらいの速さ。これは快適。計算時間の問題は解決です。

CPU GPU(NVIDIA Tesla V100)
演算時間 3hr 45min. (推定) 2min

 一方で本番は試行錯誤し、より深いネットワークを設計することに。VGG16をベースにConvolusion layerの後にBatch Normalizationを追加、さらにConvolution/Batch Normalization/Reluのセットを一層追加した深いネットワークを設計しました。また、ValidationはTop5-errorを設定。
image.png

  • 学習結果

image.png

 学習はうまく進み、100エポックくらいでサチる結果となっています。Validation ErrorとTraining Errorの差があり、過学習のまま収束した感じとなっています。

  • 評価結果
Accuracy Avg.Precision Avg.Recall Avg.F-Measures
0.3624 0.3787 0.3504 0.3527

 音声データを73分類とチャレンジングな試みということもあり、精度は今一つな結果となりました:weary:

6.結果考察

 今回、正しく分類できなかった音声データについて聞き直してみましたが、そこまで間違えているか?正直私には正しく分類することができず...:fearful:。ジャンルを大きく外すことはなさそうでした。以下2つの視点で考察を実施。

1.アノテーション②で分類した4つのジャンルを説明できているか?
 Neural Network Consoleのevaluationタブ→混同行列のデータを利用し正答率を算出。

Class Accuracy
1 0.7107
2 0.5412
3 0.7236
4 0.7277

Class:2で若干低めだが、やはりそこそこ説明できている様子。

2.アノテーション②で分類した4つのジャンル中のお店の説明力はどうか?
 層別したデータセットを作成し、上記で実施したCNNと同じネットワークで学習してみます。

Class Accuracy Avg.Precision Avg.Recall Avg.F-Measures
1 0.5136 0.5362 0.5255 0.5205
2 0.6498 0.7113 0.6415 0.6539
3 0.3781 0.384 0.3326 0.3316
4 0.3654 0.2007 0.308 0.2374

 各ジャンル中でのお店分類の精度はClass:3、Class:4で低い結果となっています。精度が低い原因の一つがこれで、Class:3、Class:4には似た感じの音声データが多く格納されているため、それ以上の分類が難しいのだと考えられました。
 また、層別の精度に対し全体(5.Neural Network Console結果)の精度が低いことから、各クラスの間で似たような分類が無いか、これを確認することも重要と思われました。
 以上より、アノテーションをもっとしっかりやる=クラスタリングをチューニングして、人が判断できるような分類に落ち着かせることで改善できると考えられました。

...と色々考えましたが、5.Neural Network Consoleで作成したモデルに、そこそこ説明力がありそうなので、これを使って検証していきます。

7.検証

 今回学習したモデルの重みを使って、私がよく聞く音声データでどのお店をレコメンドしてくれるか、検証してみました。サビの部分をAudiostockさんご提供のデータと同様の周波数、ビットなどへ加工して音声データを作成しています。


 EDMですが、どこか懐かしい感じのする曲

VIA Brianza

評価点数:3.93点
レビュー件数:335

利用シーン:家族・子供と | 知人・友人と
ロケーション:隠れ家レストラン
お子様連れ:子供可(小学生可)
ホームページ:http://www.la-brianza.com/

出典:食べログ


 TVアニメ『ポケットモンスター』OP主題歌

ビモン 東京駅キッチンストリート店

評価点数:3.74点
レビュー件数:360

利用シーン : 家族・子供と | 一人で入りやすい | 知人・友人と
お子様連れ : 子供可
ホームページ : http://osietesite.com/gourmet/tokyo/yosyoku/niku/vimon

出典:食べログ


 言わずと知れた名曲

ザ グレートバーガー

評価点数:3.77点
レビュー件数:682

利用シーン:家族・子供と | 一人で入りやすい | 知人・友人と
お子様連れ:子供可
ホームページ:http://www.the-great-burger.com

出典:食べログ


 歌詞がある場合どうか?若干心配でしたが、イメージと合ってるお店がレコメンドされていると思います:v_tone1:。この作業は面白く、永遠とやってられそうです:laughing:

8.まとめ

 今回、“10,000点の音声(BGM)データを解析するAI開発コンテスト”と聞いて、このテーマをどうしてもやりたいと感じ取り組みました。73分類とかなり挑戦的な試みで、結果として精度が出せませんでしたが、Neural Network Consoleを使うことでネットワーク設計の容易さ、GPUの学習速さはもちろん、モデルの問題点、改善手法が容易に検討できることが素晴らしいと感じました。
 また、検証は曲のサビのみでのレコメンドでしたが、時系列でサンプリングしてレコメンドを比較したり、プレイリスト内でのレコメンドをアンサンブル解析などすると、より面白くなるのではと思いました。
 
 楽しいChallengeをありがとうございました。 以上です。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
2