完全な文だけを訳に回す——その設計を、カウンタ一本が裏切っていた

LiveTR で英語動画を見ていると、字幕の訳がときどき混線していた。
別々の人のセリフが一行に混ざる。無音明けの第一声が、頭から欠けて訳される。意味の通らない日本語が、ときどき出る。
訳すには、完全な文がいる
翻訳に半端な文を渡せば、半端な訳が返る。当たり前だ。
ここで効いてくるのが、音の拾い方だ。LiveTR はリアルタイムで処理するために、流れてくる音声を5秒ごとに機械的に区切って、音声認識にかけている。5秒という区切りは、当然、人の話の切れ目なんてお構いなしだ。文のド真ん中で容赦なくぶった切る。
だから音声認識から出てくる英文は、しょっちゅう途中で切れている。「I think that we should…」みたいに、5秒の壁で胴体を断たれた切れ端だ。これをそのまま翻訳に投げたら、ぶつ切りの訳しか返らない。
そこで LiveTR は、切れ端をそのまま訳に回さない。いったん抱えておいて、次の5秒で続きが来たらつなぎ、完全な一文にしてから訳す。完全な文だけを翻訳に渡す——これが翻訳精度のキモで、前にLiveTR を紹介した記事でも要だと書いた所だ。
問題は、続きが来ない時。話が途切れたり、話題が変わったりして、抱えた切れ端の続きがもう来ないことがある。その時は「これ以上待っても無駄」と見切って、切れ端だけで一文として送り出す。その見切りの仕組みも、ちゃんと入れてあった。
その見切りが、逆を向いていた
字幕が混線していたのは、この見切りが効いていなかったからだ。
待ち時間を数えるカウンタ一本——「もう待たずに送る」を決めるやつ——が、逆さまに配線されていた。待つ必要がない時に働き、本当に見切るべき時には働かない。だから抱えた切れ端は宙に浮いたまま残り、次の5秒で別の人がしゃべり出すと、その頭にくっついた。
たとえば、5秒の区切りが「we really need to」の途中で落ちる。その後、話が別の方向に流れて、次の5秒で誰かが「Yeah anyway the budget is fine.」と言う。本来なら前の切れ端は単独で送られるのに、くっついて「we really need to anyway the budget is fine.」という、誰も言っていない一文になる。これを忠実に訳すから、字幕は「私たちは本当に、とにかく予算は問題ない。」と、二人のセリフが混ざった一行になった。
直したのは、この見切りの向き、一箇所だけ。設計は正しかった。
翻訳エンジンは、最初から優秀だった
LiveTR は翻訳をクラウドのエンジン(DeepL / Google / Azure / Amazon、設定で選べる)に投げている。渡された英文を、忠実に訳すだけのやつらだ。継ぎはぎを渡せば、継ぎはぎを訳す。渡している英文が二人のセリフの貼り合わせだなんて、向こうは知りようがない。
見切りの向きを直したら、完全な文がエンジンに届くようになった。実機で英語音声を流すと、訳が別物になっていた。翻訳エンジンには、一行も触っていない。
完全な文を渡せば、同じエンジンが、そのまま良い訳を返す。それだけのことだった。
ダウンロード
LiveTR は BOOTH で販売中。Windows + NVIDIA GPU 環境で、英語の動画や配信をリアルタイムに日本語化できる。字幕オーバーレイと、話者の声色を反映した日本語読み上げ付き。
関連記事
- LiveTR — 動画の英語音声をリアルタイムで日本語にするアプリ — このアプリそのものの紹介。音声認識・翻訳・字幕・読み上げの全体像
このブログ「Claude Code 始めました」は、Claude MAX ユーザーが実際の開発で使いながら学んだことを記録していくサイトです。