どうも。イモムシです。日英間リアルタイム翻訳を雑に作って満足したので、その話をさせていただきます。
導入
最近、社会からの要請を受け TOEFL という英語のテストを受験しました。結果、Reading, Writing, Speaking はまずまずだったものの、Listening が壊滅的。悲しくなりました。耳が(性的な意味で)弱いです。
ところで、近年の自然言語処理の急速な発展には目を見張るものがあります。例えば、次のような機能は既に実現可能です。
- 音声を元に文字起こしする機械
- 発展的な物では、誰が喋っているのかを分別しつつ文字起こしします
- 文字を入力に翻訳する機械
で、この現状を鑑みまして、「リアルタイム翻訳システムもう作れんじゃん!社会の怠慢か~?」と思うのは自然な流れだと思います。でまぁ、作れます(笑)という主張は誰でもできますし、作って初めて分かる事は予想外にいっぱいです。それに、なんか動くものを見るのは楽しいです。という訳で、とりあえず動くものを作りました。
注: 実際、リアルタイム翻訳を謳う諸々は探せばいくらでもあると思います。ですが、実用されているかというと殆ど実用されていないだろうというのが主張です。
構想
要件
リアルタイム翻訳を実現する方法は色々あると思いますが、例えばこんな感じのものができたらイケている気がします。
- 話をする人がそれぞれのマイクに向かって話しかける
- 話者ごとに、話した内容が ja/en で文字として表示される
例えばこういうのを想定しているわけです。 人 1, 2 が会話している横で、人 3, 4 が会話している風景を想像していただけると良いです。
1: 春休みになにか予定がありますか? / Do you have some plans during this spring vacation?
2: 特にありません / Nothing.
3: 納豆どこ? / where is a natto?
1: あーね / wow.
4: 冷蔵庫の中だよ / in the refrigerator.
念のため補足しますが、このシステムは高々 5 人程度の規模の会話でしか実用に耐えません、おそらく。30 人が話す内容が一気に流れても、きっとわかりませんよね。でもこれで行きます。雑に作ってなんか動いたらウケる。そんなノリです。
また、他のモデルとして 1 つのマイクをみんなで共有する物がありまして、これは参加者への要件が少ないです。先述した話者分離機械を作ればできそうで、良さそうかも。が、実は話者分離というのは難しいタスクで、文字起こしの性能が下がります。それに、それぞれがマイクを持つと翻訳上非常に有利です。ソフトとハードの落とし所として、これが 1 つの形だと思います。
準備が整いましたので、いざ作ろうか......などと思っていた時期が私にもありました。はい、頑張ったけれど作れませんでした(泣)。一般のご家庭に、複数マイクやそれを処理する機構が備わっているわけがありません。キレそうです。パソコンはナンデモデキル機械の筈で、やりようは幾らでもありそうなんですけどね。ですので妥協して、今回は次の物を作ります。
- 1 つの機械、1 つのマイクで処理する
- 機械は"今誰が喋っているか"という状態をもち、これはボタンで切り替える
- 喋る人が切り替わるタイミングで、その人が話していた内容が ja/en で文字として表示される
一応、会議で使うぐらいには耐えるつもりです、皆様のご理解ご協力があれば。
使うもの
今回は次の技術をチョイスしました。
- whisper ... 文字起こしする機械として有名なものです。結構古いんですけどネ。
- 翻訳API ... 当初は LLM という物を使おうと思っていたのですが、API になりました。何かわからない人のために(実は自分もよくわからないんですが)、サービスとして提供されている翻訳機械的なものです。
実装
実装における困難として、マイクで受け取った音声をどうプログラム上で扱うのかがわかりませんでした。この辺はお願い☆Codexして済ませました。といいますか、実装は全部 Codex が一晩でやりました。
できたもの
デモとして、日本語話者(俺くん)と英語話者( Gemini )の会話を録画したものを載せます。声が入っておりますのでお気をつけください。あと、滑舌が悪いです。
えー、それっぽいと思います。よく読むと英語の方が怪しいんですが、ちゃんとした翻訳機械はもっと精度がよろしいですので、見逃していただきたいです。翻訳がまともになった場合、 Zoom のデフォ文字起こしよりはまともだと思います、きっと。
感想
なんか動きました。バカウケです。
これでようやく、リアルタイム翻訳の社会実装の遅さについて堂々と文句を言えます。
見てわかる通り、多少の不便を我慢すれば、リアルタイム翻訳は十分な実用レベルに達していると思います。これを企業が力を入れて作ったならばなおさらでしょう。ですが、導入の動きが鈍い気がします。それどころか、英語教育の重視が叫ばれるケースも目にする始末。
これは一体、どうなるんだ~!?
追記
今回作ったのはあくまでデモであって、実用とは近いようで遠いものです。企業が頑張れば実用まで行けるという主張を強固にするため、精度を上げるために残っている余地をちょっと書かせて頂きます。シロートの妄言かも知れません、悪しからず。
- 文字起こし・翻訳精度を上げる
- 有料の API を用いたり、LLM サーバーを運用する
- 処理の際、昔の会話記録を文脈として与える
- 翻訳速度を上げる
- 翻訳機械の仕事は結局、「長い文章の破片がちょっとずつ与えられるので、逐次翻訳する」ことです。KV キャッシュがモロに使えそうです。
- 翻訳結果を表示する板なんて持ちたくない
- 各々がマイクを持つ前提の元では、そのマイクから音声を出してしまえば良いと思います。把握できるかは別なのですが。
- このシステム、結局30人前提は無理なの?
- 適当な対策ならば幾らでも思いつくでしょう。
- 近くにいる人のログを強調表示する
- 文字起こしをする人を選べるようにする(一番カンタン!)
- 適当な対策ならば幾らでも思いつくでしょう。