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

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

コードを一部修正しました

以前作ったモジュールに一部不具合が生じていたので修正しました。最も、冗長化しているのでそれを根本的に直さないといけないのですが…

 

github.com

 

動かす順番ですが、まず「user_get_recent_tracks.py」を動かし、DBに未収録の聴取楽曲を一時保管用のテーブルに保存します。次に、「get_similar_track.py」を動かし一時保管のテーブルからデータを取り出し、既存のデータと照合をして既存のデータが未収録の場合にはAPIからデータを呼び出し、データを専用のテーブルに収録します。データが非存在の場合には別のテーブルに収録します。そして、データの存在、非存在に関わらず、API呼び出しが終わったデータは一時保管用のテーブルから削除します。

 

しかし、数週間前から一時保管用のテーブルから一部の楽曲が削除されないという事象が発生していたので、今回改修を行いました。原因ですが、この改修の前に今まで、多くても100曲までしか取り出さない仕様だったのを、APIで呼び出される限界までに変えたところ、いくつかのエラーが出ない状況になったと思われます。

 

もう少し、運用をして不必要なエラー回避文の削除を行おうと思います。

 

www.last.fm

「It・広告界隈 第2回 渋谷ちょい飲み部 ~ハイボールと唐揚げでハイカラ会~」に行ってきました

3月19日に「It・広告界隈 第2回 渋谷ちょい飲み部 ~ハイボールと唐揚げでハイカラ会~」があったので行ってきました。

 

会場はウィルゲート様でした。

 

www.willgate.co.jp

 

以下のブログ主様と直接交流させて頂きました。

 

willow710kut.hatenablog.com

blog.zoe.tools

 

また、新しい方とも交流させて頂きました、ただ、自分のブログの拡散が上手く出来ませんでした。自分のブログの拡散方法は今後の課題ですね…

「スマートスピーカー勉強会 #3」に行ってきました

3月7日に「スマートスピーカー勉強会 #3」に行ってきました。

 

kotodama.connpass.com

 

私は#2から参加していますが、主催の方がスマートスピーカーの最新事情に明るかったので、今後も継続して参加する事を決めていました。

 

本セッションでは、2件の講演発表がありました。

・「家電 × VUI」コードベリー VUI部 藤原祥雄さん

この勉強会の主催者である藤原さんです。この勉強会には、この人のお話を聞きに行っていると言っても過言ではありません。読み方は「ふじはら」だそうです。(強調されていました) 今回は、家電とVUI(voice user interface)について、テレビ、電子レンジ、水回り、家に分けて最新事情についてお話し下さいました。例えば、電子レンジではAlexaに対応スキルが提供されていることや、食材を入れるだけで最適な調理法や調理時間を提案するものが既に登場している(ただし16万円)という事例の紹介がありました。また、水回りについてもVUIで繋げる構想が動いているという事でした。さらに、家ごとAlexaで操作出来る究極のスマートホームの構想が動いているという事でした。まとめとしては、スマートスピーカーから操作可能になる家電はまだまだ増えそうであること、独自の音声認識技術とAIを組み合わせるパターンも増えそうであることが展望として語られる一方で、「Alexa」と言った瞬間にAlexaを搭載している家電に一斉に振り向かれたらどうするかが課題であるとという事で締められました。

 

今後、VUIで操作可能な家電が増えると、呼びかけると複数の家電が反応してしまう問題は起こりえます。よって、今後は室内に一括管理できる司令塔のようなものが必要であると感じました。

 

・「音声AIアシスタントをビジネス活用するには?」WHITE inc UXデザイナー・プランナー 伊東春菜さん

こちらは、主に社内での取り組みを中心にお話しされていたので、内容については割愛させて頂きます。

 

LTセッションでは、以下のような発表がありました。

・「Google Homeでつくるスマートホーム」田中みそさん

・「VUIアプリの苦悩、自動テストをGoogleHomeが解決してくれる?」horsewinさん

・「音声アシスタント導入に動く国内事業会社の反応」トリトメ代表取締役 西部一英さん

・「スマート家電も赤外線家電もスマートスピーカーでまとめて操作」Tak Jagaさん

・「Google Home で遊んでみた」Microsoftテクニカルエヴァンジェリスト 千代田まどか(ちょまど)さん

・「AIY kit をつかわないでGoogle Assistantを作る」Kouheiさん

 

LTでは「IFTTT」に関する話題が出てきたので、IFTTTに関して今後勉強する必要があると感じています。

 

ifttt.com

 

LTの講演者として登壇されたちょまどさんは、プログラマー兼マンガ家として知られており、昨年の「SPAJAM2017」では審査員を務めていらっしゃいました。(SPAJAM2018でも審査員をされるそうです)

 

spajam.jpspajam.jp

 

LTではちょまどワールド全開という』感じで独特の世界観に会場を包み込んでいました。

 

twitter.com

 

ただ、翌日に予定が入っていたので懇親会の参加はせずに帰りました。既に、月末に勉強会が決まっているのでそこにも行く予定です。

 

kotodama.connpass.com

 

今後もこの勉強会は参加する予定です。

ガラスを割れ!を聞いて

本日より欅坂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秒)を経過した場合には自動的に離脱する処理を入れたつもりなのですが、上手くいっていない状況です。

 

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