YouTube の自動吹き替えの日本語は、何を言っているのか分からないのに、毎回きっちり同じ壊れ方をします。あの壊れ方には規則があるはずだと考えて、実際に数えて、規則として実装した記録です。
自動吹き替えの日本語には、聞いてすぐ分かる癖があります。やたらと「えぇ」と言う。主語をいちいち言う。「〜を持っています」が多い。そして女性の声はなぜか「〜だわ」「〜のよ」と喋る。
おかしいのに、おかしさが毎回同じです。ということは、そこには手続きがあります。手続きがあるなら、逆にたどって再現できます。
立てた仮説はこうです。あの日本語は「英語の頭で考えた日本語」である。英語の音声認識を通し、英語として構造を決め、それを機械的に日本語へ移す。そのとき英語の側にあって日本語には無いもの――主語、冠詞、所有格、フィラー――が、日本語に無理やり持ち込まれる。
だとすれば、作るべきものは翻訳器ではありません。「日本語を、いったん英語を経由したかのように書き直す装置」です。
まず前提を確認しました。「そもそも英語の音声認識はフィラーを拾っているのか」です。拾っていなければ「えぇ」の出どころが説明できません。
61分の対談動画1本、英語の自動字幕を数えました。
| 表現 | 回数 | 毎分 |
|---|---|---|
| you know | 81 | 1.33 |
| so, | 45 | 0.74 |
| like, | 31 | 0.51 |
| uh | 29 | 0.48 |
| um | 27 | 0.44 |
| I mean | 25 | 0.41 |
| well, | 23 | 0.38 |
| 合計 | 261 | 4.3 |
61分で261回。毎分4.3回です。きれいに消されているどころか、たっぷり残っていました。ここが出発点です。
同じ動画の日本語側を数えて、思っていたものと違うことが分かりました。
| 日本語 | 回数 |
|---|---|
| ええと | 38 |
| ええ(単独) | 20 |
| えっと | 9 |
| え系 小計 | 67 |
| うん | 54 |
| まあ | 19 |
| 相槌を含む合計 | 140 |
「えぇ」の正体は、ひとつの語ではなく「え」で始まる一群でした。聞いているぶんには「ええと」「えっと」「ええ」はすべて同じ「え」の音で始まるので区別されず、まとめて「やたら『えぇ』と言う」と知覚されます。
もうひとつ、英語側との対応で予想が外れました。
| 英語 | 回数 | 日本語での対応 | 保持率 |
|---|---|---|---|
| yeah | 80 | うん(54) + ええ(20) = 74 | 93% |
| um / uh | 113 | ええと(38) + えっと(9) + まあ(19) = 66 | 58% |
主犯は um/uh ではなく、相槌の yeah でした。対談形式でフィラーが濃く感じるのは、話し手が交互に yeah を打ち続けるからです。
実装への含意は明確でした。単一の「えぇ」を挿入するのは間違いで、重み付きの集合から引く必要があります。
ええと 57% ええ 30% えっと 13%
ここが一番の収穫です。ジャンルの違う動画を測ったら、同じ「自動吹き替え」なのに、まったく別の喋り方が出てきました。
| 対談(61分) | vlog(11分) | |
|---|---|---|
| ええと / えっと | 38 / 9 | 0 / 0 |
| わよ・のよ・るわ・わね | ほぼ無し | 32回(2.9回/分) |
| その・この | — | 15回(1.4回/分) |
千人の戦士の精神と1万人の男の力を間違いなく持ってるわ 一番の態度と一番の意思を持ってるわ これには秘密のトリックがあるのよ
女ことばは翻訳日本語の最も有名な特徴です。英語は文末に話し手の性別が出ないのに、日本語の吹き替えは付けます。日本語話者にとっては「えぇ」よりも即座に「これは翻訳だ」と分かる目印です。
アプリに複数のモードがあるのは、趣味で分けたのではなく、測ったら2つ出てきたからです。
吹き替え音声248セグメントのうち、82(33%)が終助詞で終わっていました。その内訳です。
| 女ことば | 重み |
|---|---|
| わ | 46 |
| のよ | 25 |
| わよ | 21 |
| わね | 8 |
| かしら | 0 |
| のね | 0 |
「かしら」「のね」は0回です。翻訳の女ことばと言われて反射的に入れていた語が、実データには存在しませんでした。
思い込みで入れた語を消せたことが、実測の最大の収穫でした。数えなければ、ありもしない「かしら」を出し続けるアプリになっていました。
もうひとつ。終助詞が付く先はすべて常体でした。実物は「持ってるわ」であって「持っていますわ」ではありません。丁寧語のまま終助詞を足していた実装を、ここで書き直しています。
変換は 65KB ほどの JavaScript 1ファイルで、外部への通信はありません。入力した文章はブラウザの中だけで処理されます。
入力 ├ 引用・括弧の中身を退避 ├ 定型文・短い口語の表引き ├ 構造変換 ← 文に割る前に、テキスト全体へ ↓ ここで文に分割 ├ 語彙・慣用句・述語パターン ├ 一人称/所有格/冠詞の付与 ├ 敬体に正規化 ← 活用の判定はここ一箇所だけ ├ 主語の補完・冗長化 ├ 常体へ逆変換 ← 常体モードのみ ├ 終助詞 └ フィラーの挿入
設計上の要点は「いったん敬体に揃えてから常体へ戻す」ところです。日本語の活用は面倒なので、判定を一箇所に集めないと、モードの数だけ活用ルールを二重に持つことになります。常体化はその逆写像として書けば済みます。
もうひとつ、途中で諦めた判断があります。五段活用と一段活用は、表記から見分けられません。「走る」と「見る」は字面が同じ形です。機械的に活用させると「走ます」のような壊れ方をします。
そこで活用を諦めて「〜のです」で受けることにしました。「彼は走るのです」なら活用の判別が要りません。しかも、もったいぶった言い回しはこの構文の持ち味そのものなので、逃げが逃げに見えないという副産物が付いてきました。
日本語を規則で書き換えるとき、繰り返し踏んだ穴です。
最頻出でした。"した"→"しました" という単純な置換が、「でした」の中に当たって「でしました」を作ります。長いキーから当てる、直前の文字で除外する、そして置換ではなく付け足す。
「ますが、」を「ます。しかし、」に変えた直後、別の規則がその「しかし、」を切って「しか。そして、」になりました。生成物にマッチしない条件が要ります。
文末に接続詞だけが残って「そして、です。」という中身の無い文が出る不具合がありました。発生率は 2.3%。数回試した限りでは気づけません。率が知りたい欠陥は、数千回まわして率で出すしかありませんでした。
壊れた出力を自動で見つける検出器を書きましたが、その検出器が2回バグりました。既知の型しか見ておらず新しい壊れ方を素通りさせた回と、「ください」を誤りとして12件誤検出した回です。
同じ罠は
grepにもあります。MALE_REを消したか確認しようとしてgrep MALE_REを打つと、FEMALE_REに当たって「まだ残っている」と読めてしまいます。部分一致で判定しない。
正直に書いておくと、カタカナの専門語ばかりの文は、あまり変わりません。
「リポジトリの CI がタイムアウトするのでワークフローのキャッシュ設定を見直した」のような文には、当てる辞書がありません。日常語の言い換え表を持っていても引っかからないので、できるのは文を分割することとフィラーを入れることくらいです。
これは辞書を厚くすれば減りますが、ゼロにはなりません。手法の限界です。
ブラウザだけで動きます。読み上げも付いているので、あの平板な合成音声で読ませるところまで再現できます。題材が吹き替えなので、音が出て初めて完成する種類のものです。