Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
3
Help us understand the problem. What are the problem?
@miyatsuki

歌ってみた動画のタイトルから楽曲名を取得する (OpenAI編)

まとめ

  • OpenAIのAPIを利用することで、ほぼコーディングなしで楽曲名の抽出ができる
    • 1動画あたり1円程度
    • 精度は70%程度

前提

プロンプトプログラミングについては、下記の記事が参考になりました。
notebookへのリンクもあるので、一度試してみると良いと思います

背景

下記の記事の続編です。

やりたいこと

入力例: 【歌ってみた】ハロ/ハワユ【手描きPV】
欲しい出力: ハロ/ハワユ

前回のやり方で困っていること

  • ルールベース/正規表現を管理するのがしんどい
  • covered -> coverd の用なtypoも考慮する必要があり、手動管理ではラチがあかないなと思った

やったこと

アプローチ

下記のような例文を渡すことで、タイトルの推定を試みた
(動画タイトル -> 楽曲名を改行で区切ったもの)

【歌ってみた】炎 -LiSA / 『劇場版「鬼滅の刃」無限列車編』主題歌【covered by 西園チグサ】homura│Demon Slayer : Kimetsu no Yaiba->炎
SHUT-OUT / 白雪巴【オリジナル曲】->SHUT-OUT
『バレンタイン・キッス』を金髪4人で歌ってみた♡->バレンタイン・キッス
「君の名は。」スパークル/RADWIMPS Cover by大神ミオ【歌ってみた/4K】->スパークル
バブルラブ/角巻わため(Cover)->バブルラブ
【JK弾き語り】オラシオン弾いて歌ってみた【物述有栖】->オラシオン
【ときのそら × シグナルP】Wandering Days【オリジナル・ボカロPコラボ第2弾】->Wandering Days
ハッピーシンセサイザ/EasyPop【Covered by 朝日南アカネ/西園チグサ/にじさんじ】->ハッピーシンセサイザ
グッバイ宣言/Chinozo【Covered by 朝日南アカネ/にじさんじ】->グッバイ宣言
【Cover】サンドリヨン (Cendrillon)【レヴィ・エリファ/弦月藤士郎】->サンドリヨン
【オリジナルMV】Pretender / Official髭男dism(covered )歌ってみた【鈴鹿詩子/にじさんじ】->Pretender
【オリジナルMV】月光/白雪 巴->月光
[オリジナル曲]マヨナカヨナカ(into the midnight)/弦月藤士郎->マヨナカヨナカ(into the midnight)
パッチワーク/森中花咲【森中花咲イメージソング】->パッチワーク
レッド・パージ!!!/ メリッサ・キンレンカ Cover->レッド・パージ!!!
オトメロディー / 高橋美佳子(cover)えま★おうがすと/にじさんじ所属->オトメロディー
daze / じんfeat.メイリアfromGARNiDELiA (covered by ヒモと財布)【歌ってみた】->daze
逆光のフリューゲル / 緑仙&ドーラ (Cover)->逆光のフリューゲル
【オリジナル曲】百鬼マスカレイド【フルトイ】->百鬼マスカレイド
【歌ってみた】しんでしまうとはなさけない!【リゼアン/にじさんじ】->しんでしまうとはなさけない!
ロキ / 不破湊×ましろ Cover->

この場合、OpenAIのAPIの戻り値が 「ロキ\n ... 」 となってれば推定成功

コード

事前準備

import os
import openai

openai.api_key = "APIキー"

推定


# 例文
prompt = """【歌ってみた】炎 -LiSA / 『劇場版「鬼滅の刃」無限列車編』主題歌【covered by 西園チグサ】homura│Demon Slayer : Kimetsu no Yaiba->炎
SHUT-OUT / 白雪巴【オリジナル曲】->SHUT-OUT
『バレンタイン・キッス』を金髪4人で歌ってみた♡->バレンタイン・キッス
「君の名は。」スパークル/RADWIMPS Cover by大神ミオ【歌ってみた/4K】->スパークル
バブルラブ/角巻わため(Cover)->バブルラブ
【JK弾き語り】オラシオン弾いて歌ってみた【物述有栖】->オラシオン
【ときのそら × シグナルP】Wandering Days【オリジナル・ボカロPコラボ第2弾】->Wandering Days
ハッピーシンセサイザ/EasyPop【Covered by 朝日南アカネ/西園チグサ/にじさんじ】->ハッピーシンセサイザ
グッバイ宣言/Chinozo【Covered by 朝日南アカネ/にじさんじ】->グッバイ宣言
【Cover】サンドリヨン (Cendrillon)【レヴィ・エリファ/弦月藤士郎】->サンドリヨン
【オリジナルMV】Pretender / Official髭男dism(covered )歌ってみた【鈴鹿詩子/にじさんじ】->Pretender
【オリジナルMV】月光/白雪 巴->月光
[オリジナル曲]マヨナカヨナカ(into the midnight)/弦月藤士郎->マヨナカヨナカ(into the midnight)
パッチワーク/森中花咲【森中花咲イメージソング】->パッチワーク
レッド・パージ!!!/ メリッサ・キンレンカ Cover->レッド・パージ!!!
オトメロディー / 高橋美佳子(cover)えま★おうがすと/にじさんじ所属->オトメロディー
daze / じんfeat.メイリアfromGARNiDELiA (covered by ヒモと財布)【歌ってみた】->daze
逆光のフリューゲル / 緑仙&ドーラ (Cover)->逆光のフリューゲル
【オリジナル曲】百鬼マスカレイド【フルトイ】->百鬼マスカレイド
【歌ってみた】しんでしまうとはなさけない!【リゼアン/にじさんじ】->しんでしまうとはなさけない!"""

# 推定したい動画のタイトル
target = "ロキ / 不破湊×ましろ Cover"

# 例文にフォーマットを合わせる
prompt += "\n" + target + "->"

response = openai.Completion.create(
    engine="curie", # 精度はdavinciの方がよいが料金が1/10。財布と相談
    prompt=prompt,
    max_tokens=len(target), # 動画タイトルの長さ > 楽曲名なので、動画タイトルの長さを上限とする
    stop="\n" # 楽曲名は改行されていることがないので、stopwordに指定
)

estimated_title = response["choices"][0]["text"]

精度/コスト

条件

  • 歌ってみた動画/オリジナル曲の動画を100個ランダムに選択
  • 楽曲名の推定結果が完全に一致していた場合、正解とする
  • プロンプトに渡す例文は20個をランダムに選択

エンジンごとの結果

(どの動画を例文に渡すかによってブレるので参考程度)

  • davinci: 精度75%程度、1動画あたり10円
  • curie: 精度70%程度、1動画あたり1円
  • babbage: 精度65%程度、1動画あたり0.2円

Curieで推定失敗したもの(例)

動画タイトル 楽曲名 推定された楽曲名
Dua Lipa - Don't Start Now (cover by Akaihaato) Don't Start Now Dua Lipa - Don't Start Now
【歌ってみた】ハロ/ハワユ【手描きPV】 ハロ/ハワユ ハロ
卯月コウ 「感電」 感電 卯月コウ
全部自分の声で KING KING 全部自分の声
【オリジナルMV】愛を伝えたいだとか(あいみょん)cover【家長むぎ×鈴鹿詩子×える×夜見... 愛を伝えたいだとか 愛を伝えたいだとか 【オリジナル投稿】疯狂/ミルが付いてる -EDシャンプー/木村るると【
あらすじ的なすごいやつ そのに (DJ WILDPARTY megamix) あらすじ的なすごいやつ そのに あらすじ的なすごいやつ
【歌ってみた】夢追翔、「完全感覚Dreamer」を歌わせていただきました。【にじさんじ】 完全感覚Dreamer 夢追翔、「完全感覚Dreamer」を歌わせていただきました。
樋口楓 FRONTIER -Music Video- FRONTIER 樋口楓 FRONTIER
気まぐれメルシィKimagure Mercy/アキ・ローゼンタール【歌ってみた】 気まぐれメルシィ 悪ッ切わら
夢追翔 MV「青空を睨む」(Kakeru Yumeoi - Gaze into the sky) 青空を睨む 夢追翔
【オリジナルMV】可愛く『おじゃま虫』歌ってみた★星川サラ【にじさんじ】 おじゃま虫 可愛く『おじゃま虫』_(カンタン試聴)
お前も紅蓮華にならないか?『紅蓮華』feat.フミ民in節分【にじさんじフミ】 紅蓮華 お前も紅蓮華にならないか
【初投稿】元気よく「Booo!」歌ってみた★星川サラ【にじさんじ】 Booo! 元気よく全開
シド「乱舞のメロディ」 / 星街すいせい(Cover) 乱舞のメロディ シド「乱舞のメロディ」
リミッターを歌ったファイアードレイク【にじさんじ】 リミッター リミッターを歌ったファイアードレイク
【初投稿】エイリアンエイリアン/家長むぎ【歌ってみた】 エイリアンエイリアン エイリアンエイリアン【中央線/通勤電車ストリ
ダダダダ天使 ダダダダ天使 ダダダダダ
【歌ってみた初投稿】プラチナ / 坂本真綾 【Covered by 朝日南アカネ / にじさ... プラチナ ソングコレクション
【試聴動画】メジャー1stシングル『MARBLE』/ 樋口楓 MARBLE メジャー1stシングル『MARBLE』
【オリジナルMV】ファンサ/mona(CV:夏川椎菜) - シスター・クレアcover ファンサ ファンサ/mona(CV:夏川椎菜)
KING-Kanaria/covered by 鈴鹿詩子【歌ってみた】 KING KING-Kanaria
U・S - Utako Suzuka[Official Music Video]【鈴鹿詩子オ... U・S U・S - Utako Suzuka
「アカペラ」WILD CHALLENGER/ボボボーボ・ボーボボ「1Chorus」 WILD CHALLENGER アカペラ「1Chorus」

所感

  • 推定精度自体はルールベースの方が高くできそう
    • プロンプトプログラミングの場合、どうやったら精度上がるのか謎
  • しかし、管理の煩雑さを考えると、OpenAIに全て任せるのも悪くない気がする
  • 金額的にはCurieなら許容、Davinciはちょっと高い
    • 1token = おおよそ1文字なので、例文を短くできるなら検討の余地あり
  • ハロ/ハワユを正しく認識できる日は来るのだろうか。。。

改善の余地がありそうなもの

  • 例文として渡すものをちゃんと選ぶ
    • 典型的なもの + 失敗しやすそうなもの?
  • 【歌ってみた】など、事前に消しておけそうなものは前処理で消しておく
    • 文字数が減れば、その分安くなる
    • 推定精度に影響するかどうかは要検証
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
3
Help us understand the problem. What are the problem?