talosのプログラミング教室

西野カナの歌詞って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倍くらい重いです。

そして最後はバッドエンドですね。

まとめ

意味は伝わるもののところどころ不自然なところがあり、西野カナの歌詞を作ることはできませんでした。

ただ、重さは西野カナ以上のものを作れたのではないでしょうか。

また、原曲の歌詞がまとまって出てきてしまうことがあり、データを増やした方が面白いかもしれません。