ABEJA Tech Blog

中の人の興味のある情報を発信していきます

ここまで生成AIが発達したならプロ野球の応援歌も生成AIが作ってくれるんじゃないか

目次

はじめに

こちらは、ABEJAアドベントカレンダー2023の9日目の記事になります。

どうも、限界野球オタクくんです ABEJAでデータサイエンティストをしております真鍋です。今年も野球ネタ全開で行きたいと思います。 去年は2番打者最強理論とか言って2日目にエントリーしましたが、今年はベストナインにちなんで9日目になりました だから何やねんってのは言わないお約束

今回のネタ

"生成AI"が2023年のIT流行語ランキング で1位になるくらいには、生成AIという言葉がビジネス全般で聞かれた1年だったと思いますが、結構ChatGPTを中心とする、言語モデル周りが主役だったのではないでしょうか。

そんな中で、最近ではMetaがMusicGenと呼ばれる音楽性性AIを発表したりしています。音楽生成AIのベンチマーク値も従来手法を上回っているらしいので、最新の手法で遊んでみるがてら、野球の応援歌のようなものは作れるのか?を検証してみます。

論文のAbstractでは、MusicGenはTransformerベースの手法になりますが、従来手法と異なる点として、シングルステージのTransformer言語モデルと、効率の良いトークンインターリーブのパターンを組み合わせることで、複数のモデルをカスケードする必要性をなくしているみたいです。

プロ野球の応援歌については、音楽的に詳しくないのもあり、詳細は割愛しますが、だいたい8小節+コールが多いイメージです。歌詞や曲調は割と球団ごとに色合いが出ますね…

実験

まずは、簡単にHuggingFaceのデモ を試してみます。いくつかプロンプトを試してみましょう…まずは英語で試してみます。

A baseball chant consisting with bass drums and trumpets (バスドラムとトランペットで構成された野球のチャント)

A high-tempo, encouraging cheering song for baseball; consisting of only bass drums and trumpets (ハイテンポで励ますような野球の応援歌。バスドラムとトランペットのみで構成されている)

A high-tempo cheering song for baseball; consists of a consistent beat of bass drums, and trumpets making a pop-like melody (ハイテンポな野球の応援歌; 一定のビートを刻むバスドラムと、ポップのようなメロディを鳴らすトランペットで構成される)

メロディがうまくつかないですね…

HuggingFace上だと限界がありそうなので、実際に手元のM2 Max搭載の私用端末で回してみます。 環境構築については、AudioCraftのGitHubの説明 の中の下記コマンドで問題なくできました (特にtorchを最初にインストールすることに注意です)。

# Best to make sure you have torch installed first, in particular before installing xformers.
# Don't run this if you already have PyTorch installed.
python -m pip install 'torch>=2.0'
# Then proceed to one of the following
python -m pip install -U audiocraft  # stable release
python -m pip install -U git+https://git@github.com/facebookresearch/audiocraft#egg=audiocraft  # bleeding edge
python -m pip install -e .  # or if you cloned the repo locally (mandatory if you want to train).

また、上記説明書ではffmpegのインストールも推奨しております。ただ、Macだとbrew installになります。

sudo apt-get install ffmpeg
# Or if you are using Anaconda or Miniconda
conda install "ffmpeg<5" -c conda-forge

あとは こちらのデモのNotebook をいい感じにいじります。

from audiocraft.models import MusicGen
from audiocraft.models import MultiBandDiffusion

USE_DIFFUSION_DECODER = False
# Using small model, better results would be obtained with `medium` or `large`.
model = MusicGen.get_pretrained('facebook/musicgen-small')
if USE_DIFFUSION_DECODER:
    mbd = MultiBandDiffusion.get_mbd_musicgen()

最初のブロックのmodelをmusicgen-small, musicgen-medium, musicgen-largeの3パターンにして、試してみます。実装上は3つのNotebookで、model以外は同じにして並行して実験をしてみます。

途中パラメータの設定があるのですが、汎用的な応援歌は8小節でコールも含めて15秒くらいなイメージなので、duration=15のみ変更します。

あとは、Text-conditional Generationのmodel.generate()にプロンプトを入れて、生成を待ちます。15秒の音楽の生成は、MusicGen-smallだと2分程度、MusicGen-mediumだと6分半、という実行時間でした。

まずは、先ほどのHuggingFaceで最後に試した、こちらのプロンプトを試してみます。 A high-tempo cheering song for baseball; consists of a consistent beat of bass drums, and trumpets making a pop-like melody (ハイテンポな野球の応援歌; 一定のビートを刻むバスドラムと、ポップのようなメロディを鳴らすトランペットで構成される)

Small

Medium

Large

…ちょっとまだまだですね。色々試してみると、「ハイテンポ」では、野球のハイテンポまではいかなさそうですね。

A 15-second, extremely high-tempo cheering song for baseball; Bass drums continuously makes a 4-beat, trumpets make a rock, energizing melody (15秒の、かなりハイテンポな野球の応援歌; バスドラムが継続的に4拍子を鳴らし、トランペットはロックでエネルギーが湧き上がるようなメロディーを奏でる) Mediumでこんな感じでした。

ちょっと近くなってきたかも。

A 15-second, extremely high-tempo cheering song for baseball; Bass drums continuously makes a 4-beat, trumpets make a 90's pop-like melody (15秒の、かなりハイテンポな野球の応援歌; バスドラムが継続的に4拍子を鳴らし、トランペットは90年代のポップのようなメロディーを奏でる)

Largeでこんな感じ。

いきなり曲が止まったり、切れたりしているのが惜しいけど、なんかホームまで駆け抜けそうな雰囲気はある。

この後もいくつか実験してみたのですが、Smallは、メロディがうまくつかなかったり、同じ太鼓のリズムの繰り返しだけになってしまっていたこともあった印象です。 また、「1-1-3拍子」や「4拍子」といったリズムや、「バスドラムが〜」や「トランペットが〜」といった楽器をプロンプトに入れても、あまり効いていないような雰囲気がありました。「人々が一緒に『オーオー』とか『ラララ…』と歌う」みたいなのもうまくいかず…

……

…チクショー!

しかし私、ここにきて気づきました。

「ドラムとトランペットだけでも他の楽器が入ってくるし、そもそもなんかバンドっぽくない…?」

…そうか、高校野球のブラスバンドならワンチャンそれっぽいのが出てくるのでは…?

Small

Medium

Large

…ちょっとそれっぽくなった気がする。

最後に日本語プロンプトをやってみました。 10秒強の、野球の応援歌。太鼓が一定のリズムを鳴らし、トランペットがポップでキャッチーなメロディを奏でる。曲は誰もが聞いたことあるようなメロディで、観客は一緒に歌い、盛り上がることができる。

Small

Medium

……

Large

………

…日本語は、まだ難しそうですね😇😇😇

まとめ

結論: 某同僚「全部ゲーム音楽っぽいですね。やり直し!」

ということで、続編があるかもしれません。 そしてみなさんも外野席でわちゃわちゃしましょう。

さいごに

We Are Hiring! ABEJAは、テクノロジーの社会実装に取り組んでいます。 技術はもちろん、技術をどのようにして社会やビジネスに組み込んでいくかを考えるのが好きな方は、下記採用ページからエントリーください! (新卒の方のエントリーもお待ちしております)

careers.abejainc.com