Piper Plus の音素体系と ID マッピングのリファレンス。
音素変換は Phonemizer ABC + 言語レジストリ で管理される。
テキスト → registry.get_phonemizer(language) → phonemize() → phoneme_ids → モデル
Phonemizer抽象基底クラス (piper_plus_g2p/base.py)- 言語レジストリ (
piper_plus_g2p/registry.py) に各言語が自動登録 PhonemizerABC はphonemize()とphonemize_with_prosody()を定義し、各言語サブクラスがこれを実装get_phoneme_id_map()はpiper_plus_g2p/encode/id_maps.pyのスタンドアロン関数- 音素列への BOS/EOS/パディング付与は
piper_plus_g2p/encode/encoder.pyのPiperEncoderクラス内部で処理される
ソース: piper_plus_g2p/encode/id_maps.py, piper_plus_g2p/encode/pua.py
| ID | トークン | 用途 |
|---|---|---|
| 0 | _ |
短ポーズ / パディング |
| 1 | ^ |
文頭 (BOS) |
| 2 | $ |
文末・平叙文 (EOS) |
| 3 | ? |
文末・疑問文 (汎用) |
| 4 | ?! |
文末・強調疑問 (Issue #204) |
| 5 | ?. |
文末・平叙疑問 (Issue #204) |
| 6 | ?~ |
文末・確認疑問 (Issue #204) |
| 7 | # |
アクセント句境界 |
| 8 | [ |
ピッチ上昇マーク |
| 9 | ] |
ピッチ下降マーク (アクセント核) |
| 種類 | 音素 | 説明 |
|---|---|---|
| 有声母音 | a i u e o |
通常の母音 |
| 無声化母音 | A I U E O |
大文字で表記。例: です → d e s U |
| 長母音 | a: i: u: e: o: |
PUA マッピングで1文字化 |
後続音に応じて文脈依存の異音に変換される。
| 音素 | 条件 | 例 |
|---|---|---|
N |
汎用 (後方互換用) | — |
N_m |
m/b/p の前 (両唇音同化) | さんぽ → s a N_m p o |
N_n |
n/t/d/ts/ch の前 (歯茎音同化) | あんない → a N_n n a i |
N_ng |
k/g の前 (軟口蓋音同化) | ぎんこう → g i N_ng k o o |
N_uvular |
語末・母音の前 (口蓋垂音) | ほん → h o N_uvular |
| 音素 | 説明 |
|---|---|
cl |
促音 / 閉鎖 |
q |
促音 (別表記) |
| 分類 | 音素 |
|---|---|
| 破裂音 | k ky kw g gy gw t ty d dy p py b by |
| 破擦音・摩擦音 | ch ts s sh z j zy f h hy v |
| 鼻音・接近音 | n ny m my r ry w y |
複数文字音素を Unicode PUA (U+E000〜) の1コードポイントにマッピングし、内部で1文字として処理する。 固定割り当ては U+E000〜U+E061 の範囲で、U+E062 以降は動的割り当て用に予約されている。
ソース: piper_plus_g2p/encode/pua.py の FIXED_PUA_MAPPING
注意: PUA コードポイントは学習済みモデルに埋め込まれている。既存の割り当てを変更してはならない。
| トークン | PUA | 説明 |
|---|---|---|
a: |
U+E000 | 長母音 |
i: |
U+E001 | 長母音 |
u: |
U+E002 | 長母音 |
e: |
U+E003 | 長母音 |
o: |
U+E004 | 長母音 |
cl |
U+E005 | 促音 |
ky |
U+E006 | 口蓋化子音 |
kw |
U+E007 | 唇音化子音 |
gy |
U+E008 | 口蓋化子音 |
gw |
U+E009 | 唇音化子音 |
ty |
U+E00A | 口蓋化子音 |
dy |
U+E00B | 口蓋化子音 |
py |
U+E00C | 口蓋化子音 |
by |
U+E00D | 口蓋化子音 |
ch |
U+E00E | 破擦音 |
ts |
U+E00F | 破擦音 |
sh |
U+E010 | 摩擦音 |
zy |
U+E011 | 摩擦音 |
hy |
U+E012 | 口蓋化子音 |
ny |
U+E013 | 鼻音 |
my |
U+E014 | 鼻音 |
ry |
U+E015 | 流音 |
?! |
U+E016 | 強調疑問マーカー (Issue #204) |
?. |
U+E017 | 平叙疑問マーカー (Issue #204) |
?~ |
U+E018 | 確認疑問マーカー (Issue #204) |
N_m |
U+E019 | 撥音・両唇音同化 (Issue #207) |
N_n |
U+E01A | 撥音・歯茎音同化 (Issue #207) |
N_ng |
U+E01B | 撥音・軟口蓋音同化 (Issue #207) |
N_uvular |
U+E01C | 撥音・口蓋垂音 (Issue #207) |
複数言語で共有されるトークン。
| トークン | PUA | 説明 |
|---|---|---|
rr |
U+E01D | 歯茎ふるえ音 (ES スペイン語の巻き舌 r) |
y_vowel |
U+E01E | 円唇前舌狭母音 [y] (ZH ピンイン ü / FR lune) |
U+E01F は未使用 (予約ギャップ)。
ソース: piper_plus_g2p/chinese.py, chinese_phonemize.cpp
| トークン | PUA | 説明 |
|---|---|---|
pʰ |
U+E020 | 有気両唇破裂音 (ピンイン p) |
tʰ |
U+E021 | 有気歯茎破裂音 (ピンイン t) |
kʰ |
U+E022 | 有気軟口蓋破裂音 (ピンイン k) |
tɕ |
U+E023 | 歯茎硬口蓋破擦音 (ピンイン j) |
tɕʰ |
U+E024 | 有気歯茎硬口蓋破擦音 (ピンイン q) |
tʂ |
U+E025 | そり舌破擦音 (ピンイン zh) |
tʂʰ |
U+E026 | 有気そり舌破擦音 (ピンイン ch) |
tsʰ |
U+E027 | 有気歯茎破擦音 (ピンイン c) |
ɕ (U+0255), ʂ (U+0282), ɻ (U+027B) は単一コードポイントのため PUA 不要。
| トークン | PUA | 説明 |
|---|---|---|
aɪ |
U+E028 | (ピンイン ai) |
eɪ |
U+E029 | (ピンイン ei) |
aʊ |
U+E02A | (ピンイン ao) |
oʊ |
U+E02B | (ピンイン ou) |
| トークン | PUA | 説明 |
|---|---|---|
an |
U+E02C | (ピンイン an) |
ən |
U+E02D | (ピンイン en) |
aŋ |
U+E02E | (ピンイン ang) |
əŋ |
U+E02F | (ピンイン eng) |
uŋ |
U+E030 | (ピンイン ong) |
| トークン | PUA | 説明 |
|---|---|---|
ia |
U+E031 | (ピンイン ia/ya) |
iɛ |
U+E032 | (ピンイン ie/ye) |
iou |
U+E033 | (ピンイン iu/you) |
iaʊ |
U+E034 | (ピンイン iao/yao) |
iɛn |
U+E035 | (ピンイン ian/yan) |
in |
U+E036 | (ピンイン in/yin) |
iaŋ |
U+E037 | (ピンイン iang/yang) |
iŋ |
U+E038 | (ピンイン ing/ying) |
iuŋ |
U+E039 | (ピンイン iong/yong) |
| トークン | PUA | 説明 |
|---|---|---|
ua |
U+E03A | (ピンイン ua/wa) |
uo |
U+E03B | (ピンイン uo/wo) |
uaɪ |
U+E03C | (ピンイン uai/wai) |
ueɪ |
U+E03D | (ピンイン ui/wei) |
uan |
U+E03E | (ピンイン uan/wan) |
uən |
U+E03F | (ピンイン un/wen) |
uaŋ |
U+E040 | (ピンイン uang/wang) |
uəŋ |
U+E041 | (ピンイン ueng/weng) |
注意: ü 系は共有トークン
y_vowel(U+E01E) を基本母音として使用する。
| トークン | PUA | 説明 |
|---|---|---|
yɛ |
U+E042 | (ピンイン üe/yue) |
yɛn |
U+E043 | (ピンイン üan/yuan) |
yn |
U+E044 | (ピンイン ün/yun) |
| トークン | PUA | 説明 |
|---|---|---|
ɻ̩ |
U+E045 | 成節そり舌音 (zhi/chi/shi/ri の韻母) |
ɨ (U+0268) は単一コードポイントのため PUA 不要。
| トークン | PUA | 説明 |
|---|---|---|
tone1 |
U+E046 | 阴平 (高平調) |
tone2 |
U+E047 | 阳平 (上昇調) |
tone3 |
U+E048 | 上声 (低下上昇調) |
tone4 |
U+E049 | 去声 (下降調) |
tone5 |
U+E04A | 轻声 (軽声) |
ソース: piper_plus_g2p/korean.py, korean_phonemize.cpp
pʰ/tʰ/kʰ/tɕ/tɕʰ は ZH と共有 (同一 PUA コードポイント)。
| トークン | PUA | 説明 |
|---|---|---|
p͈ |
U+E04B | 濃音両唇破裂音 (ㅃ) |
t͈ |
U+E04C | 濃音歯茎破裂音 (ㄸ) |
k͈ |
U+E04D | 濃音軟口蓋破裂音 (ㄲ) |
s͈ |
U+E04E | 濃音歯擦音 (ㅆ) |
t͈ɕ |
U+E04F | 濃音歯茎硬口蓋破擦音 (ㅉ) |
| トークン | PUA | 説明 |
|---|---|---|
k̚ |
U+E050 | 内破軟口蓋音 |
t̚ |
U+E051 | 内破歯茎音 |
p̚ |
U+E052 | 内破両唇音 |
U+E053 は未使用 (予約ギャップ)。
ソース: piper_plus_g2p/spanish.py, piper_plus_g2p/portuguese.py
| トークン | PUA | 説明 |
|---|---|---|
tʃ |
U+E054 | 無声後部歯茎破擦音 (ES ch / PT 口蓋化 t) |
dʒ |
U+E055 | 有声後部歯茎破擦音 (EN JH / PT 口蓋化 d) |
ソース: piper_plus_g2p/french.py, french_phonemize.cpp
| トークン | PUA | 説明 |
|---|---|---|
ɛ̃ |
U+E056 | 鼻母音・非円唇前舌半広母音 (vin, pain) |
ɑ̃ |
U+E057 | 鼻母音・非円唇後舌広母音 (France, temps) |
ɔ̃ |
U+E058 | 鼻母音・円唇後舌半広母音 (bon, nom) |
ソース: piper_plus_g2p/swedish.py
スウェーデン語の長母音は Complementary Quantity (相補的長短) に基づき、ストレスのある開音節で長母音が出現する。各長母音は2コードポイント (母音 + ː) のため PUA マッピングが必要。
| トークン | PUA | 説明 |
|---|---|---|
iː |
U+E059 | 非円唇前舌狭長母音 (例: vi, liten) |
yː |
U+E05A | 円唇前舌狭長母音 (例: ny, syster) |
eː |
U+E05B | 非円唇前舌半狭長母音 (例: se, leva) |
ɛː |
U+E05C | 非円唇前舌半広長母音 (例: häl, läsa — ä の長音) |
øː |
U+E05D | 円唇前舌半狭長母音 (例: öl, söka — ö の長音) |
ɑː |
U+E05E | 非円唇後舌広長母音 (例: far, tala — a の長音) |
oː |
U+E05F | 円唇後舌半狭長母音 (例: mor, lov — å の長音, o 例外語) |
uː |
U+E060 | 円唇後舌狭長母音 (例: o のデフォルト長音, hus) |
ʉː |
U+E061 | 円唇中舌狭長母音 (例: hus, ljus — u の長音) |
| 範囲 | 用途 |
|---|---|
| U+E000〜U+E01C | 日本語 (JA) — 29エントリ |
| U+E01D〜U+E01E | 共有 (Shared) — 2エントリ |
| U+E01F | 未使用 (予約ギャップ) |
| U+E020〜U+E04A | 中国語 (ZH) — 43エントリ |
| U+E04B〜U+E052 | 韓国語 (KO) — 8エントリ |
| U+E053 | 未使用 (予約ギャップ) |
| U+E054〜U+E055 | スペイン語/ポルトガル語 (ES/PT) — 2エントリ |
| U+E056〜U+E058 | フランス語 (FR) — 3エントリ |
| U+E059〜U+E061 | スウェーデン語 (SV) — 9エントリ |
| U+E062〜 | 動的割り当て用 (予約) |
ソース: piper_plus_g2p/english.py
G2P エンジン: g2p-en (Apache-2.0) — espeak-ng (GPL) 不要
| ARPAbet | IPA | ARPAbet | IPA |
|---|---|---|---|
| AA | ɑ | N | n |
| AE | æ | NG | ŋ |
| AH | ʌ (stress>0), ə (stress=0) | OW | oʊ |
| AO | ɔː | OY | ɔɪ |
| AW | aʊ | P | p |
| AY | aɪ | R | ɹ |
| B | b | S | s |
| CH | tʃ | SH | ʃ |
| D | d | T | t |
| DH | ð | TH | θ |
| EH | ɛ | UH | ʊ |
| ER | ɚ (stress=0), ɜː (stress=1) | UW | uː |
| EY | eɪ | V | v |
| F | f | W | w |
| G | ɡ | Y | j |
| HH | h | Z | z |
| IH | ɪ | ZH | ʒ |
| IY | iː | ||
| JH | dʒ | ||
| K | k | ||
| L | l | ||
| M | m |
| パターン | 変換 | 例 |
|---|---|---|
| AA + R | ɑːɹ | car → kɑːɹ |
| ER (stress=1) | ɜː | bird → bɜːd |
| AH (stress=0) | ə | about → əbaʊt |
| 記号 | 意味 |
|---|---|
ˈ |
第1ストレス (母音の前に挿入) |
ˌ |
第2ストレス (母音の前に挿入) |
機能語 (a, the, are, you 等 75語) はストレスが自動除去される。
英語では espeak-ng 互換のため、EnglishPhonemizer.post_process_ids() が以下を行う:
- 各音素 ID の間にパディング (
_, ID=0) を挿入 - 先頭に BOS (
^) + パディング を付加 - 末尾に EOS (
$) を付加
日本語ではこの後処理は行われない (音素列がそのまま使用される)。
両言語で ProsodyInfo(a1, a2, a3) を生成するが、意味が異なる。
| フィールド | 日本語 | 英語 |
|---|---|---|
a1 |
アクセント核からの相対位置 | 固定 0 |
a2 |
アクセント句内のモーラ位置 (1-based) | ストレスレベル (0=なし, 1=第2, 2=第1) |
a3 |
アクセント句内の総モーラ数 | 単語内の音素数 |
- テキストを
registry.get_phonemizer(language)で音素列に変換 - 複数文字音素を PUA コードポイントにマッピング (
piper_plus_g2p/encode/pua.py) phoneme_id_map(config.json 由来) で各音素を ID に変換post_process_ids()で言語固有の後処理 (英語: BOS/EOS/パディング)- ID 列をモデルに入力
日本語の phoneme_id_map は piper_plus_g2p/encode/id_maps.py で自動生成される。
英語は学習済みモデルの config.json に含まれる phoneme_id_map を使用する。