自分好みの音楽を機械学習で探す

  • URLをコピーしました!
目次

はじめに

音楽のサブスクリプションサービスもの普及もあり、現在では多種多様な音楽をいつでも聴くことができるようになりました。ただその反面、新しい楽曲の中から自分が好きな(好きそうな)ものを見つけることが難しくなったともいえます。自分のプレイリストや好きな曲から新しいお気に入りを見つける方法を考えます。

本記事ではchatGPT、Google Bardを用いて調べたことを中心に記載しており情報源が定かでない場合があります。(文章は編集しています)

楽曲推薦アプリ開発の一般的なアプローチ

まず、一般的な楽曲推薦システムの作成はについて、chatGPTに聞いてみます。機械学習を用いたアプローチとして提案してもらいました。

  1. データ収集: 最初に行うべきことは、利用可能な音楽のデータセットを探すことです。データセットは、曲の特性(ビート、ジャンル、アーティストなど)、曲の人気度、ユーザーの評価やプレイリストなど、さまざまな特徴を持つべきです。データは公開されているAPI(Spotify APIなど)を通じて取得することもできます。
  2. データ前処理と探索的データ分析(EDA): データが手に入ったら、前処理と探索的データ分析を行います。前処理では、欠損値の処理、異常値の確認、不要な特徴の削除などを行います。EDAでは、データの特性を理解し、隠れたパターンや傾向を発見するための視覚化や集計を行います。
  3. 特徴エンジニアリング: 特徴エンジニアリングは、機械学習モデルの性能を向上させるために重要なステップです。これには、特徴の選択、特徴の変換(スケーリング、エンコーディングなど)、新しい特徴の作成などが含まれます。
  4. モデル構築と訓練: 推薦システムには様々なアプローチがありますが、一般的には協調フィルタリングやコンテンツベースのフィルタリングが使用されます。協調フィルタリングは、ユーザーの過去の行動と他のユーザーの行動を比較して推薦を行います。一方、コンテンツベースのフィルタリングは、アイテム(ここでは音楽)の特性を利用して推薦を行います。
  5. モデル評価とチューニング: モデルの性能を評価し、必要に応じてハイパーパラメータを調整します。評価指標には、精度、再現率、F値などがあります。
  6. アプリケーションの構築: 最終的に、あなたの推薦システムをWebアプリケーションやモバイルアプリケーションに組み込むことができます。ユーザーはアプリケーションを通じて音楽を検索し、推薦を受け取ることができます。これにはFlask、Django、Reactなどのフレームワークが使用できます。

以上のステップは一般的なガイドラインであり、特定のプロジェクトやデータにより変わる可能性があります。また、各ステップで必要なスキルやツールも多岐にわたります。

アプローチ:①メロディーから好きな曲を提案してもらう

次に、音楽で似た楽曲を探す場合、コード進行などが似ているかどうかを自動で調べることはできるかを考えます。

まず、音楽のコード進行を自動的に抽出するためには、音楽情報検索(MIR)と呼ばれるフィールドの技術が必要です。MIRは、音楽ファイルから情報(例えば、ピッチ、テンポ、リズム、そしてコード)を抽出するための手法を研究しています。特に、コード進行の自動抽出は一部のMIRシステムで利用可能です。しかし、このプロセスは完全に正確ではない可能性があり、特に複雑な音楽や低品質な録音に対しては誤った結果を生む可能性があります。

次に、コード進行が似ている曲を探すためには、機械学習や他のアルゴリズムを使って、抽出されたコード進行を比較することが必要です。これは、音楽の類似性を測定するための様々な方法が存在しますが、どの方法が最適かはタスクやデータによります。また、コード進行だけでなく、他の要素(メロディ、リズム、テクスチャ、ティンバーなど)も音楽の類似性に大きな影響を及ぼすため、これらも考慮に入れることが重要です。

全体として、このタスクは技術的には可能ですが、実装には音楽理論、MIR、機械学習など、多くの高度なスキルと知識が必要となります。また、データの品質や可用性も大きな問題となる可能性があります。

アプローチ:②歌詞が近い曲を探してもらう

次に、歌詞から、シチュエーションや感情が近い曲を自動で調べるにはどうすれば良いかを考えます。歌詞からシチュエーションや感情が近い曲を自動で調べるには、自然言語処理(NLP)と機械学習を用いることが考えられます。以下に一般的な手順を示します:

  1. データ収集: 歌詞データセットを探します。これは公開されているAPIやウェブスクレイピングを通じて取得することができます。データセットは歌詞とそれに対応する感情ラベルやシチュエーションラベルを持つべきです。ラベルは手動で付けることもできますが、これは時間と労力がかかる作業です。
  2. 前処理: 収集した歌詞データに対して前処理を行います。前処理には、テキストのクリーニング(特殊文字の削除、全角半角の統一など)、トークン化(テキストを単語やフレーズに分割)、ストップワードの削除(あまりにも一般的な単語の削除)などが含まれます。
  3. 特徴抽出: 前処理したテキストから特徴を抽出します。特徴抽出には、単語の出現頻度(Bag of Words)や単語の文脈を考慮したベクトル(Word2Vec、FastText、BERTなど)を用いることができます。
  4. モデル訓練: 感情ラベルやシチュエーションラベルを目的変数とし、抽出した特徴を説明変数として機械学習モデルを訓練します。モデルにはロジスティック回帰、サポートベクトルマシン、ランダムフォレスト、ニューラルネットワークなどが用いられます。
  5. 推薦: ユーザーが入力した歌詞に対して、訓練したモデルを用いて感情やシチュエーションを予測します。予測結果と同じラベルを持つ曲を推薦します。

これらのステップは一般的なガイドラインであり、具体的な手順や選択すべき技術はプロジェクトの目的やデータによります。また、自然言語処理と機械学習の両方についての深い理解が必要となります。PythonやRなどのプログラミング言語、PandasやNumPyなどのデータ分析ライブラリ、scikit-learnやTensorFlowなどの機械学習ライブラリ、そしてNLPライブラリ(例えば、NLTKやspaCy)の知識が必要です。

データセット作成の問題

本アプローチについてはいずれもデータセットを作る必要があります。ただし本件の場合、権利上の問題が考えられます。音源データの解析は楽曲の実データが入手する必要があり、データの収集も分析もあまり現実的ではありません。歌詞についてはAPIを用意しているサービスも存在しますが、大量のデータ収集は難しいこと、webスクレイピングを行うにしても許可されていない場合が多く、現実的ではありません。

好きな曲を分析してから探すアプローチ

アプローチしやすいであろう歌詞のデータについて、楽曲を探すことを検討します。似たような歌詞のデータを探すために、元となる歌詞データの特徴抽出をして、歌詞の検索サイトなどを利用して少しずつ探索するようなアプローチを考えることにします。

次のようなステップで行うことが考えられます:

  1. 特徴抽出: 元となる歌詞から特徴を抽出します。特徴抽出には、単語の出現頻度(Bag of Words)や単語の文脈を考慮したベクトル(Word2Vec、FastText、BERTなど)を用いることができます。
  2. 検索クエリの生成: 抽出した特徴から検索クエリを生成します。検索クエリは特徴的な単語やフレーズを含むことができます。
  3. 検索: 生成した検索クエリを使って歌詞の検索サイトを検索します。
  4. 結果の評価: 検索結果の歌詞を元の歌詞と比較し、類似性を評価します。評価にはコサイン類似度やJaccard係数などの手法が用いられます。
  5. 推薦: 評価結果が一定の閾値以上の曲を推薦します。

このアプローチは、元となる歌詞の特徴を基に新たな歌詞を探すため、一定の効果が期待できます。ただし、このアプローチでは歌詞の全体的な意味や感情を捉えることは難しいかもしれません。これは、検索クエリは一部の特徴的な単語やフレーズを基に生成されるため、歌詞の全体的な内容や感情を完全に反映することは難しいからです。

では、検索元の歌詞から感情やストーリーを推測して、そこから検索クエリの候補を算出して検索、比較という方法はどうでしょうか。具体的には、以下のような手順で実装することが考えられます。

  1. 感情分析と主題分析: 元となる歌詞から感情と主要なテーマ(ストーリー)を分析します。感情分析にはNLPの手法である感情分析(Sentiment Analysis)を、主題分析にはトピックモデリング(Topic Modeling)のような手法を使用します。これにより歌詞から感情(例えば、喜び、悲しみ、怒り、驚きなど)と主要なテーマ(例えば、愛、別れ、旅、夢など)を抽出します。
  2. 検索クエリの生成: 分析結果を基に検索クエリを生成します。たとえば、「喜び」と「愛」が主要な感情とテーマであれば、それに関連する単語やフレーズを含むクエリを生成します。
  3. 検索: 生成したクエリを使って歌詞の検索サイトを検索します。
  4. 結果の評価とフィルタリング: 検索結果の歌詞を評価し、元の歌詞と類似の感情と主題を持つ曲をフィルタリングします。これには、元の歌詞と検索結果の歌詞に対して感情分析と主題分析を再度行い、その結果を比較することが考えられます。
  5. 推薦: フィルタリング結果を基に曲を推薦します。

このアプローチは、歌詞の全体的な感情とテーマを考慮するため、単に特徴的な単語やフレーズを基に検索する方法よりも高度な推薦を可能にします。ただし、感情分析や主題分析の精度は使用するツールやアルゴリズムに大きく依存します。また、これらの手法は一般的には英語のテキストに対して最適化されており、日本語のテキストに対する精度は必ずしも高くないかもしれません。これらの点を考慮に入れながら、適切なツールやアルゴリズムを選択することが重要です。

まとめ

新しい音楽との出会いを求めて、機械学習でアプローチする方法について検討しました。ただ音楽といってもデータが莫大なので、一般的な音楽配信サイトなどではタグを使う、ユーザーリストから傾向を探る、といったことは行っていでも、楽曲のデータの中身まではまだ分析してみる余地はあるのではないでしょうか。「あなたが気に入る未体験のプレイリスト」提案してほしいですよね。

バーマン
プロダクトマネージャー
ソフトウェア開発に長く従事しています。
・機械学習のサンプルコード作成
・生成型AIから調べたことのまとめ
・これまでのビジネスで経験したことのまとめ
を記事として作成させていただいています。
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次