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

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

ガラスを割れ!を聞いて

本日より欅坂46の最新シングル「ガラスを割れ!」が発売及び、各ストリーミング配信サービスでも配信が開始されました。本作の作曲者は前迫潤哉さんとYasutaka:Ishioさんです。このコンビによる楽曲としては、欅坂46では、「W-KEYAKIZAKAの詩」が有名な曲です。

 

W-KEYAKIZAKAの詩

W-KEYAKIZAKAの詩

  • provided courtesy of iTunes

 

本シングルには、カップリングを含め7曲が新しく発表されていますが、「サイレントマジョリティー」(サイマジョ)、「不協和音」で有名なバグベアさんや、「エキセントリック」等で有名なナスカさんの楽曲はありませんでした。

 

サイレントマジョリティー

サイレントマジョリティー

  • provided courtesy of iTunes
不協和音

不協和音

  • provided courtesy of iTunes
エキセントリック

エキセントリック

  • provided courtesy of iTunes

 

ただし、バグベアさんは来週発売のAKB48の最新シングル「ジャーバージャ」のカップリング曲で、HKT48の「ぶっ倒れるまで」の楽曲提供をしています。

 


【MV】ぶっ倒れるまで Short ver.〈HKT48〉/ HKT48[公式]

 

だいぶ前置きが長くなりましたが、ガラスを割れ!はドコモの大型タイアップが付き、大々的に流れています。


「ハピチャン」篇


「欅坂で会合」篇

 

CMでは25歳以下のユーザーに特典クーポンを配ることを謳っています。曲中では歌詞に、「犬」という言葉が何回か出てきます。全ユーザーに対してクーポンを配るというのは某S社が有名ですが、そのS社を意識して「犬」という言葉をちりばめているのでしょうか?

 

曲では全体的にベースの低音が印象的です。ベースの低音が「夢見る少女じゃいられない」で似ていることから、織田哲郎さんの作曲が一時噂されたこともありました。

 

夢見る少女じゃいられない

夢見る少女じゃいられない

  • provided courtesy of iTunes

 個人的な印象としては、良曲判定という所でしょうか?神曲よりは落ちるけれども、悪くは無いという感じです。カップリング曲についても順次記入していこうと思います。

 

ガラスを割れ!

ガラスを割れ!

  • provided courtesy of iTunes

Word2Vecでプレイリスト生成してみる実験の続き

前回、一定の成果があると見込めたので今回はデータ量を増やしてやってみました。

  

psyduck-take-it-easy.hatenablog.com

psyduck-take-it-easy.hatenablog.compsyduck-take-it-easy.hatenablog.com

 

import time
import psycopg2
import psycopg2.extras
import urllib.request
import json
import http
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 from_artist, from_song FROM similar_track")
track_list = cur.fetchall()
conn.close()
return track_list

def model_dev():
track_list = track_search()
model_group = []
for i in range(len(track_list)):
track = track_list[i]
print(track)
start = time.time()
input_artist = track[0]
input_song = track[1]
api_artist = urllib.parse.quote(input_artist)
api_song = urllib.parse.quote(input_song)
api_call_url1 = "http://ws.audioscrobbler.com/2.0/?method=track.getsimilar&artist="
api_call_url2 = "&track="
api_call_url3 = "&api_key="
api_key = "6252c509f1dbb3dd744e6c16422e5175"
api_call_url4 = "&format=json"
api_call_url = api_call_url1 + api_artist + api_call_url2 + api_song + api_call_url3 + api_key + api_call_url4
try:
address_json = urllib.request.urlopen(api_call_url)
data = json.loads(address_json.read())
similartracks = data["similartracks"]
track = similartracks["track"]
similar_group = []
for i in range(len(track)):
track_infomation = track[i]
match_index = track_infomation["match"]
if match_index < 0.01:
break
song_infomation = track_infomation["name"]
artist_infomation = track_infomation["artist"]
artist_infomation = artist_infomation["name"]
input_data = input_artist + " — " + input_song
similar_group.append(input_data)
infomation_data = artist_infomation + " — " + song_infomation
similar_group.append(infomation_data)
end = time.time() - start
if end > 100:
print("timeover")
break
except KeyError:
continue
except http.client.IncompleteRead:
continue
model_group.append(similar_group)
print("modeldev")
model = word2vec.Word2Vec(model_group, size=100, min_count=1, window=5, iter=3)
model.save("similar_song.model")


if __name__ == '__main__':
model_dev()

 

 

さて、前回と一部実装を変更した箇所があります。それはDBへのアクセスです。前回はlast.fmのデータをあらかじめ保存したDBから一旦、アーティスト名と曲名のリストを取り出しそこから、もう一度DBにアクセスして、類似曲のリストを取り出していました。しかし、今回はDBから取り出すのを最初の1回のみにとどめ、類似曲のリストはその都度last.fmのデータを参照するように実装を変更し、PCへの負荷を減らすようにしました。

 

さて、ここで困った事が発生しました。モデル構築に行く前でプログラムが動かなくなってしまいました。現状、DBには類似曲が呼び出されていないものが多数あり、モデル構築中ではないことも確認しています。また、もしものために、ある秒数(今回は100秒)を経過した場合には自動的に離脱する処理を入れたつもりなのですが、上手くいっていない状況です。

 

エラーが何も出ていない状況で止まってしまうのは初めてなので、まだ解決策が浮かんでいません。皆さまのお知恵を拝借したいです。

【サポーターズCoLab勉強会】実務で使う自然言語処理をするに行ってきました

2月27日に【サポーターズCoLab勉強会】実務で使う自然言語処理をするがあったので、行ってきました。

 

supporterzcolab.com

www.slideshare.net

github.com

 

まず、自分の認識として、先端のはやり技術とビジネス最前線で使える技術には落差があるのは改めて再認識出来たと感じています。

 

参考になった部分としては、キーワード索引の重要性だと思います。日本語を形態素分析すると、どうしても助詞や助動詞が形態素数を計測すると上位に来てしまいます。そうなると、形態素から文章の内容を類推する事が難しくなってしまいます。そういった意味では重要な手法だと思いました。

 

懇親会では、機械学習エンジニアのあるべき姿についての話になりました。機械学習のコンペとしてKaggleが世界的に有名です。

www.kaggle.com

Kaggle: Your Home for Data Science

しかし、Kaggleの上位ランカーと会うと意外な事実があるとの事でした。実は、一部だと思うのですが、用いた手法に関して中身を理解していないという事でした。結局中身を説明出来なければその先に話が発展しないというものでした。近頃、Kaggleの成績を採用の指標として用いている企業があると聞きましたが、このようなデメリットがあることが理解出来ました。

 

機械学習で用いられる数学は大変高度なものですが、この中身を理解することによってエンジニアとしての中身をより向上出来ると確信した時間でした。

第25回 Pythonもくもく会に行ってきました

2月24日に「第25回 Pythonもくもく会」に行ってきました。

 

mokupy.connpass.com

 

1回参加申し込みをしたのですが、都合が付かなくなったので、今回初めて参加しました。名前とする事をホワイトボードに記載して、自己紹介する形式でスタートしました。Python限定のため、機械学習の方が多いと思いましたが、Djangoの方が多く、ビックリしました。昼食時には色々と情報交換が出来ました。都合により、昼食後離脱してしまいましたが、今後も定期的に参加しようと思います。

API Meetup Tokyo #24 に行ってきました

2月23日に「API Meetup Tokyo #24 〜スマートスピーカーAPI連携〜」という勉強会があり参加してきました。会場は高円寺にあるヴァル研究所でした。

 

api-meetup.doorkeeper.jp

 

ヴァル研究所といえば、「駅すぱあと」で有名な会社であり、折しも勉強会の前日に誕生30周年を迎えたとの事でした。実は私は路線図機能が無かったWin95の時代より駅すぱあとを使用しており、一度訪問したい企業の1つでもありました。

 

駅すぱあと

駅すぱあと

  • Val Laboratory Corporation
  • ナビゲーション
  • 無料
駅すぱあと(Windows)2017年12月

駅すぱあと(Windows)2017年12月

 

 

社内には91年以降の時刻表がずらりと、本棚に収納されていたり、会議室の名称が「つばさ」や「こまち」といった新幹線の名称になっているなどのこだわりがありました。

 

内容ですが、LINEの方よりClovaに関して開発者向けの新機能についてお話しがありました。ただ、詳細については正式発表を待って欲しいとの事でしたので、記載については見送らせて頂きます。

 

懇親会では、ヴァル研究所の方とお話ししました。駅すぱあとの開発秘話を伺いました。初期の頃はPCの性能がそこまで良くなかった為、いかにメモリを消費しないで書くかに留意をしたそうです。しかし、今ではかえってコードの可読性が下がるというデメリットになってしまっているようです。貴重なお話しを伺えました。今後も折りを見て、色々と足を運んでみたいと思います。

プレイリスト生成の検証終了

コードのtry文を移動させたところ、きちんと動作して最後までたどり着いたので記載させて頂きます。

 

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 = ""
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")
try:
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")
continue


if __name__ == '__main__':
call_model()

 

 

結果は以下になり、前日暫定で出した数値を上回りました。

 

 ('Teresa Cristina e Grupo Semente', 'A Borboleta e o Passarinho')
KRD8 - 蒼いピストル ~らいらら第二章~
0.5622042417526245

 

これは、「Teresa Cristina e Grupo Semente」の「A Borboleta e o Passarinho」に最も近い曲として「KRD8」の「蒼いピストル ~らいらら第二章~」が抽出され類似度の数値は全学習データのうち最も高いという事になります。

 

O Mundo É Meu Lugar - Ao Vivo

O Mundo É Meu Lugar - Ao Vivo

 
Dream Rainbow ?次のステージへ一緒に行こう!?

Dream Rainbow ?次のステージへ一緒に行こう!?

 

 相変わらず、ジャンルの垣根を越えています… なお、それ以外の結果は以下の通りです。

[('KRD8 - 蒼いピストル ~らいらら第二章~', 0.5622042417526245), ('Jax Jones - Instruction', 0.4197536110877991), ('miwa - サヨナラ', 0.39838463068008423), ('Detlef Keller - Way 5', 0.3839055299758911), ("Ike Quebec - I've Got a Crush On You", 0.38365036249160767), ("Marty Paich - What's new?", 0.35652440786361694), ('a flood of circle - 春の嵐', 0.3534770607948303), ("Gigi Gryce - Nica's Tempo", 0.3506496250629425), ('Martha Argerich - Fantasiestücke, Op 12: Warum?', 0.34342825412750244), ('Wiener Philharmoniker - Smetana: Má Vlast, JB1:112 - 2. Vltava', 0.3430880308151245)]
 

 上記の結果を出したコードは以下を参照して下さい。

 

 

psyduck-take-it-easy.hatenablog.com

 

 

Instruction [feat. Demi Lovato & Stefflon Don] [Explicit]

Instruction [feat. Demi Lovato & Stefflon Don] [Explicit]

 
サヨナラ

サヨナラ

  • miwa
  • J-Pop
  • ¥250
  • provided courtesy of iTunes
Way 5

Way 5

 
I've Got a Crush On You

I've Got a Crush On You

  • provided courtesy of iTunes
What's New?

What's New?

  • マーティ・ペイチ
  • ジャズ
  • ¥150
  • provided courtesy of iTunes
春の嵐

春の嵐

  • provided courtesy of iTunes
Nica's Tempo

Nica's Tempo

  • ジジ・グライス
  • ジャズ
  • ¥250
  • provided courtesy of iTunes
Fantasiestücke, Op. 12: Fantasiestücke, Op. 12: III. Warum?

Fantasiestücke, Op. 12: Fantasiestücke, Op. 12: III. Warum?

 
スメタナ:交響詩「わが祖国」全曲、他

スメタナ:交響詩「わが祖国」全曲、他