🎤

最新の音声認識モデル『Whisper』を使ってみたよ

2022/12/12に公開

昨日は、あひるさん知らない技術まみれのチームに移動した時に実践したことでした。
畑の違う技術や分野に挑戦するときはすごい体力がいりますが、そこに果敢に挑戦して成果を出し続けている姿に日々刺激をもらっています..!

改まして、こんにちは! @koonagiです。
普段はインフラエンジニア兼データエンジニアとしてTerraformを書いたり、CI/CD作ったり、ETL処理書いたりしています。
普段とは違うことをしてみようと音声認識モデル『Whisper』をつかってみたので、そのことについて書いてみようと思います。

Whisperとは

Whisperってなんなのよというところからですが、最近流行っているChatGPTやGPT-3を開発しているOpenAIが開発している音声認識モデルです。

https://openai.com/blog/whisper/

モデルで利用しているトレーニングデータはウェブで収集したデータでなんと68万時間分のデータとなっております!
OSSの音声識別のモデルを使うと日本語の認識精度が低かったりするのですが、Whisperは日本語の精度がかなり高いです。
単語誤り率(WER) [1]を公開しているのですが、日本語は6.4%となっています。 つまり、93.6%の単語を正確に認識できているので実用レベルの精度が出ています...!

Whisperって何に使えるの

大きく3つのことができます。文字起こしだけじゃなく、翻訳や言語判別を行うことができます。
翻訳もできるのは使い方の幅が広がりますね。

  1. 文字起こし
    • 音声データから、文字を書き起こす
  2. 翻訳
    • 音声データから、翻訳して文字起こし
      • インプット : 多言語
      • アウトプット: 英語のみ
  3. 言語判定
    • 音声データから、言語の特定
      • インプットの言語を指定しない場合は言語判定から処理がはじまります

Whisper触ってみた

それでは文字起こしと翻訳をやってみよー。

① 用意した音声データ🎤

以下の文字を読み上げた録音データを使いました。

こんにちは。スターフェスティバルの山﨑です。
スターフェスティバルは、日本最大級のフードデリバリー総合モールを運営しています。
そのノウハウ・顧客基盤をもとに、「ソリューション」と「販路」の両軸から、
飲食店の中食・ECビジネス参入を支援します。

② Whisperの準備

Whisperのインストール

インストールはpipなので超簡単です。

pip install git+https://github.com/openai/whisper.git
モデルのロード

複数のモデルサイズがありますが、精度を良くするならlargeがよさそうです。

import whisper
model = whisper.load_model("large")

③ 文字起こし

それでは文字起こしからやってみましょうー。

コード

2行で言語判定から文字起こしまでできちゃいます。Whisperお手軽すぎる。

result = whisper_model.transcribe(audiofile)
print(result["text"])
出力結果
こんにちは スターフェスティバルの山崎ですスターフェスティバルは日本最大級の
フードデリバリー総合モールを運営しています
そのノウハウ 顧客基盤をもとにソリューションと 販路の両軸から飲食店の仲職 ECビジネス参入を支援します

精度チェック!

短い音声ではありますが、44/46が正しい単語でした。
誤りの2単語を含む文章は以下ですが、名前は無理ですねw なので実質誤りは1単語の98%近い精度で文字起こししてくれました!!Whisperすごい

スターフェスティバルの山崎です
スターフェスティバルの山﨑です
中食ECビジネス参入を支援します
仲職ECビジネス参入を支援します

[TIPS] 処理経過の出力

verbose=True をオプションとして指定することで処理経過を出力することができます。

コード
result = whisper_model.transcribe(audiofile, verbose=True)
print(result["text"])
出力結果

出力結果に言語の検出結果が表示されてますね。
ログにも書かれていますが、 language="ja" のように予めインプットの言語を指定することができます。lunguageオプションを使うと言語判定の処理をスキップできるのでちょっとだけ早い。

Detecting language using up to the first 30 seconds. Use `--language` to specify the language
Detected language: Japanese
[00:00.000 --> 00:03.800] こんにちは スターフェスティバルの山崎です
[00:03.800 --> 00:09.000] スターフェスティバルは日本最大級の フードデリバリー総合モールを運営しています
[00:09.000 --> 00:14.400] そのノウハウ 顧客基盤をもとにソリューションと 販路の両軸から
[00:14.400 --> 00:30.400] 飲食店の仲職 ECビジネス参入を支援します
こんにちは スターフェスティバルの山崎ですスターフェスティバルは日本最大級の フードデリバリー総合モールを運営していますそのノウハウ 顧客基盤をもとにソリューションと 販路の両軸から飲食店の仲職 ECビジネス参入を支援します

④ 翻訳

次に先程文字起こしした録音データと同じデータを使って翻訳をやってみましょうー。

コード

翻訳の場合は、 task='translate' を指定してあげるだけです..!

result = whisper_model.transcribe(audiofile,language="ja", task="translate")
print(result["text"])
出力結果
Hello, I am Yamazaki from Star Festival. 
Star Festival operates Japan's largest food delivery overall mall. 
Based on its know-how and customer base,
Star Festival supports hard-eating snacks and restaurant and ECO business.

精度チェック!

英語激苦手なのでDeepLさんに翻訳してもらいましょう。

こんにちは、スターフェスティバルの山崎です。
スターフェスティバルは、日本最大級のフードデリバリー総合モールを運営しています。
そのノウハウと顧客基盤をもとに、食べにくいお菓子や飲食店、ECO事業をサポートしているのが、
スターフェスティバルです。

食べにくいお菓子 ...?
中食の部分が日本語に文字起こししたときにもずれていたのでその影響かも。

Google翻訳で文字起こしした文章を翻訳した結果は以下の通りです。
翻訳はGoogle API使ったほうが精度高いかなー。それでも一行で文字起こしから翻訳までできるのは超すごい。

Hello, this is Yamazaki from Star Festival.
Star Festival operates Japan's largest food delivery mall.
Based on our know-how and customer base,
we support restaurants in entering the EC business from both solutions and sales channels.

最後に

Whisperを使ってみましたが、文字起こしの精度は超高い。しかもこれがOSSとして公開されてるのすごい。 翻訳はもう一歩ってところですが、精度が上がったらWhisperを利用する方がさらに増えていくのでは...? 欲を言えば話者識別もほしかったりします笑

Whisperで文字起こし、GPT-3で要約をするだけで翻訳付きの議事録アプリできちゃう。OpenAI最高だなぁ

以上です!ご覧いただきありがとうございました!

PR

採用情報

エンジニアを絶賛採用中ですので、気になる方は是非以下のページをご確認ください!
インフラやデータ基盤の話をもし聞きたい方がいましたら、カジュアル面談でさせてくださいっ

https://stafes.notion.site/stafes/d0996a00d77d418280982797c7e16001

脚注
  1. 単語誤り率(Word Error Rate; WER)=(挿入単語数 + 置換単語数 + 削除単語数)/正解単語数 ↩︎

スタフェステックブログ

Discussion