切り抜きAI作成記

8月の終わりに切り抜きAIをTransformerで作成するというブログを書きました。そちらの進展がどうなったか報告いたします。

結論から言うと前回の構想からはかなり変更して、それなりに動くものができました。以下では、ざっくりと作ったものを説明します。

教師データ

前回は教師データを作成する話を中心に書きましたが、そもそもこのデータ取る方法を変えました。

元動画の中から切り抜き部分を特定して動画内の字幕データに0と1みたいな形でラベルを付けていくという方法を考えていたんですけども、これはやめました。sentence transformerを使って、字幕を照合することでそこそこ特定できてましたが、どうもそこまで凝らなくても単純な方法があると気づいたからです。

その方法とは、切り抜き動画から取ってきた字幕に対して1、一般のVtuberの動画対して0という形で、動画の出所だけで0,1でラベルをつけるというものです。

これで学習した分類器は、与えられた字幕の出どころが切り抜きか、元動画かを判定します。これはいわば切り抜かれやすさを計算して分類を行うことになるので、切り抜きのスコア計算ができます。

Whisperの登場

AIの発展は早く、あっという間に状況が変わっていきます。9月下旬頃にOpenAIからWhisperという高精度な音声認識のAIモデルが公開されました。

元々はYouTubeによって自動的に付加される字幕を使って、切り抜きAIの入力にしようと考えていたのですが、whisperを使えば自前で文字起こしができるので、こちらを使うことにしました。

graph LR clip(切り抜き動画) --> whisper --> 字幕 original(Vtuber動画) --> whisper clip --ラベル1 --> ラベル original --ラベル0 --> ラベル 字幕 --> 切り抜きAI ラベル --> 切り抜きAI

学習のフローは上のような形です。切り抜き動画とそうでないVtuberの動画に対してwhisperで文字起こしを行い、文字起こしの出どころでラベルを貼ってAIに学習させます。

スコアを計算するときは、字幕だけ入力して、ラベルを予測し、ラベル1、つまり切り抜き動画であると判定する確率をスコアとして出力します。

学習方法の見直し

ラベル数を揃える

切り抜き動画の方がそうでない動画よりも短いので生成される字幕も少なくなります。これを単純に教師データとして与えると、ラベルの数が揃わず、いわゆる不均衡データとなります。

このままだと、とりあえず切り抜きじゃないと答えるだけでもそれなりに正解してしまうので、オリジナルの動画の方をアンダーサンプリングして、ラベル数を揃えます。

ファインチューニング

元々はTransformerをゼロから学習して専用のスコア計算器を作ろうというふうに、かなり野心的なことを考えてたんですけど、事前学習済みのモデルを使ったファインチューニングにしました。

Transformerをゼロから学習させるには膨大なデータが必要になります。言ってしまえば、日本語とはどういうものかを最初から学習することになってしまいます。

それは流石にやってられないということで、日本語の構造をなんとなく学習済みのモデルを使って、そこに上乗せで、動画の字幕データで学習するファインチューニングを行うことにしました。

スコアから切り抜きへ

スコアを計算して、その後、結局どこを取ってくるかっていうのも実は自由度のある問題です。

例えば、スコアの高いものから順に拾ってきたとすると、前後関係がめちゃくちゃの切り抜き動画が出来上がります。スコアはあくまでその時点のスコアですので、前後の繋がりは別で考える必要があるのです。

前回2年前のバージョンでは、スコアが一定以上なら切り抜きスタートで、スコアが一定以下になると切り抜き終了という形、閾値ベースで連続した部分を切り出していました。ところがこの方法だと、閾値の決め方が難しく、切り抜き動画が大量に生成されたり、全く生成されなかったりします。

その反省を活かして、今回は、1本の動画から生成する切り抜き動画の本数を事前に決めることにしました。5本作るなら、動画を5パートに等分割して、それぞれパートから最もスコアの高い箇所を代表点とします。

そして、それぞれの代表点の前後のスコアを見比べて、スコアの高い方を選び、前後に伸ばしていきます。これを繰り返して、望みの長さの切り抜き動画を決められた本数だけ得ることができます。

字幕生成の自動化

Whisperによって高精度の音声認識が使えるようになったので、切り抜き動画によくある文字起こしを自動的に生成することができるようになりました。ただし、文字起こしとスコア計算では使うモデルを切り替えるという工夫を入れました。

Whisperはモデルのサイズによって精度と、処理時間が変わってきます。高精度にしようと思ったら、大きなモデルを使って、時間をかけないといけません。

そこで、動画全体を見ないといけないスコア計算は、多少精度が低くても処理が速い小さなモデルを使い、切り抜き済みの動画に対しては、高精度の大きなモデルを使うようにしました。

まとめ

作成した切り抜きAIの特徴をざっくりと紹介しました。二年前のものと比べると、入力が音声の時系列→文単位に変更になり、学習に使う教師データもどこが切り抜かれたかを特定することなく、ソースが切り抜きかどうかのラベルだけを使うように簡略化しました。また、高精度な音声認識を活かして文字起こしの過程を自動化しました。

とはいえ、動画全体の音声認識、スコア計算には時間がかかるので、人間がライブを見て切り抜くより早いかと言われると微妙なところです。速さよりは自動化がメインになるかなという印象です。

Transformerの本はいくつか読みましたが、上はHugging Faceの開発者によって書かれた本です。Hugging Faceを使うと、とても簡単に公開されたAIを利用できてしまいます。いい時代になったものだと、思わずインターネット老人が出てしまいました。

コメント

タイトルとURLをコピーしました