UGOKのヨコチ🦖です。
今回は、前回の続きとして関連研究として挙げられている文献の内容についてまとめたいと思います。
◆ Last.fmのAPIを使用した音楽検索システムの構築
文献はこちら
Last.fmのAPIを使用して、①指定したアーティストに似たアーティストの検索と②今聞きたいジャンルの有名なアーティスト名とそのアーティストの有名な曲名を検索でき、その結果からYouTubeの検索結果画面に行くことができる。
(1)tag.getTopArtist
指定したタグ(今聞きたいジャンル)に関連するアーティストを、ランクの高い順に整列する。
(2)artist.getTopTracks
指定したアーティストの曲を、人気の高い順に整列する。
(3)Data API
指定したワードで検索した結果を返す。
(4)artist.getSimilar
アーティストAに似ているアーティストTOP50を返す。
ここで、似ているアーティストにはそれぞれmatch度という数値がついてくる。このmatch度は一番似ているアーティストを1とし、数値はだんだん下がっていく。このmatch度はなだらかに下がっていくものもあれば急に下がるものもある。
□ similarの問題点
similarによる検索では、アーティストAから見たアーティストBのmatch度が0.7でも、アーティストBから見たアーティストAが0.7になるとは限らないことがある。これは基準をどちらに置いたかによってmatch度の算出結果が変わってくるためだと考えられる。
□ 解決方法
similarの問題を解決するためには両方向のmatch度を調べる必要がある。match度が0になることも考慮に入れ、正常な結果が出た「両方向からのmatch度の平均を得点とする」方法をとることで精度の高い検索結果が出ると考えた。以降、この方法を使った検索を「処理を行ったsimilar検索」、この方法を行わなかった検索を「処理を行わないsimilar検索」と呼ぶ。
①指定したアーティストに似たアーティストの検索
(1) ユーザーが入力したアーティストAを変数で受け取り、API(artist.getSimilar)を使ってAという名前のアーティストがいるかLast.fmに問い合わせる。
(2) 問い合わせた結果、Aがいた場合はLast.fmからmatch度のデータが返ってくる。該当するものがなければ、Last.fmからエラーのデータが返ってくる。エラーがあったらエラーを表示する。
(3) (2)で取得したアーティスト名とmatch度を配列に入れる(これを1ホップ目とする)。
(4) (3)で抜き出したアーティストにそれぞれAPI(artist.getSimilar)を使ってLast.fmに問い合わせ、match度のデータを受け取る。
(5) (4)で取得したアーティスト名へのmatch度を(2)と同様に配列に入れる(これを2ホップ目とする)。
(6) 1ホップ目と2ホップ目のmatch度の平均を出し降順に並べ替え、平均の高い順にTOP10のアーティスト名とその平均、前の順位をして1ホップ目の順位を表示する。
②今聞きたいジャンルの有名なアーティスト名とそのアーティストの有名な曲名を検索でき、その結果からYouTubeの検索結果画面に行く
(1) ユーザが入力したジャンルを変数で受け取り、API(tag.getTopArtist)を使って該当するジャンルがあるかLast.fmに問い合わせる。
(2) 問い合わせた結果、該当するものがあればLast.fmからジャンルのデータが返ってくる。エラーがあったらエラーを表示する。
(3) (2)で取得した1位から10位までのアーティスト名を抜き出し、配列に入れる。
(4) (3)で抜き出した10組のアーティストを使い、それぞれの曲のデータをAPI(artist.getTopTracks)を使ってLast.fmに問い合わせる。
(5) (4)で取得した10組それぞれのデータからそれぞれランク1位の曲名を抜き出し、配列に入れる。
(6) (3)と(5)で配列に入れたデータを検索ワードとした、YouTubeでの検索結果のURLをData APIを使ってYouTubeへ問い合わせる。
(7) (6)で取得したデータからURLとタイトルを抜き出す。エラーが返ってきた場合は、リンクを表示する代わりにリンクを得られなかったことをエラーとして表示する。そして、今まで取得したデータを使って、TOP10それぞれのアーティスト名と曲名、それらを検索ワードとして得たYouTubeへのリンクを表示する。
□ similarの比較
similar検索の比較を行うために、1980年代にデビューし、今も活動しているPOPなアーティストとしてKylie Minogueを使った。このアーティストに処理を行わないsimilar検索をした。その結果が下記である。
1. Dannii Minogue (match度:1)
2. Madonna (match度:0.474618)
3. Sophie Ellis-Bextor (match度:0.422288)
4. Girls Aloud (match度:0.340768)
5. Cheryl Cole (match度:0.332762)
また、Kylie Minogueに処理を行ったsimilar検索をした結果のTOP5が下記である。
1. Dannii Minogue (match度:1)
2. Madonna (match度:0.737309)
3. Scissor Sisters(match度:0.6250285)
4. Sophie Ellis-Bextor (match度:0.5870325)
5. Robyn (match度:0.499526)
上記の結果から、処理を行わないsimilar検索より処理を行ったsimilar検索をしたほうが、2位以下のmatch度の数値の下がり方がなだらかである。これより、POPなアーティストはほかのアーティストを聞いている人も比較的聞きやすいという特徴があると推測される。これに対して、個性的なアーティストとしてAvril Lavigneを検索した場合、2位以下のmatch度の数値は急激に下がっていた。これは、似たテイストを持つアーティストから検索アーティストへのmatch度が低いためであり、個性的なアーティストを聞く人は他のアーティストも聞くが、他のアーティストからは個性的なものを聞きにくいという特徴があると推測される。
また、match度が0.6以上あるアーティストは検索したアーティストと曲調がかなり似ていると感じられたという結果も得られている。
以上が関連研究として挙げられている文献の内容です。APIを用いてアーティストを検索するだけでなく、アーティスト同士がどれほど似ているのか数値で表しグラフ化することで似ている度合いを可視化することができ、またその傾向から聞く人もどういった聞き方をしているか・聞く人の好みの傾向まで推測できてしまうところがとても面白かったです。
書いてあったことを少し短くざっと書いただけですが、APIを使ってどのように情報を取ってきて求めている情報にまでたどり着くかまで細かく書いてあったので、今後自分の制作で参考にしようと思います。