OpenAIが開発している「Whisper」は、あらゆる言語で人間の会話音声を文字起こしできる高性能なSpeech-to-textモデルだ。
Whisperはオープンソース化されており、モデルをダウンロードすれば、無料で、誰でも利用できる。
しかし、実用上の大きな問題がある。
それは、文字起こしには相当なGPUパワーを要し、一般的なPCでは時間がかかりすぎるという点だ。
そこで当ブログでは、Google Colaboratoryの無料のGPUインスタンスで、Whisperを利用するノートブックを公開している。しかし、Google Colabの無料プランで使えるGPUでは超高速とはいかず、数十分の音声を日常的に文字起こしするような場合、やはり実行速度がストレスになる。
そんなスピード重視だが精度を落としたくない、という人におすすめなのが、OpenAIが提供するAPIを経由して、Whisperを利用することだ。
本記事では、API経由でWhisperを利用して、超高速で文字起こしを行うためのGoogle Colabノートブックと、その使い方を紹介する。
APIにはファイルサイズに25MBという上限があるが、自動的にオーディオを分割して送信する機能を実装しているので、とても便利だ。
10分9円の格安で、超高精度の文字起こしができるWhisper API
Whisper APIをざっくり説明すると、OpenAIのサーバーに音声ファイルを送ると、OpenAIの超高スペックPCで文字起こしした上で、テキストだけ返送してくれる仕組みだ。
自分のPCのスペックが低くても、インターネットさえ繋がれば、いつでもどこでも高速にWhisperを利用できるのだ。
10分あたり6セント(約9円)と価格も割安なので、かなり実用的だ。
スピードについては、ざっくり、元々の音声ファイルの長さの10分の1ほどで書き起こせると考えておくと良い。
つまり、40分の音声であれば4分、1分の音声であれば6秒というスピードだ。
これだけ高速であれば、短い音声であればリアルタイムの音声書き起こしとしても使いうる。
実際、当ブログでも、Mac/iPad/iPhoneの音声入力機能を、Whisper APIを使って超高精度に改造してしまう方法を紹介した。
しかし、APIのデメリットは、若干のプログラミングの知識がないと、実装の仕方が分からないということだ。
この記事では、予め全てのプログラムを用意して、ユーザーは知識ゼロでもクリックすれば利用できる便利なノートブックを作ったので、ぜひ利用して欲しい。
まずはOpenAIのAPIキーをGoogle Colabに登録
OpenAIのAPIキーは、誰でも作れて、利用料に応じてクレジットカードに請求が来る仕組みになっている。
先述の通り、10分の音声を書き起こしても数円で済むので、日常的に文字起こしをしている人であれば、登録しておいて損はない。
以下の記事で、APIキーの入手法を詳しく解説しているので参照してほしい。
APIキーを入手したら、Google Colab上でそのキーを呼び出せるように、Google Colabに登録しておく。
Googleアカウントにログインした状態で、Google Colabの公式ガイドのノートブックを開いて、左側にあるメニューから「シークレット」を選択する。
ここに、openai_api
という名前をつけて、自分のAPIキーを保存しておこう。
Google ColabでWhisper APIを実装したノートブック
以下が、Whisper APIをGoogle Colab上で非常に簡単に使えるように実装した当ブログオリジナルのミニウェブアプリだ。
使い方は、ノートブックを読んでもらえれば分かるようになっているが、コードのかたまり(「コードセル」と呼ばれる)を、上から順に実行していくだけだ。
書き起こしたい音声ファイルは、予めGoogleドライブにアップロードしておく必要がある。
デフォルトでは、Googleドライブのマイドライブを開いてすぐのところに、「your_file.mp3
」という音声ファイルが保存されていると仮定している。
音声ファイルをどのフォルダに保存しているか、また、ファイル名を何にしているかによって、ノートブックのセクション3を書き換える必要がある。
以下の画像の赤枠の部分を、実際のファイル名・フォルダパスに合わせて書き換える。
以上の設定を終えて、他のセルも全て実行していくと、セクション5「Whisper APIのインターフェース」の部分で、以下のようにテキストボックスと言語選択の画面が表示される。
ここでは、Whisper APIにファイルを送信する前に、以下の2つのオプションを含めることができる。
必要な内容を入力した後、「Submit」ボタンを押すと、Whisper APIによる音声認識が開始される。
- プロンプト:音声ファイルの内容や、登場する固有名詞を説明すると、書き起こしの精度が上がる
- 言語設定:音声ファイルの言語を予め指定すると、書き起こしの精度が上がる
例えば、企業やサービス名などの固有名詞が登場する音声や、専門用語が何度も登場する音声、人の名前が頻繁に登場するMTGの音声を書き起こす場合などは、それらをプロンプトで指定しておくと、固有名詞であっても正確に書き起こしてくれる。
プロンプトの例:「これは、AWS re:Invent 2023に関するPodcastです。」「これは、佐藤さん、山田さん、田中さん3人による、来週行われるイベントに関する会話の録音です。」
言語設定も、基本的には予め言語を指定した方が正確に書き起こされる可能性が高まるのでオススメだ。
不明瞭な音声などだと、日本語の音声なのに、英語のテキストが返ってきてしまう場合があるので、明示しておいた方が良い。
言語の指定は、ISO-639-1形式で行うが、日本語はja
と指定する。
無事に音声認識が終わると、書き起こされたテキストが自動的に表示される。
これが表示されたら、最後にセクション6のコードセルを実行して、結果をGoogleドライブにテキスト形式で保存する。
デフォルトでは、Googleドライブのマイドライブ直下に、「whisper」というフォルダを作成して、その中に「日付-時刻_transcript.txt」というファイルを保存するようになっている。
25MB制限と、長い音声を自動で分割する機能
Whisper APIは音声ファイルのサイズに上限があり、25MB以上のファイルは受け付けてくれないようになっている。
したがって、30分や1時間を超える動画の音声や、ミーティングを録音した音声は、25MB以上の場合が多いので、そのままAPIに送信することはできない。
APIに送信する前に音声ファイルを分割する必要があるが、いちいちこの作業を行うのは面倒だ。
そこで、この記事で紹介したノートブックには、ユーザーが指定した音声ファイルの長さを自動的にチェックして、25MBを超えてしまっている場合には、音声を10分ごとに細かく分割する機能が付いている。
分割された音声ファイルは一時的にGoogle Drive内に保存されるが、書き起こしが終わった後そのフォルダを自動で削除するようになっている。
該当するコードは以下の部分だが、要するに、25MB以上のファイルを指定すると、Googleドライブのマイドライブ直下に、「現在時刻_temp
」というフォルダを作成し、そこに分割した音声ファイルを全て保管する。
そして、全ての処理が終わったら、「現在時刻_temp
」というフォルダを削除する。
ユーザ側では、音声ファイルが長かったとしても何も行う必要はないが、Googleドライブに一時的に変な名前のフォルダができると言うことを覚えておいて欲しい。
# ファイルサイズが25MBを超える場合の処理
file_size = os.path.getsize(audio_file_path)
max_size = 25 * 1024 * 1024 # 25MB in bytes
if file_size <= max_size:
# ファイルが25MB以下の場合、通常の処理
transcript = process_audio_file(audio_file_path, prompt_input.value, language_input.value)
else:
# タイムスタンプ付きの一時ディレクトリを作成
timestamp = datetime.datetime.now().strftime("%Y%m%d%H%M%S")
temp_dir = f'/content/drive/My Drive/{timestamp}_temp'
os.makedirs(temp_dir, exist_ok=True)
# 分割の実行
split_files = split_audio_file(audio_file_path, 10 * 60, temp_dir) # 10分刻みに分割
transcripts = [process_audio_file(file, prompt_input.value, language_input.value) for file in split_files]
transcript = ''.join(transcripts) # 結果を統合
# 一時ディレクトリの削除
delete_temp_dir(temp_dir)
Whisper APIを利用するメリット
精度も高く、スピードも速いWhisper APIを利用することで、様々なメリットが得られる。
たとえ、60分ほどの長い録音ファイルであったとしても、数分で書き起こしが完了してしまう。書き起こしの精度も非常に高いので、ほとんど誤字脱字なく、ほぼ完璧な文章が得られる。
例えば、会社で行われる全ての打ち合わせを録音しておいて、Whisper APIで文字起こしをして、テキストファイルとして保存していくだけで、過去のすべてのミーティングを全文検索できるようになる。
また、大学の講義であっても、90分の講義をすべて録音しておいて、Whisper APIで書き起こせば、ノートを取っていなくても、完璧な講義ノートを作成することができる。
昔であれば、人間が頑張って手打ちなければならなかったことが、AIによって自動化されてしまうのは感動的だ。
実際に仕事のMTGで使ってみた!ChatGPTと連携で最強
さらに言えば、Whisper APIによって書き起こされたテキストを、ChatGPTなどの言語モデルに読み込ませることで、さらに便利に使うこともできる。
例えば、会社のミーティングを録音したテキストを丸ごとChatGPTに渡して、これに基づいて記事録を作れ、という指示をすると、その日のミーティングの内容をしっかり踏まえた記事録が生成される。
ミーティングをしている最中に、新人が頑張ってタイピングをして、議事録を作成するようなスタイルとは、これでおさらばできるかもしれない。
筆者が、実際に仕事上でのMTGにおいて、Nottaなどのミーティングの録音・書き起こしサービスと、Whisperモデルを使った書き起こしのクオリティを比べてみたところ、少なくとも日本語でのミーティングにおいては、筆者が試した限りWhisperの方が圧倒的に精度が高かった。
実際のMTGの音声をWhisperで書き起こしたものを、ChatGPT Plusで利用できるGPT-4に読み込ませ、議事録を作らせてみたところ、全文をほぼ完璧に書き起こせているおかげで、それを要約した議事録のクオリティも文句のないものだった。
既存のサービスとの違いは、ユーザーインターフェースの使いやすさくらいだ。
Whisper APIは、アプリやプログラムに組み込まれて使うことが想定されているため、そもそも素人が使うには不便なものだ。
その点、この記事で紹介したノートブックを使えば、プログラミングの知識ゼロであっても、かなり直感的にWhisper APIを利用できるので、ぜひ活用してほしい。