正しく発音する:TTS のためのポルトガル語異音同綴語の曖昧性解消
テキスト読み上げ音声が「Tenho sede」を読むとき、ポルトガル語の聞き手は渇きが聞こえることを期待します。しかしまったく同じ綴り sede は、本部も意味することができ — その二つは異なる母音で発音されます。間違った母音で言うと、音声は単に変に聞こえるだけでなく、別の単語を声に出してしまいます。画面を読み上げてもらうために TTS に頼っている人にとって、それは理解できるものと混乱を招くものとの境界線です。
これはフロントエンドの問題です — どの単語がどの音に対応するかを決める書記素から音素への段階であり、ニューラルボコーダがそれらの音を音声に変えるずっと前のことです。ボコーダの品質をどれだけ高めてもこれは直せません。フロントエンドが間違った発音を選べば、音声は間違った単語を、くっきりと発音します。
異音同綴語:同じ綴り、異なる音、異なる意味
ヨーロッパポルトガル語には、同一に綴られながら異なる母音の質 — 開いた母音対閉じた母音 — で発音される単語があふれており、正しい選択は単なる文法ではなく意味に依存します。いくつか例を挙げます。
sede— 渇き(閉じた e、ˈsedɨ)対 本部/所在地(開いた e、ˈsɛdɨ)。どちらも名詞です。forma— 型 / 焼き型(閉じた o、ˈfoɾmɐ、fôrma と書かれる)対 形 / 方法(開いた o、ˈfɔɾmɐ)。molho— ソース(閉じた o)対 束(開いた o)。corte— 王宮(閉じた o)対 切ること(開いた o)。
素朴な TTS システムは、綴りごとに一つの発音にコミットします。ですから渇きを本部の母音で読み — 毎回 — 聞き手は間違った単語を聞きます。
「品詞をタグ付けするだけ」ではうまくいかない理由
明白な修正策は、文に品詞(POS)タガーを走らせ、POS によって発音を選ぶことです。それはいくつかのペアには役立ちますが、二つの意味が品詞を共有するときにはいつでも構造的に失敗します。
再び sede を取り上げましょう。渇きと本部はどちらも名詞です。POS タガーはそれらを同一にラベル付けします — それらを区別する文法的な信号はありません — ので、より一般的な読みを推測することしかできません。私たちはまさにこれを測定しました。私たちのテストセットでは、spaCy と Stanza の両方が sede の渇きの語義で 0% を記録します。それらは常に本部を選びます。同じ構造的な天井は corte(切ること対王宮)、forma(型対形)、molho(ソース対束)にも現れます。意味が単一の品詞の中で分かれるとき、文法にはそれが見えません。
データセット:文法ではなく意味をラベル付けする
そこで私たちは、実際に重要なもの — 意味 — をラベル付けするオープンなデータセットを構築しました。bifonia-pt-homographs は、27 の異音同綴語をカバーする 56,891 のヨーロッパポルトガル語の文です。すべての文には単語、その意味(語義)、品詞、IPA 発音、そして意図された読みをページ上で明確にする発音区別符号を復元した形式(例えば sêde 対 séde)がラベル付けされています。
バケットのキーは意味です — それこそがすべての要点です。単一のレコードは次のようになります。
{
"word": "sede",
"sense": "thirst",
"pos": "NOUN",
"ipa": "ˈsedɨ",
"sentence": "Depois da corrida tinha tanta sede que bebi um litro de água."
}
発音は推測されたのではなく infopédia 辞書(Porto Editora)と照合して検証され、train/test の分割は (word, meaning) ごとに層化されているので、下流のモデル — たとえば BiLSTM — がすべての語義を両方の半分で見ることになります。これは Hugging Face 上で TigreGotico/bifonia-pt-homographs として公開されています。
どこまで解けるのか?
意味ラベル付きのデータがあれば、異なるアプローチが正しい意味 — したがって正しい発音 — を選ぶのにどれだけうまくいくかを測定できます。
| アプローチ | 正確度 |
|---|---|
| 常に最も一般的な語義を推測する | 約 53% |
| spaCy POS → 意味 | 約 66% |
| Stanza POS → 意味 | 約 75% |
bifonia ルール + 意味リゾルバ | 約 94% |
POS ベースのアプローチは、まさに予想通りのところで頭打ちになります。それらは文法によってルーティングできますが、決して意味によってはできないので、名詞内の分岐は手の届かないところにあります。私たちのリゾルバ — 軽量で完全に依存関係のない bifonia ライブラリ — は 約 94% に達し、決定的なことに、POS タガーが 0% を記録する sede/渇きのケースで 100% を達成します。
見出しは数字だけではありません。それは、小さく、高速で、完全にオープンなコンポーネントが、このタスクで重量級のニューラル POS タガーを打ち負かすということです — なぜならそれは単なる文法ではなく意味を解決するからです。GPU なし、モデルのダウンロードなし、ネットワーク呼び出しなし。
なぜ重要なのか
正しい発音は化粧的ではなく基礎的です。スクリーンリーダーと音声アシスタントは、視覚障害者や音声のみのユーザーが世界を読む方法であり、一般的な単語を誤発音するフロントエンドは、触れるすべての文を静かに劣化させます。異音の曖昧性解消をその源で修正することは、音声がテキストの意味するところを言うことを意味します。
データセットがオープンでリゾルバが小さくフォーク可能なので、ポルトガル語 TTS フロントエンドを構築する誰もが、巨大なモデルなしにこれを正しく行えます — そして同じアプローチは、開いた/閉じた母音の区別が同じ罠を作るガリシア語のような関連言語にもきれいに移植できます。ラベル付きデータは二重の役割も果たします。それはまさに、コーパスを持ち、ルールベースのものと並んで学習されたリゾルバを望むチームのために、単語ごとの分類器のようなコンパクトな統計モデルを学習させるのに必要なものです。
試してみる
データセットは Hugging Face の TigreGotico/bifonia-pt-homographs にあり、リゾルバは bifonia にあります。これは ポルトガル語のための古典的 NLP と 350 以上の言語のための書記素から IPA へのスタック の背後にある、より広範なポルトガル語音声学の作業に組み込まれています — 話者が実際にそうするように言語を発音させる、小さく決定論的な部品です。