SyncTrans 1.0.0を今週リリースしました。macOS 14以降のApple Silicon搭載機で動く リアルタイム音声翻訳アプリです。話すと、文が形になるのに合わせて翻訳が表示され、 合成音声がそれを読み上げます。この記事では、ここに至るまでのエンジニアリングの 記録——何を、どの順番で作り、どのトレードオフを受け入れたか——をお伝えします。 ユーザー向けの簡潔なリリース情報は 新着情報にあります。
なぜMacのための通訳を作るのか
スマートフォンの翻訳アプリは、トイレの場所を尋ねるくらいならよく機能します。しかし 実際の会話となると話は別です。2人が小さな画面を交互にのぞき込み、端末を取り合う 形になってしまうからです。私たちが重視した会話——クライアントとの打ち合わせ、 相談の場、弁護士や医師を交えた家族の話し合い——では、テーブルの上にフレーズ集よりも ノートパソコンがあることのほうが多いのです。
また、Macはこの仕事に破格に向いたハードウェアでもあります。Apple Siliconなら 音声認識、機械翻訳、音声合成をローカルで実用的な速度で実行できますし、優れた マイク経路とちゃんとしたスピーカー、必要なだけのディスプレイ接続も最初から 備わっています。私たちが掲げた目標は、言い方は簡単です。言語は機械に任せて、 人は会話に集中できるようにすることです。
並行開発した2系統のエンジン
SyncTransには最初のプロトタイプの時点から、同じ仕事をする2つの方法がありました。 マネージドなクラウドエンジンはセットアップ不要で、サインインして言語を選べば すぐ始められます。オンデバイスエンジンは、認識・翻訳・合成のすべてをMacの上で 完結させます。データは一切マシンの外に出ず、ネットワークがなくても動き続けます。
私たちは、まずクラウド版を出してローカル推論を後付けするのではなく、あえて両方を 同時に作る道を選びました。代償は確かにありました。すべての機能を、まったく性質の 異なる2つのスタックの上で二度実装しなければならなかったのです。その見返りとして、 両方のスタックが差し込める単一のエンジン抽象化と、「断言ではなく計測する」という 習慣が得られました。ローカルモデルの各ティアには実測によるメモリ下限があり、 アプリは提示する前にそのマシンが実際に動かせるかを確認します。古いMacには、 スワップ地獄に陥るような経路へ誘導するのではなく、どのティアが届かないかを 正直に伝えます。
3つ目のエンジン選択肢は、その抽象化からほぼ無償で生まれました。すでに信頼している 音声・翻訳サービスがあるなら、SyncTransを自分のAPIエンドポイントに向けるだけで、 アプリの他の部分はそのまま動きます。3つのエンジン、1つのインターフェース。 切り替えは再インストールではなく、設定の選択です。
対面の場面のための設計
プロダクトを最も形作った機能は、初期ビルドを人が使う様子を観察したことから 生まれました。ウィンドウが1つだけだと、話し手2人は必ず画面を交互に自分のほうへ 傾けます。そこで1.0ではデュアルスクリーンの会話ビューを搭載しました。各言語を それぞれのディスプレイに全画面表示し、Macを話し手の間に置けば、それぞれが 自分宛ての画面を読めます。各ウィンドウはアプリ内から任意のディスプレイに 割り当てられます。
音声にも同じ発想を適用しました。1組のヘッドフォンを共有する場合、SyncTransは 一方の言語を左耳に、もう一方を右耳に送れるので、1台のMacを共有する2人がそれぞれ 自分宛ての翻訳を聞けます。説明すれば小さなことですが、実際に使うと驚くほど大きな 違いがあります。会話がもう機械の話ではなくなるのです。
1つのセッション記録に3つのレイアウト
同じ会話でも、場面によって見たい形は異なります。そこで1.0では、1つのセッション 記録の上に3つのレイアウトを用意しました。チャットレイアウトは、メッセージング アプリのように両言語を発話ごとに交互に並べます。デュアルカラムレイアウトは各言語に 専用の列を与えるもので、2人が同時に目で追う場合に読みやすくなります。議事録 レイアウトは、セッションをノートのように流し読みできるドキュメントとして 表示します。レイアウトは1つの記録に対するビューなので、セッションの途中で 切り替えても何も失われません。
用語集、コンテキスト、そして正しく振る舞う数字
モデル選びそのものより重要だからこそ、2つの品質機能が1.0に入りました。翻訳は 会話のコンテキストを逐次引き継いで実行されるので、代名詞や話題への言及は、その セッションで実際に話された内容に基づいて解決されます。プロジェクトごとの用語集は、 モデルが勘で訳してしまいがちな語——製品名、人名、専門用語——を固定します。 用語が一度用語集に入れば、毎回同じ訳で出てきます。
1.0にはさらに、数字や割引表現について、モデルの背後に置く決定論的なルール層も 含まれています。ここは直訳すると意味が静かに反転してしまう領域で、中国語の 割引慣習が有名な例です。この取り組みには専用の記事があります: 翻訳を生き残る数字。
検索と書き出しができる履歴
翻訳された会話は、あとから必要になることがよくあります。そこですべての セッションはMac上にプロジェクトごとに保存されます。履歴はプロジェクトをまたいで 検索でき、個々の発話は修正も削除もでき、終了したセッションはTXT、Markdown、SRTで 書き出せます。会議のメモ、文書として必要な見積もりの言葉、同じイベントの録画に 付ける字幕などに使えます。どのエンジンが生成した記録でも、データはあなたの マシンに残ります。
7言語対応のインターフェース
インターフェースが1言語しか話せない通訳アプリには信頼性の問題があります。そこで 1.0のインターフェースは、英語、中国語、日本語、スペイン語、フランス語、韓国語、 ウクライナ語の7言語にローカライズしました。私たちはローカライズを翻訳テキストの 流し込みではなく、エンジニアリングの仕事として扱いました。途中で切れてしまう ツールバーのラベル、コンテナからはみ出すボタン、英語でしか収まらないレイアウトを すべて洗い出して修正しました。このブログも同じ7言語で公開しています。それが 誠実なやり方だと考えたからです。
1.0が意味すること
私たちにとって1.0は、基本線としての約束です。「話す、見る、聞く、残す」という 一連の流れが、出荷するすべてのエンジンで、動作を保証したハードウェア上で、 端から端まで動くということです。SyncTrans 1.0.0にはmacOS 14以降とApple Siliconが 必要です。ダウンロードは こちらから。 機能の紹介は機能ページにあります。
質問やバグ報告は? フィードバックボード が私たちへの一番速い連絡手段です。