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

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

Word2Vecを使ったプレイリスト生成実験

少し日が空いてしまいましたが、学習は継続しています。プレイリスト生成についてですが、Word2Vecを用いたモデル構築を行うことにしました。

 

文章の分かち書きの手法を応用し、Last.fmの書式にならい「アーティスト名 - 曲名」を単語とし、Last.fmの類似度データを使って、類似度が高いアイテムの集合をプレイリストとみなして、学習させることにしました。

 

次のようなコードを書いてみました。

 

 

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 similar_artist_search():
conn = psycopg2.connect(database=dbname, host=host_name, port=port_number, user=rolename, password=passwd)
cur = conn.cursor()
track_list = track_search()
model_dev = []
for i in range(len(track_list)):
track = track_list[i]
print(track)
cur.execute("SELECT to_artist, to_song FROM similar_track WHERE from_artist = %s AND from_song = %s AND match_index > 0.01", track)
similar_track_list = cur.fetchall()
similar_track_list.append(track)
print(similar_track_list)
similar_group = []
for j in range(len(similar_track_list)):
track = similar_track_list[j]
artist = track[0]
song = track[1]
artist_song = artist + " - " + song
print(artist_song)
similar_group.append(artist_song)
print(similar_group)
model_dev.append(similar_group)
print(model_dev)
model = word2vec.Word2Vec(model_dev, size=100, min_count=1, window=5, iter=3)
model.save("similar_song.model")


if __name__ == '__main__':
similar_artist_search()

 

途中中断もあり、まだ終わっていませんがモデル構築が終了次第、結果をお知らせしようと思います。