今回はOpenAI の Whisper モデルを最新版である「Whisper large-v3」を使用して、YouTube動画を文字起こしする方法を紹介します。
Google colabを使用して簡単に実装することができますので、ぜひ最後までご覧ください。
Google Colaboの使い方はこちら
今回の目標
・Whisper large-v3とは
・yt-dlpとは
・YouTube動画を文字起こし
・精度検証
Whisperの概要
Whisperとは
「Whisper」は2022年9月にOpenAIが発表した、音声認識モデルです。
インターネット上から収集された合計68万時間におよぶ音声データでトレーニングされており、認識した音声をもとに文字起こしをすることができます。
例えば「.mp3」などの音声ファイルから文字起こしをして、テキストに保存することができます。
これらはMITラインセンスとなっており、誰でも無料で簡単に使用することが可能です。
OpenAIの公式ブログ記事には「早口のセールストーク」「K-POPの曲」「フランス語」「独特なアクセントの会話」といった音声のサンプルが用意されており、「REVEAL TRANSCRIPT」をクリックするとWhisperで文字起こした結果を確認できます。
このモデルは多様な音声の大規模なデータセットでトレーニングされており、多言語の音声認識、音声翻訳、言語識別を実行できるマルチタスク モデルでもあります。
日本語にも対応しているため、日本語のまま使用することができます。
詳細はリンク先からご確認ください。
Github:https://github.com/openai/whisper
論文: https://cdn.openai.com/papers/whisper.pdf
公式サイト:https://openai.com/blog/whisper
公開されているモデルにはいくつか種類があります。
多言語モデルは日本語にも対応しています。
モデルサイズ | パラメータ数 | 英語専用 モデル | 多言語モデル | 必要なVRAM | 相対速度 |
---|---|---|---|---|---|
tiny | 39 M | tiny.en | tiny | ~1GB | ~32x |
base | 74M | base.en | base | ~1GB | ~16x |
small | 244M | small.en | small | ~2GB | ~6x |
medium | 769M | medium.en | medium | ~5GB | ~2x |
large | 1550 M | なし | large | ~10GB | 1x |
Whisper large-v3とは
Whisper large-v3は、OpenAIによって開発された音声認識モデルの新しいバージョンです。これは以前のlargeモデルと同じアーキテクチャを持っていますが、入力に128のメル周波数ビンを使用する点や、広東語用の新しい言語トークンを追加した点が異なります。このモデルは、弱くラベル付けされた100万時間のオーディオと、large-v2を使って収集した400万時間の擬似ラベル付きオーディオでトレーニングされました。トレーニングは、この混合データセット上で2.0エポック行われています。large-v3は、多様な言語に対して改善された性能を示しており、特にCommon Voice 15とFleursにおいて、60%以下のエラーレートを達成した言語では、large-v2に比べて10%から20%のエラー削減を示しています。
詳細はリンク先からご確認ください。
yt-dlpとは
yt-dlpは、YouTubeやVimeo、Dailymotionなど多くのウェブサイトから動画をダウンロードするためのオープンソースのツールで、幅広いフォーマット、品質、解像度に対応しています。yt-dlpはyoutube-dlのフォークであり、youtube-dlcのプロジェクトから派生したもので、現在はyoutube-dlよりも活発に開発が進められており、より多くの機能を提供しています。両ツールは非常に似ており、多くの同じコードを共有していますが、どちらが優れているかは、機能のセットと更新の頻度によって決まります。
公式の実装は以下のリンクからご覧ください。
実装例は以下の記事でも紹介しています。
実装
以上の内容を踏まえ、早速文字起こしを実装してみましょう。
今回紹介するコードは以下のリンクからもご覧いただけます。
準備
ここからは、Google colab環境で進めていきます。
はじめに、GPUを使用できるように設定をします。
「ランタイムのタイプを変更」→「ハードウェアアクセラレータ」をGPUに変更
必要なライブラリをインストールします。
!pip install -U openai-whisper
!python -m pip install -U yt-dlp
以上で準備が完了しました。
YouTube動画から音声ファイルを出力
まずは音声データを用意します。
今回の例ではYouTube動画をダウンロードして、音声ファイルに変換します。
まずは以下の動画を音声ファイルに変換します。
この音声データのYouTube動画から音声のみを「audio.mp3」として保存します。
!yt-dlp -x --audio-format mp3 https://youtu.be/5wEtefq9VzM -o "audio.mp3"
以下のように書くこともできます。(処理内容は↑と同じです)
import yt_dlp
def download_video_as_mp3(url):
ydl_opts = {
'format': 'bestaudio/best',
'postprocessors': [{
'key': 'FFmpegExtractAudio',
'preferredcodec': 'mp3',
'preferredquality': '192',
}],
'outtmpl': 'audio',
}
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
ydl.download([url])
# 例:特定のYouTube動画のURLを指定してダウンロード
download_video_as_mp3('https://youtu.be/5wEtefq9VzM')
YouTube動画から音声ファイルを出力
「large-v3」モデルを使用して、上で保存した音声データから文字起こしを実装します。
import whisper
model = whisper.load_model("large-v3")
result = model.transcribe("audio.mp3")
print(result["text"])
実行すると、以下のような結果が出力されます。
画像処理の機械学習の分野の一つである超解像について、初心者向けに紹介します。
今回は2021年に発表された、リアルESRGAMの公式チュートリアルに沿って実装する方法を紹介したいと思います。
実際に解像度の低い画像を高解像度化しています。
超解像、スーパーリソリューションとは、動画の解像度を二次的に上げる技術のことで、解像度が低い画像の高周波性度を予測、複現して解像度を高めています。
見てもらうとわかると思うんですけど、これが元の画像で、こっちが高解像度化された画像です。
比べてみると、左が元の画像で、右が高解像化された画像です。
よく見ると、画質が良くなっていることがわかると思います。
これが超解像、スーパーリソリューションの技術です。
今回紹介しているリアルESRGAMは、2018年に発表されたりするGAMの進化版で、2021年7月に発表されています。
普通の画像だけでなく、こんな風に、アイメイの画像や動画にも対応したモデルが用意されているのが特徴です。
あと4Kの画像を16Kの画像として出力することもできたりします。
実装方法も紹介しようと思ったんですけど、ニールがなくなってきたので、ここまでにしようと思います。
詳細はリンク先を見てみるといいと思います。
お疲れ様でした。
YouTube動画から最新のモデルを利用して文字起こしをすることができました。
精度検証
Whisper large-v2との比較
同じ音声ファイルをWhisper large-v2でも文字起こしをしてみました。
画像処理の機械学習のVM一つである超解像について初心者向けに紹介します。
今回は2021年に発表されたリアルESRGAMの公式チュートリアルに沿って実装する方法を紹介したいと思います。
実際に解像度の低い画像を高解像度化してみます。
超解像、スーパーリソリューションとは、画像や動画の解像度を微次的に上げる技術のことで、解像度が低い画像の高周波性分を予測、複元して解像度を高めています。
見てもらうとわかると思うんですけど、これが元の画像で、こっちが高解像度化された画像です。
比べてみると、左が元の画像で、右が高解像化された画像です。
よく見ると画質が良くなっていることがわかると思います。
これが超解像、スーパーリソリューションの技術です。
今回紹介しているリアルESRが2018年に発表されたSURGAMの進化版で、2021年7月に発表されています。
普通の画像だけでなく、こんな風にアニメの画像や動画にも対応したモデルが用意されているのが特徴です。
あと、4Kの画像、16Kの画像として出力することもできたりします。
実装方法も紹介しようと思ったんですけど、ニールが無くなってきたので、ここまでにしようと思います。
詳細はリンク先を見てみるといいと思います。
お疲れ様でした。
精度の比較
これらの文字起こしを精度の比較をChatGPT(GPT-4)さんにお願いしました。
文章A:Whisper large-v3、文章B:Whisper large-v2
文章AとBを比較すると、文章Aの方が全体的に自然に感じます。文章Bにはいくつかの誤字があります。
例えば、「VM」は「分野」の誤字であり、「微次的に」は「二次的に」の誤字である可能性が高いです。
「ニール」も意味が不明確ですが、これは「時間」または「エネルギー」という意味かもしれません。
また、「アイメイ」は「アニメ」の誤字のようです。
一方で、文章Aでは「リアルESRGAM」が「リアルESRが」と誤記されており、「りするGAM」は「ESRGAN」の誤記である可能性があります。
しかし、文章Aでは超解像技術についての説明が一貫しており、具体的な技術名も一貫しています。
文章Bには同様の情報が含まれていますが、細かな誤字が自然さを損なっています。
文章Aの方が説明がわかりやすく、技術用語の使い方も適切であるため、文章Aの方が自然であると言えます。
Whisper large-v3の方が精度よく文字起こしができているようです。
まとめ
最後までご覧いただき、ありがとうございました。