駆け出しエンジニアの作業ノート

駆け出しエンジニアが作業ノート風にまとめるページ(関係無い事もしばしば)

Word2Vecを用いたプレイリスト生成の結果報告

Word2Vecを用いたプレイリスト学習の結果が出たのでご報告します。検証用に、以下のコードを書きました。

 

import psycopg2
import psycopg2.extras
from gensim.models import word2vec

host_name =
port_number =
dbname =
rolename =
passwd =

def track_search():
conn = psycopg2.connect(database=dbname, host=host_name, port=port_number, user=rolename, password=passwd)
cur = conn.cursor()
cur.execute("SELECT DISTINCT artist, song FROM track_data")
track_list = cur.fetchall()
conn.close()
return track_list

def call_model():
track_list = track_search()
high_score = 0
high_score_track = ""
search_track = ""
try:
for i in range(len(track_list)):
track = track_list[i]
artist = track[0]
song = track[1]
input_data = artist + " - " + song
model = word2vec.Word2Vec.load("similar_song.model")
data = model.most_similar(positive=[input_data])
high_score_track_data_each_song = data[0]
high_score_track_each_song = high_score_track_data_each_song[0]
high_score_each_song = high_score_track_data_each_song[1]
if high_score_each_song > high_score:
high_score = high_score_each_song
high_score_track = high_score_track_each_song
search_track = track
print("New record!")
print(search_track)
print(high_score_track)
print(high_score)
else:
continue
except KeyError:
print("pass")
pass


if __name__ == '__main__':
call_model()

 

 

途中で、エラーが起きてしまい暫定の最終結果は以下のようになりました。

 

('Yo-Yo Ma', 'The Swan from Carnival of the Animals')
Sonny Rollins - I Feel a Song Coming On
0.5421106815338135 

 

これは、「Yo-Yo Ma」の「The Swan from Carnival of the Animals」を呼び出した所、「Sonny Rollins」の「I Feel a Song Coming On」が最も近いという事になります。また、数値は全モデルの中で最も高くなりました。(暫定)

 

The Swan from Carnival of the Animals

The Swan from Carnival of the Animals

  • provided courtesy of iTunes

ヨーヨーマ氏は世界的に有名なチェリストで、今回はサン・サーンス作曲の「動物の謝肉祭」より「白鳥」が全学習データのうち最も高い値を示しました。この曲と類似度が高いとされたのは、アメリカのジャズサックス奏者ソニー・ロリンズ氏の「I Feel a Song Coming On」でした。

 

I Feel a Song Coming On

I Feel a Song Coming On

  • provided courtesy of iTunes

 

では、「Yo-Yo Ma」の「The Swan from Carnival of the Animals」を以下のコードに入れて詳しく見てみます。

 

from gensim.models import word2vec

artist = input("アーティスト名を入力して下さい")
song = input("曲名を入力して下さい")
input_data = artist + " - " + song
model = word2vec.Word2Vec.load("similar_song.model")
data = model.most_similar(positive=[input_data])
print(data)

 

 

結果は、以下のようになりました。

 

[('Sonny Rollins - I Feel a Song Coming On', 0.5421106815338135), ("Philippe Lavil - Elle Préfère L'Amour En Mer", 0.40646299719810486), ('Claudine Longet - What Have They Done To My Song, Ma', 0.39044189453125), ('Wes Montgomery - Airegin', 0.3878239393234253), ('Sambrasa Trio - Nem O Mar Sabia', 0.3471757769584656), ('Art Pepper - Tin Tin Deo', 0.3459215760231018), ('Caetano Veloso - Carolina', 0.3435187041759491), ('新山詩織 - 絶対', 0.34327659010887146), ('マルタ・アルゲリッチ - Chopin: Mazurka No.37 In A Flat Op.59 No.2', 0.3389737606048584), ('Zagreb Guitar Quartet - Prelude (BWV 541)', 0.33820152282714844)]
 

 

最初の曲は既に、紹介したのでほかの曲はリンクのみ貼っておきます。

 

Elle préfère l'amour en mer

Elle préfère l'amour en mer

  • Philippe Lavil
  • フレンチポップ
  • ¥200
  • provided courtesy of iTunes
傷ついた小鳥

傷ついた小鳥

  • provided courtesy of iTunes
Airegin

Airegin

  • provided courtesy of iTunes
Sambrasa Trio Em Som Maior

Sambrasa Trio Em Som Maior

 
Tin Tin Deo

Tin Tin Deo

  • provided courtesy of iTunes
Carolina

Carolina

  • provided courtesy of iTunes
絶対

絶対

  • provided courtesy of iTunes

Zagreb Guitar Quartet

  • クラシック

 

クラシック音楽もあれば、それ以外の楽曲も混ざっており何とも言い難い状況です。最も、Word2Vecが成功した場合には数値が悪くても0.6以上を示しているので学習量を増やして対応してみようと考えています。