「サイバーパンク2077」をプレイしたというエンジニアのマルチン・エランコウスキ氏が、同作で登場するリアルタイム翻訳システムのような「話者の上にリアルタイムで会話内容が表示され翻訳まで行ってくれる翻訳システム」の開発に取り組んでいます。
GitHub – elanmart/cbp-translate
https://github.com/elanmart/cbp-translate
エランコウスキ氏は「話者の上にリアルタイムで会話内容が表示され翻訳まで行ってくれる翻訳システム」を開発するにあたり、以下のような条件を処理できるシステムを構築することにしたそうです。
・ショート動画を処理可能
・複数のキャラクター(話者)の会話内容を翻訳可能
・英語とポーランド語の両方の音声を認識・文字起こし可能
・会話を任意の言語に翻訳可能
・各フレーズを話者に割り当て可能
・画面に話者を表示する
・サイバーパンク2077のように元動画に字幕を追加する
・素敵なフロントエンドのシステム
・クラウドでリモート実行可能
機械学習エコシステムの発展により、上記の要件を満たす翻訳システムの概念実証を開発することは「間違いなく可能」と考えたそうです。
エランコウスキ氏は「既製ツールは非常に堅牢でほとんどの場合、統合が非常に簡単です。さらに、学習済みのモデルが豊富に存在するため、一度の最急降下法アップデートを実行したり、1つの事例に手作業でラベル付けしたりすることなく、アプリ全体を構築することができました」と記しています。また、エランコウスキ氏は「開発には間違いなく予想以上の時間がかかりましたが、実際はほとんどの時間が機械学習以外の問題(ビデオフレームにUnicode文字を追加する方法を理解することなど)に費やされました」と語り、当初の予定よりも開発には時間がかかったとしつつも、問題は機械学習以外のところにあったとしました。
実際にエランコウスキ氏が開発した「話者の上にリアルタイムで会話内容が表示され翻訳まで行ってくれる翻訳システム」が、どんな風にリアルタイム翻訳を行うのかは以下の画像をクリックすると再生できる動画をチェックするとよくわかります。動画は1960年代にポーランド語で行われたインタビューを、翻訳システムでリアルタイムで英語に翻訳したもの。
話者の会話内容(ポーランド語)は画面下部にテキストで表示されており、会話のリアルタイム翻訳内容は画面上部に英語で表示されています。話者によりテキストの色が変わっていることからもわかるように、エランコウスキ氏がシステム要件に挙げていた「複数のキャラクター(話者)の会話内容を翻訳可能」であり「各フレーズを話者に割り当て可能」であることがわかります。
以下の画像をクリックすると再生される動画は、サイバーパンク2077でジョニー・シルヴァーハンドを演じているキアヌ・リーブスがスティーヴン・コルベアとのインタビューに応じている動画を英語からポーランド語にリアルタイムで翻訳したもの。
エランコウスキ氏はリアルタイム翻訳システムを開発するために以下のツールを使用しています。
・動画ファイルを処理するためにffmpeg-python(オーディオの抽出およびローフレームのストリーミングなど)
・音声認識用にWhisper
・話者ダイアライゼーションとしてNVIDIAのNeMo(注:PyAnnoteもテストしたものの結果は満足のいくものではなかったとのこと)
・翻訳のためにDeepL
・顔検出用にRetinaFace
・顔識別用にDeepFace
・一意に顔を検出するためのscikit-learn(クラスタリングに使用)
・デモ用フロントエンドのGradio
・サーバーレス展開用のModal
動画のフレームに話者の会話内容を文字起こしするためにPython Imaging LibraryとOpenCVを利用。さらに、YouTubeからサンプルをダウンロードするためのツールとしてyt-dlpも使用しています。
上記のツールがどのように連携してリアルタイム翻訳を行うのかを示したのが以下のスケッチ。
エランコウスキ氏は音声認識に使用したWhisperについて、「これは素晴らしいツールで私よりも英語の音声を正しく認識します。複数の言語を処理し、音声が重なっていても問題なく動作します」と語り、音声認識ツールとしてWhisperを採用した理由を挙げました。さらに、エランコウスキ氏は「私はオーディオストリームをまとめてひとつの入力としてWhisperに供給していますが、私のコードを改善したい場合は、話者ごとにオーディオデータを分割することも可能です。ただし、これで改善されるとは思いません」と述べています。
エランコウスキ氏は翻訳の品質を最高のものにしたいと考えていたため、翻訳モデルとしてDeepLを採用しています。DeepLを採用した理由について、エランコウスキ氏は「DeepLはGoogle翻訳よりも上手く機能し、APIはひと月に50万文字を無料で翻訳してくれます」と語りました。
エランコウスキ氏は話者ダイアライゼーションとしてNeMoとPyAnnoteを試用しています。以下は話者ダイアライゼーションが、どの話者が話しているのかを識別するプロセス。PyAnnoteの精度に満足できなかったというエランコウスキ氏はNVIDIAのNeMoを使用しており、「NVIDIAのNeMoは、自動音声認識(ASR)、テキスト音声合成(TTS)、大規模言語モデル(LLM)、自然言語処理(NLP)に取り組んでいる研究者向けに構築された会話型AIツールキットです」とNeMoを評価。特に英語の認識精度が優れており、「複数人の話者が同時に会話する瞬間の識別にはまだ苦労していますがデモでは十分なレベルで機能してくれました」と述べています。
動画内の顔検出にはRetinaFaceを使用。学習済みのモデルを利用して、動画の各フレームに表示されるあらゆる顔を検出します。RetinaFaceの顔検出精度は非常に堅牢で信頼性が高いそうですが、唯一の欠点として「Tensorflowに依存していることでコードが一度にひとつのフレームしか処理できないこと」をエランコウスキ氏は挙げています。そのため、動画のすべてのフレームをRetinaFaceに処理させるのには非常に膨大な時間がかかるとのこと。実際、最新のGPUでも60秒の動画を処理するのに数分かかるそうです。
なお、エランコウスキ氏が開発したリアルタイム翻訳システムのソースコードはGitHub上で公開されています。
GitHub – elanmart/cbp-translate
https://github.com/elanmart/cbp-translate
この記事のタイトルとURLをコピーする