電通総研 テックブログ

電通総研が運営する技術ブログ

ラップができるAIを作ろう Part.2 ~ChatGPTにラップさせる~

こんにちは、金融ソリューション事業部の若本です。

前回の記事に続き、AIを用いてラップの生成を行います。
前回の記事はこちらです。

前回までのあらすじ

ChatGPTでフリースタイル調のラップの生成をするためには、韻を別途取得するAIが必要でした。
そこで、語感踏みもある程度可能、かつ高速な韻の検索を実装しました。

韻を生成するパイプライン

今回の主目的は「韻が踏めるラップをAIで生成すること」です。
そのための最小限の構成として、韻のセットを複数取得して、その後にラップを生成することを考えます。

処理のパイプラインは下記の通りです。

「韻の検索」に加えて、主に追加で必要なものは下記の通りです。

  1. ChatGPTに与えるプロンプト
  2. 韻を自動で取得する機能

1) ChatGPTに与えるプロンプト

下記のpromptをChatGPTに与えます。

単語/フレーズのセットを使用して、出力にラップを表示してください。
セットの中の単語/フレーズは連続して使用すること。
また、各セットのラップは短くし、同じ長さに収めること。
絶対に英語のみで出力してはいけません。

あなたはラッパーです。相手に向けてどちらかの方針でラップしてください。
1. 自分をアピールする
2. 相手を批判する

使用可能な表現:a yo、you know?、~してやる、そんな感じで、yeah
絶対に使用してはいけない表現:~だ、文末が「だ」で終わる表現

例:
単語/フレーズのセット: 
1:単語A、単語B...
2:単語C、単語D...

出力:
1:
~省略~
2:
~省略~


単語/フレーズのセット: 
{data}
出力:

{data}内には「1:単語A、単語B...」のような形で踏ませたい韻の情報を自動的に入れます。
※「例:」の箇所は実際に使用したものから変えています。実際には、踏む単語と対応するラップをfew-shotとして与えました。

【試行錯誤した点】

  • 条件付け(1~4行目)
    • 口語調があまりにも多かったため、短く区切るように指示しました。
    • ばらばらに韻を使うのではなく、なるべく隣接した場所で使うよう指示しています。
    • 英語のフレーズを登録しているのですが、英語のフレーズばかりだと英語でラップを始めます。そのため、英語だけにしないように指示しています。
  • スタンス(6~8行目)
    • 韻を踏む単語に引っ張られ過ぎて、ラッパーでなくなることが多かったのでスタンスを明確にしました。
  • 表現の指示(10~11行目)
    • ラッパーのよくある口癖を入れています。逆に、ラッパーがあまり使わない印象のある「~だ」が目立ったので禁止しました。
  • few-shot(13行目~)
    • 実際のラッパーの踏み方を例として与えました。出力の形式を覚えさせる意味合いが強いです。

OpenAIからプロンプトのTipsも公開されていますので、適宜ご参照ください。
「~してはいけません」は守られない場合も多々あるため、禁止したい表現は英語で指示したほうが良い結果になりそうです。改良の余地は多々ありますが、目的達成には上記で十分でした。

2) 韻を自動で取得する機能

前回の記事の「韻の検索」を用いて、ランダムに単語のセットをN個選出します。
セットの中に含まれる単語/フレーズ数はM個です。
N, Mともにランダムな数字としました。どちらも最小値/最大値をお好みで指定します。

今回は多様性重視&ランダム性重視ということでこのような仕様としています。
選んだセット同士の相性が良くない可能性はありますが、何度も試していいものが出てくることを期待します。いわば数打ちゃ当たる方式です。

結果

上記の追加処理を統合します。筆者はfletを用いたアプリにしました。
ボタンをクリックすると5秒ほどで生成されたラップが返ってきます。制作者の思い入れ補正もあると思いますが、手軽に出せて良い感じです。

ポンポン出せるだけでなく、たまにくらうものもあるので、ボタンを押す手が止まりません。
なお、韻の検索、ChatGPTの生成ともにランダムですので同じバースは出てきません。

ChatGPT バース集

以下、自動で生成されたラップのうち、くらったものをいくつか紹介します。

俺のラップで済ませる
言葉で訴える 伝わるはず
他のラッパーは食われる
俺の経験を踏まえる
でもやっぱり好かれる
ゆとりのあるstoryを語る
俺の強みはそこにある

解説:「済ませる/訴える/食われる/踏まえる/好かれる」「story/強み」の怒涛の踏み。言ってることは分かるようで分からないですが、余裕と自信を感じます。

Yo, check the format
俺のスタイルはforward
Tobaccoの匂いが漂うstreet corner
でも俺のラップはnever later
このエリアで俺がrule the paper
言葉はweapon like a samurai saber

解説:英語も柔軟に取り込めています。オシャレ感があってすきです(語彙力)。

I write my rhymes with precision, like 清書
My stage presence is like a grand 劇場
My style's a fusion of East and 西洋
My skills keep growing, never stop 成長

解説:英語が出力の大半を占めることも。「My style's a fusion of East and 西洋」は韻を踏みつつも、このバースを象徴している良いパンチラインです。多言語を操るChatGPTだからこその個性的なバースですね。

おわりに

今回は手軽な方法でChatGPTのラップ生成を行いました。
上記のクオリティのものがザラに出てくるので、作っていて非常に楽しかったです。
今回は行っていませんが、対戦相手にアンサーしたり、曲のサンプリングをしたりなどもパイプラインを工夫すれば対応できるポテンシャルはあります(ここまでできればThis is HIPHOPですね)。

ここまでお読みいただき、ありがとうございました。
皆さんもぜひGPTで色々遊んでみてください。Peace!

執筆:@wakamoto.ryosuke、レビュー:@yamada.y
Shodoで執筆されました