見出し画像

ブラウザだけ・無料で!音声認識モデルWhisperでPodcast『ドングリFM』の全エピソードを文字起こしする|Google Colab

要点

  • 話題のAI文字起こし“Whisper”が、Google Colabなら無料で使えます。

  • Google Colabはお手軽Python実行環境。

読むと嬉しい人

音声文字起こしに関心があり実際に試してみたいが、AIとか難しいことはわからないし、すごいGPUを積んだPCは持っていない。Pythonやコマンドなどは多少の雰囲気ならわかる。

他にも会議の文字起こしなどは一般向けにアプリもいろいろ出ていて、調べたところ LINE の CLOVA Note が評判良さそうでした。今回の私の用途には合わなかったので試していません。
https://clovanote.line.me/

背景

以前の記事でPodcast『ドングリFM』の文字起こし検索サイトをご紹介したのですが、対応エピソードが一部となっていました。その後コツコツと追加していたのですが、そうして過ごしているとき突如現れた Open AI Whisper という朗報を早速試してみた、という流れです。

ドングリFMはエピソードが2022年10月現在で900話を超えており、過去分をまとめて処理したい状況でした。前回の記事で採用していた Automemo はスマホアプリ必須で事前収録音声ファイルの一括処理ができないという課題がありました。また、期間限定無料キャンペーンということもあって暫定的な利用のつもりでしたが、早速代替手段が見つかってよかったです。

Google Colab

Colaboratory へようこそ
実際に使用していたColabの様子

処理速度

期待していたよりも時間がかかる印象です:

  • 700分の音声を3時間強で処理

  • つまり 10 分の音声を 3 分弱で処理

  • ColabのGPUを使用、利用モデルはデフォルト (small)

GPUを使わずに動かすこともできますが、現実的ではありません。手元にある M2 MacBook Air でも試してみましたが、GPUの利用にはまだ対応していない模様。CPUで試したところ 10 分の音声に 35 分かかりました。

精度

デフォルト設定である small モデルでの話です。文脈やそれに関連した固有名詞を学習しているわけではないように思いますので、人名、会社名、商品名、略語まではさすがに忠実に起こせていない印象です。でも何を話しているのか十分にわかるレベル。アナウンサーのような人が幅広い聞き手に向けて標準的な言葉遣いではっきり話すのとは訳が違うので厳しいのですが、なかなかよくここまで再現するな〜といった感想です。実際にどんなものかはこちらからご確認くださいませ。

出力ファイル

whisper コマンドを実行すると、3 種類のファイルが出力されます。

  • vtt ・・・ WEBVTT形式

  • srt ・・・ 字幕ファイル形式。

  • txt ・・・ 文字起こしテキストのみ。上記形式のメタ情報を取り除いたもの。

色々な文字起こしを試していると、その出力形式も様々なものに遭遇します。改行が一切ないものもありました。Whisper は字幕表現を前提としており、字幕として表示する分量くらいでテキストが区切られます。文字起こしをするからにはその先に利用目的があるはずで、例えばキーワード検索してすぐに該当箇所の再生位置がわかることが期待されます。 Automemo はただのテキストだったためトークサーチの機能も表示するのみとなっていますが、WEBVTTを使えばすぐに該当箇所を再生するような仕掛けも作れそうですね。

WEBVTTサンプル

GPU利用設定

GPU利用制限

3時間強にかけて利用していると接続が切れる。解除は体感で約18時間後。

無料で利用できる範囲で使っていたので、毎日コツコツと3週間くらいかけて手動でバッチ対応してきました。

Google Drive 連携

前述の通りGPU利用制限もあり、また、実行環境は永続化されません。つまり作業内容は外部に保管しないと消えてしまうということです。これを回避するには Google Drive をマウントして利用します。各コードブロックに %cd を書いているのは、接続解除後にどのセクションから実行しても動くようにするための工夫となっています。

実際に Colab で使ったコードサンプル

!pip install git+https://github.com/openai/whisper.git
!sudo apt update
!sudo apt install ffmpeg
# 作業用フォルダの作成
from google.colab import drive 
drive.mount('/content/drive')
!mkdir -p '/content/drive/MyDrive/colab/'
%cd '/content/drive/MyDrive/colab/'
!whisper ep845.mp3 --language Japanese
!whisper ep846.mp3 --language Japanese
!whisper ep847.mp3 --language Japanese
!whisper ep848.mp3 --language Japanese
!whisper ep849.mp3 --language Japanese
%cd '/content/drive/MyDrive/colab/'

import os
import glob
import shutil

# vttファイルをvttフォルダに移動
os.makedirs('vtt', exist_ok=True)
for file in glob.glob('*.vtt'):
  shutil.move(file, 'vtt/' + file)
%cd '/content/drive/MyDrive/colab/'

# vttフォルダをzipダウンロード
from google.colab import files
!zip -r vtt.zip vtt
files.download('vtt.zip')
%cd '/content/drive/MyDrive/colab/'

import os
import glob
import shutil

# vttフォルダを除去
shutil.rmtree('vtt', ignore_errors=True)

# colab配下すべてを除去
for file in glob.glob('/content/drive/MyDrive/colab/**/*', recursive=True):
  if os.path.isfile(file):
    os.remove(file)

おわりに

アイキャッチ画像は Stable Diffusion のオンラインデモで生成したものを Figma でさくっと加工したものです。すごい。


この記事が気に入ったらサポートをしてみませんか?