まとめ
- 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文字なので、例文を短くできるなら検討の余地あり
- ハロ/ハワユを正しく認識できる日は来るのだろうか。。。
改善の余地がありそうなもの
- 例文として渡すものをちゃんと選ぶ
- 典型的なもの + 失敗しやすそうなもの?
- 【歌ってみた】など、事前に消しておけそうなものは前処理で消しておく
- 文字数が減れば、その分安くなる
- 推定精度に影響するかどうかは要検証