OCIの音声サービスで Whisper を使ってみた

目次

はじめに

OCIには、音声ファイルからテキストを抽出したりすることができる音声サービスがあります。

2022年2月にリリースされたものの、日本語には対応していなかった為、触る機会もなかったのですが、2024年3月に トランスクリプション・ジョブ で OpenAI の Whisper モデルが使用できるようになったことで、日本語にも対応できるようになりました。
リリースから1年以上経過しましたが、この度、初めて使ってみたので記事にしたいと思います。

音声サービスと日本語対応状況

OCIの音声サービスでは、大きく以下のような4つの機能がありますが、このうち Whisper モデルの登場によって日本語に対応したのは「トランスクリプション・ジョブ」のみとなります。

トランスクリプション・ジョブ

音声ファイル(WAV, MP3, MP4など)をアップロードし、そのファイルから文字起こしを非同期処理で行う。

ライブ文字化の使用

リアルタイムに音声ストリームを受信し、即座にテキストに変換する。

テキストから音声への使用

テキストを合成音声に変換して、ナレーションや読み上げ音声を生成する。

カスタマイズの使用

利用者が特定の単語(固有名詞、専門用語など)を事前に登録することで、音声認識時にその単語の認識精度を高める。

検証前確認

制限確認

トランスクリプション・ジョブで、Whisper モデルを使用する場合の対応ファイル形式、ファイルサイズは以下となります。

  • ファイル形式
    • AAC, AC3, AMR, AU, FLAC, M4A, MKV, MP3, MP4, OGA, OGG, OPUS, WAV, WEBM
  • 最大ファイルサイズ
    • 最大2 GB

詳細については、以下のリファレンスをご確認下さい。

検証用ファイル

文字起こしする音声ファイルは、 GitHub上で公開されている音声データセットの Kokoro Speech Dataset より、 芥川龍之介の 仙人 を読み上げる10分弱程の音声ファイルを使用させて頂きます。
トランスクリプション・ジョブを作成する前に、事前に音声ファイルを オブジェクト・ストレージ にアップロードしておく必要がありますので、上記音声ファイルをアップロードしました。

検証

トランスクリプション・ジョブの作成

まずは、コンソール画面の「ナビゲーションメニュー」-「アナリティクスとAI」を押下し、「AIサービス」下の「音声」を押下します。

表示された画面の「ジョブの作成」ボタンを押下します。

ジョブの作成画面で、必要な情報を入力します。



今回は以下のように設定して、「次へ」ボタンを押下します。

項目 設定 備考
名前 blog_speech  
説明 未設定  
コンパートメント <コンパートメントを選択>  
入力バケット test-from  
出力 「出力ファイルを別のバケットに格納します」を選択  
出力バケット test-to  
モデル・タイプの選択 Whisper 中 Whisper モデルを使用する場合は「Whisper 中」を選択します。
ドメインの選択 汎用 現時点で「汎用」のみが選択可能となっています。
言語の選択 日本語  
SRTトランスクリプション形式の取得 未チェック これをチェックすると、動画の字幕等に使えるSRT形式のファイルも一緒に作成されますが、今回は未チェックとしています。
句読点の有効化 チェック  
ダイアライゼーションの有効化 未チェック 複数の話者がいる音声ファイルで、誰が話しているかを自動的に判別する機能ですが、今回は複数の話者がいる訳ではないのでチェックしていません。

「ファイルの選択」画面では、アップロードしたファイルを選択して「送信」ボタンを押下します。

すると、一覧画面に「ステータス」が「受入れ済」として表示されます。

しばらくして、「ステータス」が「成功」となれば処理の完了となります。
10分弱の音声ファイルで、ジョブ期間は1分50秒となっています。

成功後に出力バケットに指定したバケットを見ると、以下のようにジョブに割り当てられた接頭辞のフォルダ内に、JSONファイルが作成されます。

ファイルの確認

作成されたJSONファイルを確認してみます。
実際のファイルは改行がなく見にくいので、jqコマンドで見やすくしたのが以下となります。

この出力内容の "modelType": "WHISPER_MEDIUM" から、リファレンスに記載が見当たりませんでしたが、Whisper の MEDIUM モデルが使用されていることが予想されます。
また、抽出されたテキストは、 transcriptions->transcription に出力されます。
ここに出力された文字数が多いため、最初の部分をピックアップして以下に記載します。
※冒頭の案内は対象外とし、実際の文字列に改行はありませんが、見やすくするために改行を入れています。

実際の読み上げられた内容は、以下にあるので、こちらも同じ部分をピックアップして記載します。

どうでしょうか?
まず、最初に気になったのは、ほとんどの文字間に半角スペースが入ってしまってます。
ベースとなる OpenAI の Whisper API を直接使用した場合、このような形式にはなりませんが、OCIの音声サービスで Whisper を使用すると、テキストが細かく分かち書き(トークナイズ)されているように見えます。
この違いは、OCI側で追加のテキスト処理が行われていることが予想されますが、この処理の詳細については、OCIのリファレンスには記載がなく、具体的な仕組みは不明です。
あとは、漢字を正しく認識出来ていない以外は、それなりにテキスト抽出できているようにも思います。

とはいえ、流石にこのままだと、改行もないし見るに堪えないので、OCIの Generative AI を使って、LLMに整形してもらいました。

抽出時点での漢字の誤り「飯炊奉公」→「飯滝の方角」等は、誤ったままですが、かなり実用的に使えそうな感じになったように思います。
ちなみに、整形した際のプログラムはこちらです。

また、Google Colabを使って、OpenAIの Whisper で medium モデルを使って文字起こししたのが、以下となります。
こちらも、最初の部分をピックアップして以下に記載します。
※冒頭の案内は対象外とし、実際の文字列に改行はありませんが、見やすくするために改行を入れています。

LLMで整形しなくても、ある程度読める文章になっている点から、OpenAIの Whisper から、OCIの音声サービスに乗り換えた場合には、抽出したテキストを整形するという手順が必要になりそうです。

まとめ

OCIの音声サービスで Whisper モデルを使用した場合、漢字の認識に誤りがある場合等はありますが、全体的に高い精度でテキストが抽出されています。
抽出されたテキストは、LLMを使用して整形することで、より読みやすい文章に変換し、実用的なテキストデータとして活用できます。

OCIの音声サービスで、「トランスクリプション・ジョブ」以外の機能にも日本語対応が行われるよう、今後のアップデートに期待したいと思います。

スマートスタイルTECHブログについて

スマートスタイルTECHブログでは、日頃OCIのサポート業務に従事している有資格者で構成された技術サポートチームがOCIに関する技術情報を発信しています。データベースのお困りごとはお気軽にご相談下さい。

よかったらシェアしてね!
  • URLをコピーしました!
目次