見出し画像

Whisperを用いたキャラクターボイス収録チェックの自動化の検証【Advent Calendar 12/14】

はじめに

この記事はColorful Palette アドベントカレンダー 12/14の記事です。
株式会社Colorful Paletteでサーバサイドエンジニアをしている司です。
普段はゲーム内機能のサーバ実装、社内の業務ツールなどの開発を行っています。
今回は、OpenAIが開発したWhisperを用いて、キャラクターボイス収録チェックの自動化を検証してみました。
※本記事は、キャラクターボイス収録チェック自動化の検証を目的としており、実運用は行っていません。
※実際に業務利用される方はWhisperの利用規約をご確認ください。

Automatic Speech Recognition

Automatic Speech Recognition(以下、ASR)は、音声を文字列に変換することを指します。
身近な例だと、Google DocumentやSiriの文字起こし機能、YouTubeの字幕機能があります。
会議の議事録作成などに使用している人も結構いるんじゃないかと思います。

Whisper

Whisperは最近OpenAIが発表したASRで、680000時間のデータセットを学習したASRモデルです。99言語の音声認識が行え、日本語にも対応しています。
図1に各言語ごとの推論誤り率を示します。
日本語は話者が少ないことから、データセットも少なく他言語と比べて精度が低いことも多いのですが、推論エラー率は99言語中6位となっており、高い精度で推論が行えるようです。


図1 各言語ごとの推論誤り率(昇順) https://github.com/openai/whisperより引用

図2に従来モデル(wav2vec2.0)とWhisperのデータセットごとの誤り率を示します。
この誤り率が低いほど精度の高い推論が行えており、従来モデルの列とWhisperの列を比較すると、全データセットに対してWhisperの誤り率が低く、モデル自体の精度がかなり高いことがわかります。
更に、エラー率よりwav2vec 2.0はLibriSpeech Cleanに特化したモデルであるのに対し、Whisperは多くのデータセットに対し低いエラー率を実現できていることから、汎用性の高いモデルであると言えます。

図2 データセットごとの従来手法モデルとWhisperの推論誤り率 https://cdn.openai.com/papers/whisper.pdf より引用

背景

キャラクターボイスが実装されているゲームでは、多くの場合収録内容が台本と一致しているかのチェックを行っています。 特にフルボイスのキャラクターゲームでは、セリフ数が膨大であるため、チェック工程に時間を要すことが多いと思います。
シナリオボイス収録フローの一例を以下に示します。

  1. シナリオ執筆

  2. キャラクターボイス収録

  3. 収録内容チェック

  4. スクリプト作成などの作業開始

今回は3番の課題をASRを用いることで解決できるか検証を行います。
例えば、1話10分、合計10話のシナリオが毎月2本あるとすれば、単純計算で毎月3時間20分の工数になります。 また、収録漏れや収録内容に問題があれば再収録を行う必要があるため、声優さんのスケジュール調整などの手配が発生します。 よって、収録したキャラクターボイスを早急にチェックすることが求められ、現場に負担がかかります。
そこで、このチェック作業を自動化するため、ASRを用いて文字起こしを行います。
ASRは100%の精度ではないので多少の誤認識などは発生しますが、一般的なキャラクターボイスの収録では

  • セリフにもよるが、基本的に声優さんの発声がしっかりしている

  • 同時発声がない(ゲーム内で同時に発声していたとしても、収録ファイルは別々)

  • 録音環境が良い

    • 環境音がない

    • マイクの性能が良い

    • ビットレートが高い

といった環境で行われることが多いため、議事録書き起こしなどの利用下より、精度の高い推論が期待できます。

収録チェックの実装

今回はGoogle Colaboratory(GPU)を実行環境にして検証を行いました。
NoteBookはこちら
whisper_recording_check_demo.ipynb

  1. 検証に用いるインスタンスの環境を確認します

Nvidia Tesla T4 VRAM 16GBのGPUが割り当てられていることが確認できました。

2.検証に用いるライブラリをインストールします。

今回は以下の2種類のライブラリをインストールしました。

  • pykakasi

    • 漢字→ひらがな変換を行うライブラリ

    • 利用目的は後述

3.検証に用いる音声データをダウンロード、音声データの原稿を設定します。 音声データは効果音ラボからお借りしました。

4.使用するライブラリのインポートや、whisperの使用モデルを設定します。 モデルには以下の種類があります。

パラメーター数が多いほど高精度な推論が行えますが、高いマシンスペックが要求されます
今回は最も高精度なlargeを設定しました。
大体3GBくらいのモデルのダウンロードが始まるのでしばらく待ちます。

5.いよいよ推論を行います。

predict: が推論結果、correctが正解の文章(台本)、diffがpredictとcorrectの差分となります。

1文目の推論結果から確認すると、

predict:    本日はご来場いただきまして誠にありがとうございます。開演に先立ちましてお客様にお願い申し上げます。携帯電話など音の出るものの電源はお切りください。また許可のない録音、撮影はご遠慮ください。皆様のご協力をよろしくお願いいたします。

となっており、漢字の誤変換もなく、違和感のない日本語となっていました。
diffを確認すると、

diff:    本 日 は ご 来 場 い た だ き ま し て + 、 誠 に あ り が と う ご ざ い ま す 。 開 演 に 先 立 ち ま し て + 、 お 客 様 に お 願 い 申 し 上 げ ま す 。 携 帯 電 話 な ど + 、 音 の 出 る も の の 電 源 は お 切 り く だ さ い 。 ま た 許 可 の な い 録 音 、 撮 影 は ご 遠 慮 く だ さ い 。 皆 様 の ご 協 力 を よ ろ し く お 願 い い た し ま す 。
diff num    +:3  -:0

となっており、3箇所の差分があるものの、その差分が全て句読点の有無であることが確認できます。

次に、2文目の推論結果も確認すると、

predict:    これをもちまして公演を終了させていただきますどなた様もお忘れ物のございませんよう今一度お手回り品をお確かめください本日はご来場いただきまして誠にありがとうございました

となっており、句読点が一切無い点以外は違和感のない日本語となっていました。
diffを確認すると、

diff:    こ れ を も ち ま し て 公 演 を 終 了 さ せ て い た だ き ま す+ 。 ど な た 様 も お 忘 れ 物 の ご ざ い ま せ ん よ う+ 、 今 一 度 お 手 回 り 品 を お 確 か め+ 下-- だ さ い+ 。 本 日 は ご 来 場+ 頂--- だ き ま し て 誠 に あ り が と う ご ざ い ま し た+ 。
diff num    +:6  -:5

となっており、句読点の差分に加え、漢字の変換有無で差分が発生していることが確認できました。
以上の結果から、Whisperは高精度な推論が行えており、差分は句読点や漢字の変換によるもので、発音ベースでは正しい推論が行えていると言えます。

6.5.の結果を踏まえ、発音ベースで差分チェックを行います。
5.では学習モデルから出力された文字列を加工せずに、台本との差分検出を行っていました。
そこで、6.では差分チェックを行う前に、推論結果の文字列と台本の文字列に対して以下の前処理を行いました。
漢字から平仮名に変換(2.でインストールしたpykakashiを使用)
句読点を除外

その結果、1文目の文章は

predict:    ほんじつはごらいじょういただきましてまことにありがとうございますかいえんにさきだちましておきゃくさまにおねがいもうしあげますけいたいでんわなどおとのでるもののでんげんはおきりくださいまたきょかのないろくおんさつえいはごえんりょくださいみなさまのごきょうりょくをよろしくおねがいいたします

となり、句読点が削除され、全て平仮名になりました。
差分を確認すると、1文目、2文目共に

diff num    +:0    -:0

となっていることから、推論結果と台本が一致していることが確認できました。

まとめ

今回はWhisperを用いた、キャラクターボイスの収録内容チェックについて検証しました。
収録音声と台本の発音チェックを行った結果、高い精度で文字起こしが行えていることを確認しました。 今後、収録した音声の感情と台本の感情が一致しているのか(Sentiment Analysis)、キャラクターと声優さんの組み合わせが一致しているのか(Speaker recognition)などの推論を加えることで、より高精度な収録チェックを行えることが期待できます。
機械学習の推論タスクの多様化や高精度化により、実用レベルで使用できるものが多くなってきました。 従来まで工数をとって行っていた作業を自動化し、よりクリエイティブなことに時間を割けるようになっていってほしいですね。

明日はクライアントエンジニアの中水流さんによる「UnityEditorの拡張」の記事になります!
Unityの開発効率が向上する内容なのでぜひ見てみてください!
お楽しみに!