2011-06-25 13 views
3

私は何百万もの曲を持っていますが、各曲には一意の曲IDがあります。各曲IDに対応して、曲名、アーティスト名、アルバム名、年などの属性があります。類似の音楽を保存するのに最適な方法

今、2つの曲の類似度を調べる仕組みを実装しました。 これは私に0〜100の値を与えます。

したがって、実行時には実行できない類似の音楽をユーザーに表示する必要があります。私は、それぞれの曲とすべての曲との間の類似度の値を前処理する必要があります。

したがって、私は3つの属性を持つDB、I nは曲の数はn×n個のレコードを有するであろう

song1, song2, similarity 

を作成した場合。

そして、私は似た音楽を取得したい時はいつでも、私はこのクエリを実行する必要があります。

SELECT song2 WHERE song1 = x AND similarity > 80 ORDER BY similarity DESC; 

そのような情報を維持するために何かを提案してください。

ありがとうございました。

+1

オーダーが80未満の曲をすべて検索する必要はありますか?なぜそれを記録しないのですか? 80未満の場合は何ですか? – Cups

+0

私はできますが、私はこの関数getSIMILARITY(songid1、songid2)を持っているので、それは私に似ています。しかし、実行時にそれを行うと、多くのDBクエリが存在します。 私はトップ20の類似曲を探す必要があるためです。私は各曲との類似点を抽出する必要があります。 – Kevindra

+0

私は曲間の類似度を事前に計算するのが最善だと思いますが、すべてのペアについて一度類似度を計算する必要があるため、n * nレコードにはなりません。言い換えると、song1-song2の類似度を計算した場合、song2-song1のためにそれを行う必要はありません。そして、それ自体で曲を計算する必要もありません。 – Abhay

答えて

1

"原型"の曲や分類との類似性を比較する方が良いと思います。あなたが類似性を判断するために使用する、どのような音声メカニズムでも、その曲に関する情報メタデータを含む指紋メカニズムを考案する。各曲を1つ(または複数)のカテゴリに配置し、そのカテゴリ内の曲をスコアリングします。これは、指紋を使用してカテゴリのプロトタイプとどれくらい近く一致しますか。数百または数千のカテゴリを持つことができます。つまり、音楽を考えるときに考える典型的なカテゴリではありません。

これを実行すると、カテゴリ別にインデックスを管理できます。同様の曲を検索する場合は、カテゴリ内のカテゴリと類似性の基準に基づいて重みを考案します。プロトタイプに最も近い。候補ソングと現在のソングの差の2乗で重みを掛け、カテゴリーのプロトタイプにします。より類似した低い値を持つトップ3のカテゴリの重みを合計します。

この方法では、曲のペア間の関係を維持するのではなく、各曲にいくつかのメタデータアイテムを保存するだけで済みます。メインアルゴリズムの実行速度が遅すぎる場合は、最も一般的な曲のペアワイズデータをキャッシュしておき、キャッシュされたデータセットにソングがない場合はアルゴリズム比較のデフォルトにします。

1

しかし、あなたが提案しているものは、各ペアを1回だけ保存することで行数を減らすことができます。その後、クエリを変更して、曲1または曲2の曲IDを選択します。

SELECT if(song1=?,song2,song1) as similar WHERE (song1 = ? or song2 =?) AND similarity > 80 ORDER BY similarity DESC; 
1

それは、類似情報を維持し、アクセスするために必要な大量の計算パワーを思わ:よう

何か。たとえば、すでに2000曲が処理されていて、次の新しい曲の類似度を2000回分析する必要がある場合です。スケーラビリティに問題がある可能性があり、データスキームによって短時間でデータベースが遅くなる可能性があります。

私はいくつかのパターンを見つけることができ、各曲にタグを付けることをお勧めします。たとえば、 "ブルース"、 "ロック"、 "90年代"のパターンを分析してタグを付けることができます。ある曲に基づいて同様の曲を検索する場合は、指定した曲に含まれるすべてのタグを検索するだけで済みます。例。 "新しい年齢"、 "スロー"、 "テクノ"

+0

はい。私はまた、タグの機能について考えました。数百万曲のタグを作成することは非常に難しいでしょう。 実際にすべての曲に完全なメタデータがあるわけではありません。私はウェブからそれらをクロールしました。 – Kevindra

+0

ソーシャルネットワークのパワーを発揮するのはどうですか? – Zeal

+0

どうですか?ユーザーを使ってタグを作成することを意味しますか?もしそうなら、なぜ彼らはタグをつくるのだろうか、それは彼らにとって魅力的ではない。 ;) – Kevindra

関連する問題