文を意味のかたまりで切る — そして 2 つの回り道
EasyDictation を作っているチームです。英語学習者向けのディクテーション練習ツールで、文字起こし・意味のかたまりへの分割・翻訳のパイプラインはすべて自前です。

すべてはフィードバックボードへの 1 件の投稿から始まりました。

小さな修正のように聞こえました。かたまりを短くして出す、それだけ。けれど掘り進めるほど、これが長さの問題ではまったくないことがはっきりしてきました。問題はどこで切るかでした。正しく名づけるなら、英文をどう意味のかたまりに分けるか。そしてそれを解いた瞬間に、はるかに難しい問いが生まれました。間違ったことを教えずに、そのかたまりをどう翻訳するのか?
その両方の全記録です。自信を持って間違えた 2 回も含めて。
第 1 部 — 短く切るのは簡単、正しく切るのは簡単ではない
いちばん速いやり方は機械的なものです。1 かたまり 5 語ずつ、あるいはカンマごとに切る。試しました。こういう断片ができます。
"the big" / "red car that I" / "bought last week"
算数としては完璧です。リスニング練習としては無価値です。"the big" と "red car" のあいだで息を切る人はいません。そう切ったかたまりは、実際の発話に存在しないリズムを訓練させます。さらに悪いのは、意味を持たない断片を頭に保持させることです。短期記憶は意味のないものを覚えるのが極端に苦手です。
そこで問いを書き換えました。絶対に切ってはいけないのはどこか?
第 2 部 — 手書きの分割規則: なぜ失敗したか
腰を据えて、英語が語をどうまとめるかにもとづいて「ここでは絶対に切らない」規則を並べました。次の内側では絶対に切らない。
- 限定詞 + 名詞 — the big red car
- 前置詞 + その目的語 — in the garden、of a week
- 助動詞 + 動詞 — has been、did not answer
- 動詞 + 不変化詞 — give up、look after
- "to" + 動詞 — to share
- 固有名詞と肩書き — New York City、Dr. Jane Smith
- 数値、日付、金額、単位
- 固定表現と複合名詞 — on the other hand、climate change
- 所有格 + 名詞 — John's car
そして当たり前に聞こえるものをひとつ。機能語だけでかたまりを終わらせない — "of" でぶら下がったまま終わらせてはいけない。
それから実装を始めました。そこで崩れました。
どの "of" が取り残されているかを知るには、それがどの句に属しているかを知る必要があります。つまり文を構文解析することです。そして事態は悪化し続けました。
- 同じ "up": "give up" では動詞に接着しなければならない不変化詞。"walked up the hill" では後ろに属する前置詞。文字を見るコードには、この二つは同一です。
- "New York City" はひとかたまりで保たなければならない。けれど固有表現認識を後付けしない限り、コードにはそれが固有名詞だと分かりません。
- "1,000" のカンマは決して切れ目ではない。"In 2020, we…" のカンマは理想的な切れ目です。同じ文字です。
- "to share" の "to" は不定詞。"went to London" の "to" は前置詞です。
規則を足すたびに、例外が三つ生まれました。半分ほど進んだところで顔を上げ、自分たちが何を作っているのか気づきました。英語のパーサです。しかも完成させたところで、十分に厄介な現実の文 1 つに負けるでしょう。
そこで、かなり明白な気づきが来ました。受け入れるまでに恥ずかしいほど時間がかかった気づきです。いまの言語モデルは、まさにこれの名人だ。 "give up" と "walked up" を見分けること、"New York City" が 1 ブロックだと知っていること、どのカンマが息継ぎでどれが桁区切りかを知っていること。それこそ、モデルが何十億の英文から学んだことです。私たちは、モデルがすでに持っている能力を手でコードに書いていました。
そこで役割を入れ替えました。
- 規則はコードをやめて、指示書になった。 上の「ここでは絶対に切らない」リストは、まるごとプロンプトの中に住んでいます。
- 境界は 100% モデルが決める。 コードは何も発明しません。語数を合わせるための詰め込みも、上限もありません。
- コードは、コードが本当に得意なことに戻った。検証です。
- すべてのトークンを元の語リストと照合する。モデルは句読点を落とすことがありますが、語が 1 つでも変わったり欠けたら、その候補は丸ごと却下してフォールバックに回します。
- 語ごとのタイムスタンプから各かたまりの時間を割り出す。再生を押すと、ちょうどそのフレーズに着地します。
- すべてのかたまりを親の文に対応づける。 これが後で効いてきます。
小さいけれど大きく効いた変更がひとつ。モデルに渡すのは、生の語をつなぎ直した文字列ではなく、句読点つきの文字起こしです。カンマとピリオドは、録音が残していく区切りの手がかりのうち最も強いものです。それを剥がすのは、手元にある最良の証拠を捨てることです。
第 3 部 — 何を基準に切るか: 意味のかたまりとイントネーション単位
切る仕事をモデルに渡すことは、好きにやらせることではありません。何を基準に切るかは依然として伝える必要があり、ここでは雰囲気ではなく本当の裏づけが必要でした。
人は単語を単位に話しません。 発話は意味のかたまり(thought group、sense group)に組織されています。
意味のかたまりとは、ひとつの考えを担い、ひと息で発せられる語のまとまりです。そして休止はかたまりのあいだの境界に落ち、決して内側には落ちません。
言語学では、この単位は Wallace Chafe がイントネーション単位として記述したものです。連続する発話の流れを、聞き手の限られた注意の焦点に収まる大きさへ切り分ける、中間レベルの韻律的な句です。これは美的な話ではありません。話される英語の記憶におけるイントネーション単位の役割については、専用の研究があります。
そこに認知心理学の一片を加えます。ワーキングメモリが保持できるのはおよそ 7±2 単位(Miller, 1956)で、後の研究では約 4±1 に下方修正されました(Cowan, 2001)。私たちのいちばん短いレベルが 2〜4 語なのは、まさにこのためです。「短いために短い」のではなく、音を捉えるのに苦戦しているあいだ、短期記憶に収まるだけ短いのです。
そしていちばん安心させてくれた部分。プロの字幕制作者は、これをずっと前に決着させていました。 BBC Subtitle Guidelines は、字幕を自然な言語的切れ目で区切り、各行がまとまった言語単位をなすことを要求しています。そして避けるべき分割を名指しします。冠詞と名詞、前置詞とそれに続く句、接続詞とそれに続く節、代名詞と動詞。そのうえで節の境界での区切りを推奨しています。
第 2 部で書いた「ここでは絶対に切らない」リストと、ほぼそのまま一致します。偶然ではありません。どちらも同じ源から来ています。英語が語をどうまとめるか、です。私たちは放送の字幕制作者がすでに舗装した道を歩き直していたのであり、それが正しい方向を歩いていると確信させてくれました。
三つの分割レベル — なぜ三つなのか
その裏づけがあると、三つのレベルは恣意的な数字ではなくなります。
| レベル | 大きさ | 根拠 | 向いている場面 |
|---|---|---|---|
| Steady | 2〜4 語 | ワーキングメモリのかたまり上限(≈4±1) | 始めたばかりのとき、速い発話 |
| Natural | 5〜9 語、節ほどの大きさ | イントネーション単位 +「節の境界を優先」 | 日常の練習 |
| Fluent | 文まるごと | 完全な意味単位 | 長い一行を保持できるようになったら |
各レベルはそれぞれの進捗を保つので、レッスンの途中で切り替えても、それまでの成果は失われません。
予定していなかった副産物: 話す練習
意味のかたまりで切ったことで、別のものが開きました。各かたまりがちょうどひと息なので、かたまりごとにシャドーイングできます。息が切れずにかたまりを言い切り、ネイティブが休むところで休めます。
25 語の文をひと息でシャドーイングしようとすると、途中で止まり、誰も切らないところで切ってしまいます。かたまり単位のシャドーイングは別の練習です。個々の単語の発音だけでなく、話される英語のリズムを訓練しています。ひとつの分割が、聞くことと話すことの両方に効いています。
リスニング練習の三段階(聞く → 書き取る → シャドーイング)が初めてなら、以前の記事をどうぞ。この記事は段階 2〜3 にいることを前提にしています。
教訓その一: 分割は言語的な判断であって、割り算ではない。 そして問題が純粋に言語的なとき、いちばんよく解くのは私たちが書くコードではなく、その言語を学んだモデルです。私たちの仕事は、指示を精密に定め、容赦なく検証することです。
第 4 部 — かたまりごとの翻訳: こちらのほうが難しい
分割が解けると、醜い継ぎ目が現れました。4 語のかたまりが、どれも文全体の訳を表示し続けていたのです。"our brain is working" と打っているあいだ、その下に訳が丸ごと一行座っている。冗長であり、しかもまだ聞いていない部分を先に見せてしまう。
「かたまりごとに訳せばいい」は当たり前に聞こえます。けれどそこには互いに衝突する三つの制約があります。
- 断片はそれ自身の意味でなければならない → そのために文全体の文脈が必要。
- けれど文の残りを明かしてはいけない。
- そして隣のかたまりから語を借りてはいけない。
回り道 その 1: 文全体の訳を切り分けて割り当てる
考えは隙がないように思えました。文の訳はすでに正しいのだから、それを各かたまりに分割すればいい。つなぎ戻せば元に戻ります。足すものも失うものもありません。
素直な文では美しく動きました。
"I was appointed six months ago," → 「私は 6 か月前に任命されました、」 "and the more I've spoken about feminism," → 「そしてフェミニズムについて語るほど、」
そしてこの文に当たりました。
"It's an environmental issue which, like the growing amounts of plastic waste, isn't going away."
かたまり "of plastic waste," に割り当てられた訳は、**「プラスチックごみが増え続け、」**でした。
つなぎ戻せば文はなお完璧です。けれど学習者が見つめているのは "of plastic waste" という 4 語で、その意味が「プラスチックごみが増え続け」だと告げられています。"growing" は前のかたまりに属する語です。私たちはたった今、間違ったことを教えました。
細部に注目してください。また "of" です。分割で私たちを壊し、翻訳でも戻ってきて壊しました。
つなぎ戻して正しいことは、一片ずつ正しいことと同じではない。 言語は語順の変え方が違うので、全体として忠実な分割が、局所的には完全に間違っていることがあります。
回り道 その 2: かたまりごとに訳す — けれど文全体の訳も渡してしまう
反省して、各かたまりを単独で訳す方式に変えました。文脈として英語の全文と既存の訳の両方を渡しました。語の選び方の一貫性が保てるはずだ、という理屈です。
結果はこうです。
"of plastic waste," → 「増え続けるプラスチックごみ、」
まだ汚染されています。目の前に出来上がった訳が置かれると、モデルは翻訳をやめて、その訳を分割する作業に戻るからです。取り除こうとしていた松葉杖を、自分の手で渡し直していました。
間違った文脈は、文脈がないより悪い。
実際に効いたこと
文全体の訳を、プロンプトから完全に取り除く。残すのは英語の全文だけで、その用途はただ一つに絞ります。多義語の曖昧さを解くこと。そこに遠慮のない指示を一行。このかたまりの中の語だけを訳せ。別のかたまりに属する語は、ここに現れてはならない。
"of plastic waste," → 「プラスチックごみの、」 ✓ "the growing amounts" → growing が属すべきかたまりに残る
衝突する三つの制約は、役割を分けた瞬間に和解しました。英語の全文は文脈を供給するが、訳されるのはそのかたまり自身の語だけ。
最後の罠: 正しいだけでは足りない、確実に正しくなければならない
最初の版は費用を抑えるため、1 回の呼び出しに 25 文を詰め込んでいました。するとモデルが各文のかたまりの数を数え間違えはじめ、数が合わないとその文が丸ごと無効になります。埋まった率は 137 かたまり中 58。学習者の半分以上が、依然として古い文全体の訳を見ることになります。
ごく平凡な対処を二つ。
- バッチを小さくする — 1 回あたりの項目が減ると、モデルは場所を見失わなくなります。
- 失敗した文だけを単独で再試行する — 1 項目の呼び出しは、ほとんど間違えません。
結果は 137 中 137。そしてその代金を待ち時間で払わないよう、呼び出しは妥当な上限つきで並列に走ります。
第 5 部 — UX: かたまりの訳と、文全体の訳
これだけやったあとで学習者が目にするものは、静かで単純です。
- 各かたまりが自分の訳を表示する。 打ったところまで、ちょうど理解できます。
- 文の最後のかたまりでは、文全体の訳も現れる。 一片と全体の両方が手に入り、しかも何も先に明かされません。文を打ち終えてから届くからです。
- 欠けていれば素直に戻る。 かたまりが 1 つだけの文や、モデルが扱えなかった文は、静かに文全体の訳に戻ります。空白にはなりません。
そして訳はひとつの言語に固定されていません。設定で選んだ母語に従います。いつでも変更できるので、同じレッスンがあなたの言語で表示されます。
残ったこと
歩いた距離を見てください。初期には YouTube の無料字幕に頼っていました。綴りの誤り、句読点の誤り、ときには明確に違う語。そしてリスニング練習にとって最悪だったのは、意味ではなく動画の枠に合わせて行を折り返していたことです。字幕の行がどこで終わるかは、英語ではなく動画プレーヤーが決めていました。
いま同じ動画は次を通ります。AI による文字起こし → 言語学的な裏づけのある三段階の分割 → トークン単位の検証 → 語ごとのタイミング → あなたの母語での、かたまりごとの専用の訳 → うまくいかなかったものの再試行。すべてすでに公開されています — 更新履歴をどうぞ。
費用は何倍にもなりました。動画ごとにモデル呼び出しがはるかに増え、再試行が加わり、言語ごとにさらに掛け算されます。実際に請求が来ます。
けれどこの記事の二つの問題は、どちらも同じ場所から始まりました。すでに動いていたが、これで十分だとは思えなかったもの。 機械的な分割 — 動いていました。かたまりごとに文全体の訳を出すこと — 動いていました。訳を切り分けて割り当てること — 正直、優雅に見えました。
ただ、正しくなかった。そして動くと正しいのあいだの隙間こそ、学習者が実際に感じ取る部分です。
この記事は、たった 1 件のフィードバックから始まりました。冒頭のスクリーンショットです。プロダクトの中に「動いてはいるが、どこかおかしい」と感じるものがまだあれば、送ってください。