去年から途切れ途切れにやっているプロジェクトです。「ボカロ曲共通の特性」、及び「人気ボカロ曲を持てる特性」についての研究(むしろ遊び)。専門は統計科学から随分遠いから、まるで素人の試みですが、一応面白い発見や結果をここでレポートしようかと。

まずはデータソースについて説明します。ボカロ曲のメタデータ(コメントや再生数など、2007-約2016年末)は国立情報学研究所さんから取得しました。(様々な貴重なデータセットが公開されてるので興味ある方はぜひ。)
アクースティックデータ(旋律やコードなど)はInternet Archiveさんから取得した曲集(約2000曲)よりSonic Visualizerで抽出したもの。著作権上の理由で詳しく説明できないのでご了承ください。歌詞はミクwikiより(約4400曲)。


  • 再生数の対数によって作られたグループが、以下のグラフで表示されている。大きさは再生数を表し、トーンは投稿時間を表す(濃さ=新しさ)。X軸は長さ、Y軸はBPM。

vocaloid-history

少し読みにくいかもしれないが、最も顕著なのは「短く速い曲が人気」というトレンド。(常識かもしれないけど。)そして以下の図も同じことを表してる:

length-bgm-by-lognum

  • 次は各曲を一々表示するデータ一覧(濃いのは人気曲)。

bpm-length-overall

  • 少し興味深いのは次の「Log(ビデオサイズ)/秒」と「Log(再生数)」の相関性。よく考えたら当然のことだけど、一応これで証明する。

log-size-vs-log-wn


  • 歌詞について、LDAを使って64の「テーマ」を集計した。リストはこちら

  • (これから英語で書きます。後で日本語で書き直しましょう。)Some immediate fun corollaries:

  1. The five most popular topics, ranked by the sum over all songs of (song's view count times the component of that topic).
topic #32 (0.041): 0.068*"あなた" + 0.024*"ずっと" + 0.020*"くれる" + 0.017*"想い" + 0.017*"伝える" + 0.016*"気持ち" + 0.016*"心" + 0.015*"いつ" + 0.014*"歌う" + 0.013*"言葉" + 0.012*"そう" + 0.012*"いつも" + 0.011*"声" + 0.010*"きっと" + 0.010*"られる" + 0.009*"日" + 0.009*"歌" + 0.008*"笑顔" + 0.008*"忘れる" + 0.008*"胸"
topic #33 (0.017): 0.053*"貴方" + 0.019*"しまう" + 0.013*"居る" + 0.011*"手" + 0.010*"もう" + 0.010*"少し" + 0.009*"笑う" + 0.008*"二" + 0.008*"消える" + 0.008*"いい" + 0.008*"そう" + 0.007*"日" + 0.007*"見る" + 0.007*"中" + 0.006*"思う" + 0.006*"くれる" + 0.006*"白い" + 0.006*"今日" + 0.006*"一" + 0.006*"頃"
topic #26 (0.019): 0.064*"あなた" + 0.013*"手" + 0.010*"いく" + 0.010*"心" + 0.009*"中" + 0.009*"二" + 0.008*"もう" + 0.007*"誰" + 0.007*"泣く" + 0.007*"全て" + 0.007*"夜" + 0.006*"強い" + 0.006*"さ" + 0.006*"瞳" + 0.006*"くれる" + 0.006*"優しい" + 0.006*"指" + 0.006*"言葉" + 0.005*"触れる" + 0.005*"あう"
topic #44 (0.041): 0.024*"消える" + 0.021*"ゆく" + 0.018*"時" + 0.017*"想い" + 0.015*"続ける" + 0.013*"遠い" + 0.013*"心" + 0.013*"二" + 0.012*"記憶" + 0.011*"涙" + 0.011*"忘れる" + 0.011*"まま" + 0.011*"日" + 0.009*"夜" + 0.009*"いつか" + 0.009*"空" + 0.009*"流れる" + 0.009*"月" + 0.009*"届く" + 0.009*"言葉"
topic #50 (0.017): 0.229*"ら" + 0.025*"マスター" + 0.017*"く" + 0.012*"歌う" + 0.012*"るる" + 0.011*"くみ" + 0.010*"ー" + 0.010*"くに" + 0.009*"見る" + 0.008*"やる" + 0.008*"どう" + 0.008*"今日" + 0.007*"らん" + 0.007*"あげる" + 0.007*"さん" + 0.006*"くる" + 0.005*"ちゃう" + 0.005*"ちょっと" + 0.005*"あいつ" + 0.004*"こう"
  1. The five topics with most number of songs having them as the primary topic.
topic #32 (0.041): 0.068*"あなた" + 0.024*"ずっと" + 0.020*"くれる" + 0.017*"想い" + 0.017*"伝える" + 0.016*"気持ち" + 0.016*"心" + 0.015*"いつ" + 0.014*"歌う" + 0.013*"言葉" + 0.012*"そう" + 0.012*"いつも" + 0.011*"声" + 0.010*"きっと" + 0.010*"られる" + 0.009*"日" + 0.009*"歌" + 0.008*"笑顔" + 0.008*"忘れる" + 0.008*"胸"
topic #13 (0.029): 0.013*"手" + 0.013*"風" + 0.012*"夢" + 0.011*"色" + 0.010*"歩く" + 0.010*"いつか" + 0.009*"空" + 0.009*"ゆく" + 0.009*"道" + 0.009*"光" + 0.008*"く" + 0.008*"日" + 0.008*"いく" + 0.008*"場所" + 0.007*"景色" + 0.007*"消える" + 0.007*"遠い" + 0.006*"変わる" + 0.006*"中" + 0.006*"忘れる"
topic #17 (0.030): 0.053*"空" + 0.016*"光" + 0.015*"夢" + 0.015*"風" + 0.015*"行く" + 0.014*"手" + 0.013*"世界" + 0.011*"高い" + 0.011*"どこ" + 0.011*"翼" + 0.010*"見る" + 0.010*"遠い" + 0.010*"雲" + 0.009*"星" + 0.008*"明日" + 0.008*"心" + 0.008*"青い" + 0.008*"未来" + 0.008*"飛ぶ" + 0.008*"鳥"
topic #44 (0.041): 0.024*"消える" + 0.021*"ゆく" + 0.018*"時" + 0.017*"想い" + 0.015*"続ける" + 0.013*"遠い" + 0.013*"心" + 0.013*"二" + 0.012*"記憶" + 0.011*"涙" + 0.011*"忘れる" + 0.011*"まま" + 0.011*"日" + 0.009*"夜" + 0.009*"いつか" + 0.009*"空" + 0.009*"流れる" + 0.009*"月" + 0.009*"届く" + 0.009*"言葉"
topic #26 (0.019): 0.064*"あなた" + 0.013*"手" + 0.010*"いく" + 0.010*"心" + 0.009*"中" + 0.009*"二" + 0.008*"もう" + 0.007*"誰" + 0.007*"泣く" + 0.007*"全て" + 0.007*"夜" + 0.006*"強い" + 0.006*"さ" + 0.006*"瞳" + 0.006*"くれる" + 0.006*"優しい" + 0.006*"指" + 0.006*"言葉" + 0.005*"触れる" + 0.005*"あう"
  1. We asked the model to decompose one of the most famous vocaloid songs ever, メルト, into topics. This is the result.
with prob = 0.420761, topic = [貴方, しまう, 居る, 手, もう, 少し, 笑う, 二, 消える, いい, そう, 日, 見る, 中, 思う, くれる, 白い, 今日, 一, 頃]
with prob = 0.235391, topic = [雨, 傘, もう, 降る, 見る, 空, 濡れる, 二, 晴れる, まだ, そう, 明日, 時, せる, きっと, 行く, 街, 声, 夢, 今日]
with prob = 0.119666, topic = [あなた, あたし, 好き, 言う, いつも, 見る, 気持ち, いい, もう, 顔, ちゃう, くれる, お願い, 知る, これ, 大好き, 少し, そう, られる, ちょっと]
with prob = 0.100601, topic = [子, そう, いつも, くれる, 好き, 手, 一, どう, ため, 夢, さ, 初めて, 時間, ほしい, 一緒, いかが, 日, 朝, 魔法, 目]
with prob = 0.061914, topic = [わたし, くださる, ダメ, あなた, オレ, みつめる, すき, たち, 好き, ちゃう, もう, いい, 明日, 部屋, できる, せる, それ, どう, 愛, ここ]
with prob = 0.026996, topic = [雪, 白い, Oh, ほる, く, 街, はる, いく, 歩く, 舞い降りる, 降り積もる, 夢, 天使, ボーカロイド, ずっと, 中, 降りる, 手, ひらり, 空]
with prob = 0.025991, topic = [きみ, ぼく, ずっと, こころ, さ, ふたり, くれる, ひとり, きょう, いつも, あした, なか, ゆめ, いま, いく, くる, みる, かなしい, ひる, ここ]
  • We also let an Attention network learn the lyrics and let it compose some lines of its own. The results are mildly amusing. I have cleaned up this lyrics and if I get other parts working, may as well put together something listen-able.

Some notes for myself:

  • Metadata extraction wise, chord and tempo extractions are rather reliable, whereas melody not so much, which is what I'm currently working on.

  • For chord progression we tried to let neural network learn about the progression. There are some interesting outputs, but the machine hasn't learned to stabilize on one major/minor, so I'll present this later after I've fixed this problem.

  • We run some experiments measuring the auto-correlation of the chord progressions (i.e. how repeated are the chords). Those are unfortunately not correlated with the popularity of the songs.