西野カナの歌詞ってAIが考えても区別つかないんじゃね?
スポンサーリンク
はじめに
二回連続で東海オンエア関連の記事です。
今回はこの動画を見てひらめきました。
「りょうとしばゆーが考えた歌詞はうまくいかなかったけど、AIならいけるんじゃね?」って。
それではやっていきましょう。
元データ
うたまっぷから歌詞を集めます。(手作業)
最初は全曲集めるつもりでしたが、西野カナの歌って意外と失恋ソング以外も多いことに気づきました。
それでは、世間のイメージする西野カナの歌を作れない。。。
そこで、JOYSOUNDの人気ランキングトップ20の曲のみを集めることにしました。
下記に一覧を示します。
トリセツ 会いたくて 会いたくて if Darling Best Friend Bedtime Story もしも運命の人がいるのなら Dear... 君って あなたの好きなところ Esperanza アイラブユー Have a nice day Dear Bride GO FOR IT!! たとえ どんなに... このままで 私たち パッ 好き
作詞
AIといってもマルコフ連鎖で作詞します。
このページを参考にプログラムを作りました。
マルコフ連鎖を使って文章生成をしてみる | cedro-blog
ソースコードは以下の通りです。
import os import MeCab import random PATH = './lyrics/' def add_dictionary(text, dic): tagger = MeCab.Tagger('-Owakati') words = tagger.parse(text).split(' ') w1, w2 = '', '' for word in words: if word == '\n': continue if w1 and w2: if (w1, w2) not in dic: dic[(w1, w2)] = [] dic[(w1, w2)].append(word) w1, w2 = w2, word def make_dictionary(dic): songs = os.listdir(PATH) for song in songs: with open(PATH+song, 'r', encoding='utf-8') as f: text = f.read() add_dictionary(text, dic) def generate(): dic = {} make_dictionary(dic) num = 200 result = '' w1, w2 = random.choice(list(dic.keys())) for i in range(num): tmp = random.choice(dic[(w1, w2)]) result += tmp + ' ' w1, w2 = w2, tmp return result if __name__ == '__main__': print(generate())
このプログラムを実行してできた歌詞が以下の通りです。(見やすいように改行しています)
も 目と 目 を 閉じれ ば いつ でも 君 が いる よ ただ それ だけ で 強く なれる よ いつか 大人になっても 同じ よう に " 好き だ よ って やっぱり 私 は 何 に も キュン と し たい 気分 刺激 が ない 理想 結局 は 「 好きになった人 が タイプ 」 そういう もん でしょ それでも 昔 から 知っ てる みたい だ ね 思い出し て ごらん よ 私 は い ない ねぇ Dariling どっち が いい ? この スカート と ワンピース あー 、 今 あくび し て いる その 笑顔 が 大好きだよ 君 が い て よかっ た よ どんな 時 だって いつも 笑っ て くれ た の に メイク も 落とさ ず ベッド に ダイブ は い ない のに すぐ に 飛ん で く から 、 絶対 ありがとう 君 が いれ ば 特別 だ から 近 すぎる と たまに 忘れ てる 知らず 知らず の うち に わがまま 言っ て た の も し あの 時 諦め ず に I love you 電話 かけ て くれ て どうも ありがとう ご 使用 の 前 じゃ 大人ぶっ て そんな こと 心 の 中 で ねぇ Darling あなた しか いない そう きっと こんな 毎日 が 幸せ な の に 届か ない 想い my heart
明るい曲かと思えば急に暗くなるメンヘラチックな歌が出来上がりました。
最初が明るいだけに本家の3倍くらい重いです。
そして最後はバッドエンドですね。