今回はOpenAI の Whisper モデルを再実装した高速音声認識モデルである「Faster Whisper」を使用して、英語のYouTube動画を日本語で文字起こしする方法を紹介します。

Google colabを使用して簡単に実装することができますので、ぜひ最後までご覧ください。

Google Colaboの使い方はこちら

今回の目標

・Faster Whisperとは

・yt-dlpとは

・英語→日本語に翻訳

・英語のYouTube動画を日本語で文字起こし

Whisperとは

「Whisper」は2022年9月にOpenAIが発表した、音声認識モデルです。

インターネット上から収集された合計68万時間におよぶ音声データでトレーニングされており、認識した音声をもとに文字起こしをすることができます。

つまり、例えば「.mp3」などの音声ファイルから文字起こしをして、テキストに保存することができます。

また、これらはMITラインセンスとなっており、誰でも無料で簡単に使用することが可能です。

OpenAIの公式ブログ記事には「早口のセールストーク」「K-POPの曲」「フランス語」「独特なアクセントの会話」といった音声のサンプルが用意されており、「REVEAL TRANSCRIPT」をクリックするとWhisperで文字起こした結果を確認できます。

このモデルは多様な音声の大規模なデータセットでトレーニングされており、多言語の音声認識、音声翻訳、言語識別を実行できるマルチタスク モデルでもあります。

日本語にも対応しているため、日本語のまま使用することができます。

引用:https://github.com/openai/whisper

詳細はリンク先からご確認ください。

公開されているモデルにはいくつか種類があります。

多言語モデルは日本語にも対応しています。

モデルサイズパラメータ数英語専用
モデル
多言語モデル必要なVRAM相対速度
tiny39 Mtiny.entiny~1GB~32x
base74Mbase.enbase~1GB~16x
small244Msmall.ensmall~2GB~6x
medium769Mmedium.enmedium~5GB~2x
large1550 Mなしlarge~10GB1x

Faster Whisperとは

Faster-whisper は、OpenAI の Whisper モデルを再実装した高速推論エンジンで、CTranslate2 という Transformer モデルを活用しています。OpenAI の公式モデルを軽量化し、独自の最適化により最大4倍の高速化が実現されています。また、軽いと評判の Whisper.cpp よりも高速に動作し、GPU による高速化の恩恵を受けることができます。本家のwhisperと比較しても高速度で処理することが可能です。

ImplementationPrecisionBeam sizeTimeMax. GPU memoryMax. CPU memory
openai/whisperfp1654m30s11325MB9439MB
faster-whisperfp16554s4755MB3244MB
faster-whisperint8559s3091MB3117MB

開発元は OpenAI ではなく、あくまで OpenAI のモデルをベースに改良・再実装を行ったものである点に注意してください。Faster-whisperを使用するメリットは以下のようにまとめることができます。

  • 外部に音声データを送信したくない場合
  • 25MB 以上の音声データを送信したい場合
  • 無料で利用したい場合
  • 他の処理と組み合わせて使用したい場合(例えばYouTube動画をダウンロードしてから文字起こしするなど)

詳細はリンク先からご確認ください。

【音声認識2023】音声からテキストへ変換する「Faster Whisper」でYouTube動画の文字起こしを実装する

今回はOpenAI の Whisper モデルを再実装した高速音声認識モデルである「Faster Whisper」を実装する方法を紹介します。 基本的な操作から、YouTube動画の文字起こしまで…

yt-dlpとは

yt-dlpは、YouTubeをはじめとするオンライン動画サイトから動画や音声をダウンロードするための便利なツールです。かつては「youtube-dl」という同様のツールが人気を博していましたが、近年は開発が停滞し、ダウンロード速度の低下が問題となっていました。そこで登場したのが、youtube-dlの改良版とも言えるyt-dlpです。

yt-dlpの最大の特徴は、youtube-dlと比較してダウンロード速度が格段に速いことです。この速度向上により、ユーザーは手間なく迅速に動画や音声ファイルを入手することができます。また、動画だけでなく、音声ファイルのみを抽出することも可能であり、用途に合わせて選択できる柔軟性も提供しています。

公式の実装は以下のリンクからご覧ください。

【Python活用】「yt-dlp」を使ってYouTube動画や音楽をダウンロードする

このシリーズでは、Pythonの様々な活用の方法を紹介しています。 今回は、PythonでYouTube動画を簡単にダウンロードする方法を紹介します。 Google colabを使用して簡単に…

英語→日本語に翻訳

Huggingfaceにあるmodel='staka/fugumt-en-ja'というモデルを使用することで、簡単に英語から日本語に翻訳することができます。以下の例ではThis is a cat.という文章を日本語に翻訳します。

text = 'This is a cat.'

from transformers import pipeline
fugu_translator = pipeline('translation', model='staka/fugumt-en-ja')
fugu_translator(text)

実行結果:

[{'translation_text': 'これは猫です。'}]

英語を日本語に翻訳することができました。

詳細は以下の記事をご覧ください。

【Huggingface Transformers】日本語↔英語の翻訳を実装する

このシリーズでは自然言語処理の最先端技術である「Transformer」に焦点を当て、環境構築から学習方法までを紹介します。 今回の記事では、Huggingface Transformersを利…

英語のYouTube動画を日本語で文字起こし

以上の内容を踏まえ、早速文字起こしを実装してみましょう。

今回紹介するコードは以下のリンクからもご覧いただけます。

Open In Colab

準備

ここからは、Google colab環境で進めていきます。

はじめに、GPUを使用できるように設定をします。

「ランタイムのタイプを変更」→「ハードウェアアクセラレータ」をGPUに変更

必要なライブラリをインストールします。

!pip install faster-whisper transformers sentencepiece
!python -m pip install -U yt-dlp

以上で準備が完了しました。

実装

まずは音声データを用意します。

今回はこちらの動画をお借りして、文字起こしを行ってみましょう。

この音声データのYouTube動画(https://youtu.be/n_aUYrXre18)から音声のみを「audio.mp3」として保存します。

!yt-dlp -x --audio-format mp3 https://www.youtube.com/live/outcGtbnMuQ?feature=share -o audio.mp3

「large-v2」というモデルを使用して、上で保存した音声データから文字起こしを実装します。

# インポートとWhisperモデルの設定
from faster_whisper import WhisperModel

model_size = "large-v2"

# WhisperModelインスタンスの作成
model = WhisperModel(model_size, device="cuda", compute_type="float16")
# 音声ファイルをテキストに変換
segments, info = model.transcribe("audio.mp3", beam_size=5)

text = ''
# 各セグメントからテキストを抽出
for segment in segments:
    text +=segment.text + ('\n')

# 関数: 文末までの文章を結合
def join_sentences_until_period(text):
    sentences = text.strip().split('\n')
    result = []
    i = 0
    while i < len(sentences):
        current_result = []
        while i < len(sentences) and not sentences[i].strip().endswith('.'):
            current_result.append(sentences[i].strip())
            i += 1
        if i < len(sentences):
            current_result.append(sentences[i].strip())
            i += 1
        result.append(' '.join(current_result))
    return result

# 文末までの文章を結合
output = join_sentences_until_period(text)

# 翻訳モデルのインポートとインスタンス化
from transformers import pipeline
fugu_translator = pipeline('translation', model='staka/fugumt-en-ja')

# 各行について翻訳を実行し、結果を出力
for line in output:
    # print(line)
    print(fugu_translator(line)[0]['translation_text'])

実行すると、以下のような結果が出力されます。

GPT-4開発者デモのライブストリームです。
正直なところ、私はこの日がここにあると信じがたい。
OpenAIは、私たちが会社を始めて以来、この技術を構築してきました。
しかし、この2年間、私たちは本当にGPT-4の提供に注力してきました。

〜〜以下省略〜〜

英語の音声ファイルから日本語の文字起こしをすることができました。

まとめ

最後までご覧いただき、ありがとうございました。

今回はOpenAI の Whisper モデルを再実装した高速音声認識モデルである「Faster Whisper」を実装する方法を紹介しました。

YouTube動画の文字起こしによる字幕作成の自動化をはじめ、議事録の作成など業務においても、活用が期待できそうです。