🎤

WhisperとGoogle Colaboratoryで音声の文字起こしをやってみた

に公開
27
TAM

Discussion

TakatsuTakatsu

とても有益な投稿で助かりました!
すばらしい情報ありがとうございます!

さっそく使用してみて恐縮ですが、最後のファイルにした際のテキストを、
文字列ごとに改行することは可能なのでしょうか?
現状、全てつながっている状況です。

プログラミング無知なためご教授いただけると幸いです。

TakatsuTakatsu

ありがとうございます!

早速試してみたいと思います。

あみあみ

初めまして、非エンジニアですが、Whisperをどうしても使いたくて
Google Colaboratoryに挑戦中です。

最終段階までできて、txtをダウンロードしてみたら、
画像のようになりました。

▼ Transcription of test.MP3

スタッフの上に、スタッフの上に、スタッフの上に、……

音声ファイルは会議で1時間以上のものです。
どうすればいいのか教えていただけないでしょうか?

あみあみ

ありがとうございます。
読ませていただきます。

あみあみ

このページのサンプルをコピーさせていただいて、使用しております。

12 mel = whisper.log_mel_spectrogram(audio).to(model.device)
の下に、
result = model.transcribe(audio, verbose=True, temperature=0.8, language=lang)
を追加しました。

temperatureの数値を0.6~1.2ぐらいに変更してみましたが、
0.8が一番合っているような感じですが、やはり26秒ぐらいしか
文字起こしができませんでした。

しかも、日本語には見えますが、話している話題とはだいぶ違う感じでした。
句読点が入っているのがちょっとうれしいです。
やはりGoogle Colaboratoryでは、30秒ぐらいが限界ですか?

Kazuki YonemotoKazuki Yonemoto

文字起こしを以下のようにループ処理にしてみると、30秒以上の音声にも対応できるかもしれません。1時間の音声では試せていないですが、数分程度であれば書き出せました。

#@title 文字起こし
import whisper

fileName = "sample.m4a"#@param {type:"string"}
lang = "ja"#@param ["ja", "en"]
model_size = "medium"#@param ["tiny", "base", "small", "medium", "large"]
model = whisper.load_model(model_size)

# オーディオファイル読み込み
audio = whisper.load_audio(f"content/{fileName}")
outputTextsArr = []

while audio.size > 0:
  tirmedAudio = whisper.pad_or_trim(audio)
  startIdx = tirmedAudio.size
  audio = audio[startIdx:]

  mel = whisper.log_mel_spectrogram(tirmedAudio).to(model.device)

  options = whisper.DecodingOptions(language=lang, without_timestamps=True)
  result = whisper.decode(model, mel, options)
  outputTextsArr.append(result.text)

outputTexts = ' '.join(outputTextsArr)
print(outputTexts)

# テキストファイル書込み
with open(f'download/{fileName}.txt', 'w') as f:
  f.write(f'▼{fileName}の書き起こし\n')
  f.write(outputTexts)
あみあみ

ビックリしました~そんなことまで簡単にできてしまうのですね。
私は、ファイルを30秒ごとに分割して・・・
なんてカメの思考でおりました。ぜひ、試してみます。

ところで、こんな記事があります。この方は14分ほど
起こしをされているようですね。
https://yasutakeyohei.com/blog/moji-okosi-whisper-surprised/

ChatGPTの案が役に立つとは思いませんでした(^^;
冗談かと思いました。。。

Kazuki YonemotoKazuki Yonemoto

厳密にいうと30秒毎に処理が切れてしまうので、途切れたタイミングで残りが0になるまで処理を繰り返しているイメージです。

  1. 音声ファイルを読み込み、30秒区画で書き起こして outputTextsArr の配列へ追加
  2. 音声ファイルがまだ続いている場合は途切れた箇所から 1. の処理を再開
  3. 最後まで処理が終わったらoutputTextsArr に格納されたの要素を全て連結
あみあみ

ChatGPTに聞いてみたらこんなお答えでした💦 あまり役には立たないかな?

あみあみ

ありがとうございます(^^)v
最初の部分で、図のようになりましたが、
そのあとだいぶ長いこと、文章化されました。
「medium」になってたので、全部ではない気がしますが、
どこまでできたか、明日検証します。

また、largeも試してみますね。
1日でできるとは思いませんでした。
おかげ様で、少しわかってきました。
ありがとうございます(o*。_。)oペコッ

あみあみ

結果をお知らせします。
・全体のデータは1:46:26
 ①mp3アップロードに10分弱
 ②文字起こしにMediumで11分、largeで16分でした。
── 音質がいいとは言えない状況なので、結構、手直しは必要です。

・largeの原稿をざっと見ましたが、句読点少な目で段落は入れてもらえませんが、
 1:39:47の会議が終わるまで、文字起こしされていました。
・会議が終わったあとの、ザワザワも多少拾っていました。
「お疲れ様」や「お腹が空いた」など。
・会場が広く多少ガサガサしている部分もあり、音質は良いとは言えなかったのですが、少しマイクから遠い人の発言も精度はなかなか良かったです。(遠すぎる人はダメです)

※ 残る課題は、固有名詞や名前、地域、専門用語、使われている略語など、わかる範囲で登録できるといいなと思いました。あと、たまに飛んでいる部分があり、半角スペースが入っていた感じです。
── 最終課題は、話者の活舌と録音状態ですね~

今回は、録音状態あまり良くなかったので、飛ばされている箇所やマイクが遠く聞き取りミスも結構あったのですが、録音状態が良ければ、かなり使えると思います♪
本当に、ありがとうございました。
最先端をお試しできてメチャクチャうれしいです!
とりあえず、ご報告まで。

Kazuki YonemotoKazuki Yonemoto

おお!なんとか使えそうなところまで行けたようで良かったです🎉
バッジもありがとうございます!🙇🏻‍♂️

あみあみ

今まで、複数の文字起こしツール試してみましたけど、これが一番早くて素晴らしいです。
今後が楽しみです~ 本当にありがとうございました。今後ともどうぞよろしくお願いします。

あみあみ

こんにちは。段落をつけてみたくて、ChatGPTに相談して、ここまで作ったのですがうまくいきません。output.txtをダウンロードすることまでできましたが、何も変化がありません💦

【Windows 11+Google Colaboratoryです】

追伸 Wordにコピーしたら「\n」がそのまま転写されていたので、

f.write(paragraph + "\n") # 段落ごとに改行する
👇
f.write(paragraph + "^p") # 段落ごとに改行する

にしたら、段落ができたものもありますが、できないものも結構あります。
また、行頭のスペースがありませんが、"^p"のあとに" " を追加しただけでは、ダメかな?

お時間のあるときに、見ていただけますか? [共有リンク]
https://colab.research.google.com/drive/1By-6ZWYIesSxdbmZO07W9tbWLfFREKfN?usp=sharing

あみあみ

ありがとうございます。まだ見ていなかったので参考にさせていただきます。

みのりんみのりん

お世話になっております。非エンジニアなのですが、参考にさせていただき、文字起こしの仕組み構築にチャレンジしています。

以下のエラーになってしまうのですが、ご助言いただくことは可能でしょうか?
念のため、model_sizeをlargeとmediumの両方試したのですが、共にエラーになってしまいました。

音声ファイルは約15分の会議音声で153MBです。


PCのスペックは、以下になります。
・Intel(R) Core(TM) i7-10510U CPU @ 1.80GHz 2.30 GHz
・実装 RAM 16.0 GB (15.8 GB 使用可能)
・システムの種類 64 ビット オペレーティング システム、x64 ベース プロセッサ
・エディション Windows 10 Enterprise

みのりんみのりん

ありがとうございます!
一応、ご提示くださったリンク先からのコピペだったのですが、エラーになってしまうのですよね。”OutOfMemoryError”という文言があるので、PCのスペックは高い方だと思うのですが、足らないということなのでしょうかね(泣)

Kazuki YonemotoKazuki Yonemoto

Colaboratoryはクラウド環境で動作するため、利用されているPCのスペック自体が影響することはないかと思います。
一度以下を試してみてください。

  1. 「ランタイム>ランタイムを接続解除して削除」をクリック
  2. 再度一からライブラリのインストール等を実行
ナルヘッソスナルヘッソス

記事を参考に文字起こしされたファイルを生成することができました。有意義な情報ありがとうございます。

2点質問があります。

もし分かればで良いので、お手すきの際にでも良いので教えていただけますと幸いです。

(1)なぜ無料なのか?
ネットで検索した情報によりopen.ai のサイトで、有料登録を行い、apiキーを手に入れました。api経由で同様の処理を行った場合は従量課金されるようですが、このgoogle colabを用いた方法では、colabの環境上にインストールして処理を行うため無料ということなのでしょうか?apiへの課金が必要と思ってopen.aiのサイトにカード登録しましたが、この方法で文字起こしが無料で実行できるなら必要ないなと思っています。

(2)録音ファイルの扱い
google colab  上にアップロードした音声ファイル自体は、あくまでcolab環境のみにストレージされるのみで、open.ai側には渡っていないと思っておいてよいでしょうか?colabに環境構築して実行しているのであくまでcolabのみに留まっている認識です。(試そうとしている音声ファイルがopen.ai 側にも渡ってもし万が一、流出したら嫌だなと思い・・・)

Kazuki YonemotoKazuki Yonemoto

(1)なぜ無料なのか?
はい、こちら書いてもらってある通りです。モデルはMITライセンスでオープンソースで公開されているのと、本来はモデルがあったとしてもそれを動かした際、確実にコストはかかっているのですが、Googleさんが寛大にも無料である程度使えるようにしてくれているために実現できています。

このgoogle colabを用いた方法では、colabの環境上にインストールして処理を行うため無料ということなのでしょうか?

https://github.com/openai/whisper
https://colab.research.google.com/signup/pricing?utm_source=dialog&utm_medium=link&utm_campaign=settings_page&hl=ja

(2)録音ファイルの扱い
これもOpenAIのリソースは利用していないので、認識の通りです。

アップロードした音声ファイル自体は、あくまでcolab環境のみにストレージされるのみで、open.ai側には渡っていないと思っておいてよいでしょうか?

ナルヘッソスナルヘッソス

当方の返事が遅くなり申し訳ありません。回答いただいた内容で疑問点が解消できました。
ご丁寧に回答くださりありがとうございました。感謝いたします。