はじめてのPythonとkotoba-whisper-v2.1

この記事は約7分で読めます。

個人的に、ちょっと音声データを文字起こしする必要にかられた。人力でタイプするタイプだと1分で200円が相場らしい。安くても100円位する。
ちょっと話の流れが分かれば良い程度だったので、多少の誤字脱字は全く問題が無い感じだ。
無料サイトや体験版で試そうと思ったが、少々時間が長いので有料しか選べない。すると月額1000円以上のプランばかりである。
このサイトのレンタルサーバー代の月額121円でも大変なので、せめて500円位で何とかならない?と探していたらOpenAIの「Whisper」という文字起こし用の音声認識モデルの記事を見つけた。無料で使えるらしい。

目指しているものは、まさにこれである。とりあえず試してみてダメなら有料で契約することにした。

ブロガーA
ブロガーA

OpenAIの「Whisper」というもので文字起こしができるよ

ブロガーB
ブロガーB

Pythonでプログラムすれば簡単だよ

ブロガーC
ブロガーC

日本語には「kotoba-whisper」というのがあるので、使ってみるともっといいよ

ブロガーD
ブロガーD

最新の「kotoba-whisper-v2.0」はもっと素晴らしい!!!

Nouno
Nouno

えっ、なんかもう最新の「kotoba-whisper-v2.1」とやらが出ているじゃん。。。

いろいろなサイトを検索すること30分。とりあえず「kotoba-whisper-v2.1」が良さそうだというのは分かった。しかし何をどうすれば良いのか、新しすぎて何処にも記事が無かった。。。
多種多様なプログラム言語を経験しているので、新しいプログラミング言語にも全く抵抗は無い。Pythonも入れてしまえば何とかなるだろう。。。
と思ったが、何処のサイトも初心者お断りの説明ばかりだ。Windowsは邪道な感じでLinux使いなら易しく迎えてくれそうだが、Pythonもそれなりに理解していないと全く追いつかない。

たぶん必要なスキル
・英語のドキュメントでも怖くない
・コマンドラインでプログラムを実行しても怖くない
・言語は問わず何らかの簡単なプログラムは組める

Windows版でチャレンジ。まずブラウザからダウンロードするするソフトは以下の2つ
Python 3.10.11 Windows installer (64-bit)をダウンロード
FFmpeg ffmpeg-master-latest-win64-gpl.zipをダウンロード

どうやら「Whisper」を使うにはライブラリーの関係で、Pythonは3.10で無いとダメらしい。最初3.13を入れたらエラーだらけで原因が分からなかった。
あとインストールするときに「Add python.exe to PATH」のチェックも必要なことに注意が必要だ。チェックしないとPATHが通らないので、コマンド実行できない。
FFmpegはインストーラなんてものは無い。ZIPを適当なフォルダに展開して、FFmpeg\binに自力でPATHの設定をする必要がある。この時点でインストールを断念する人がいてもおかしくない。

再起動を求められることは無いが、インストールが終わったら再起動をした方が良い。
pip ~
というコマンドが全く動かなかった。
py -m pip ~
と変換して実行すれば動くのだが、再起動しないとPATHが適切に反映されないようだ。結構はまった。

ここまでインストールが終わったら、初めてのプログラムである。おまじないの「Hello World」だ。ついでに計算も。

うーん簡単。これで立派なPython使いの仲間入りである。第一関門は突破だ。
コマンドプロンプトを管理者権限で立ち上げて、以下を次々に実行していく
この時点で意味は分からなくても大丈夫である。ちなみにGPUは使用せずCPU版だ。

pip install --upgrade pip
pip install torch torchvision torchaudio
pip install --upgrade transformers accelerate torchaudio
pip install stable-ts==2.16.0
pip install punctuators==0.0.5

実行プログラムは「kotoba-whisper-v2.1」のサンプルをそのままコピーして使う。

import torch
from transformers import pipeline
from datasets import load_dataset

# config
model_id = "kotoba-tech/kotoba-whisper-v2.1"
torch_dtype = torch.float16 if torch.cuda.is_available() else torch.float32
device = "cuda:0" if torch.cuda.is_available() else "cpu"
model_kwargs = {"attn_implementation": "sdpa"} if torch.cuda.is_available() else {}
generate_kwargs = {"language": "ja", "task": "transcribe"}

# load model
pipe = pipeline(
    model=model_id,
    torch_dtype=torch_dtype,
    device=device,
    model_kwargs=model_kwargs,
    batch_size=16,
    trust_remote_code=True,
    punctuator=True
)

# load sample audio
dataset = load_dataset("japanese-asr/ja_asr.reazonspeech_test", split="test")
sample = dataset[0]["audio"]

# run inference
result = pipe("voice.wav", chunk_length_s=15, return_timestamps=True, generate_kwargs=generate_kwargs)
print(result)

このプログラムはなんとなく意味が分かれば大丈夫である。
サンプルに書いてある通り「voice.wav」の部分を適当なファイル名に変えれば良い。ファイルのは面倒ならソースファイルのある場所に置けば良いらしい。

このソースをkotoba.pyとかで保存して、[File]-[Open]で開いて[Run]-[Run Module]で実行するだけだ。
最初の実行はライブラリーをダウンロードするらしく少々時間がかかった。

試しにネットで適当に入手した10秒くらいの音声ファイルを文字起こししてみると、ものの十数秒で文字起こしができてしまった。成功である。
早速本題の音声データを変換してみる。
珍しくCPUファンが唸りを上げた。タスクマネージャーを見るとCPU利用率は常に60%を超え、AMD Ryzen 7 PRO 4750Gは16スレッドフル稼働だ。このPCで初めての重労働なお仕事である。普段は数パーセントもいかない感じだ。メモリーも常に2.0GB前後使っているようだった。
40分くらいすると突然ファンが大人しくなり文字起こしは終わった。
実験してみた限りでは60分の音声データを40分で文字起こしできた感じだ。
他人が見ると謎の日本語がたくさんあるが、その場にいた人物なら十分補完できるレベルのデータだった。

今回に関してはこれで必要十分だ。しかも無料で、かなり面白いおもちゃを見つけてしまった。
しばらくは色々楽しめそうである。全く何も知らない状況から老兵でも2時間くらいで環境を整え文字起こしをすることができた。先人の皆様達に感謝である。
文字起こししながらPythonの文法を勉強しているが、半日くらいでそこそこ組めるようになるね。静的型付けで無いので、個人的には少々苦手な感じかな?
膨大なライブラリーは使いこなすのは、かなり時間がかかりそうだ。

GPUを使うと、どのくらいの速度で文字起こしができるのか気になって仕方が無い。
4750Gの内蔵GPUは使えるのだろうか?
いっそのことボーナスでNVIDIAのGPUを買ってみるべきか、ちょっと悩んでいる。。。

コメント