Skip to content

Latest commit

 

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

Indonesian Fonem

Riset dan implementasi sistem fonem Bahasa Indonesia untuk keperluan Text-to-Speech (TTS) dan Speech Recognition (ASR).

Repo ini mendokumentasikan perjalanan dari riset linguistik dasar sampai implementasi G2P (Grapheme-to-Phoneme) berbasis rule yang divalidasi terhadap leksikon KBBI.

alt text


Latar Belakang

Artikel awal (2018): Menelisik Komponen Kebahasaan untuk STT dan TTS

Masalah utama Bahasa Indonesia untuk TTS: satu huruf bisa punya beberapa bunyi berbeda dan tidak ada tanda diakritik dalam tulisan standar. Yang paling kritis adalah huruf 'e' yang bisa menjadi tiga bunyi berbeda:

Bunyi Simbol Contoh tulis Lafal
e murni e enak, sore, teh /enak/, /sore/
e terbuka E (/ɛ/) nenek, bebek, ember /nɛnɛk/, /bɛbɛk/
schwa @ (/ə/) gedung, besar, me- /gədung/, /bəsar/

Tidak ada cara menentukan bunyinya hanya dari tulisan tanpa kamus atau konteks.


Phoneset

Phoneset native kirralabs — dirancang untuk pipeline TTS Bahasa Indonesia:

Vokal

Simbol IPA Bunyi Contoh
a /a/ a air, ada
e /e/ e murni enak, sore, teh
E /ɛ/ e terbuka nenek, bebek
@ /ə/ schwa gedung, me-, ber-
i /i/ i indah, tari
I /ɪ/ i lemah kering, tarik
o /o/ o tertutup obat, toko
O /ɔ/ o terbuka tolong, bola
u /u/ u ulir, cucu
U /ʊ/ u lemah taruh, rapuh

Diftong

Simbol Contoh tulis Lafal
ay pantai, intai /pantay/
aw kalau, kau /kalaw/
oy amboi /amboy/
ey mei /mey/

Konsonan

Simbol IPA Bunyi Contoh
b /b/ b buku
c /tʃ/ c cara
d /d/ d duta
f /f/ f fakta
g /g/ g gula
h /h/ h hari
j /dʒ/ j juga
k /k/ k kasih
l /l/ l lama
m /m/ m makan
n /n/ n nakal
N /ŋ/ ng barang, paling
ñ /ɲ/ ny nyanyi, banyak
p /p/ p pintu
r /r/ r raja
s /s/ s sama
S /ʃ/ sy syukur
t /t/ t timpa
v /v/ v visa
w /w/ w wanita
x /x/ kh khas, akhir
y /j/ y yakin
z /z/ z zaman
? /ʔ/ glotal stop tidak→/tida?/, rusak→/rusa?/

Marker prosodi

Simbol Keterangan
sp short pause (antar kata)
sil silence (akhir kalimat)

Fonem Bahasa Indonesia (referensi)

Tabel referensi lengkap dari berbagai sumber (Google, Tata Bahasa Baku, 33 fonem BI):

No Google Tata Bahasa Baku 33 Fonem BI Pelafalan Contoh tulis Contoh lafal
1 a a a a air adik kanvas /air/ /adik/ /kanvas/
2 au aw aw kalau, kau /kalaw/ /kaw/
3 ai ay ay intai /intay/
4 b b b b bukan baru bantal /bukan/ /baru/
5 c c c c cara cari cinta /cara/ /cari/
6 d d d d damai duta /damay/ /duta/
7 e e e e enak sore /enak/ /sore/
8 e e e2 ε nenek bebek /nεnε?/ /bεbεk/
9 e e e3 ə gedung besar /gədung/ /bəsar/
10 ei ey mei /mey/
11 f f f f formal fakta /formal/
12 g g g g gundul ragu /gundul/
13 h h h h harap hari /harap/
14 h ħ lihat /liat/
15 i i i i indah tari /indah/
16 I I I kering tarik /keriŋ/
17 j j j j jumlah juga /jumlah/
18 k k k k kasih sukar /kasih/
19 k k ? rakyat rusak /ra?yat/ /rusa?/
20 k k' politik /politik'/
21 l l l l lama palsu /lama/
22 m m m m mandi makan /mandi/
23 n n n n nanas nakal /nanas/
24 ny ny ny ñ nyanyi banyak /ñañi/ /bañak/
25 ng ng ng ŋ barang pangkat /baraŋ/ /paŋkat/
26 o o o obat toko /obat/ /toko/
27 o o o O tolong bola /tOlong/ /bOla/
28 oi oi oi oy amboi /amboy/
29 p p p p pilih pintu /pilih/
30 p p' sedap tatap /sedap'/
31 r r r r rantai raja /rantay/
32 s s s s suara sama /suara/
33 sy sy sy š syukur /šukur/
34 t t t t taruh timpa /taruh/
35 t t' lompat tempat /lompat'/
36 u u u u ulir cucu /ulir/
37 u u U taruh rapuh /tarUh/
38 v v visa /visa/
39 w w w w wanita waktu /wanita/
40 kh kh kh x khas akhir /xas/ /axir/
41 y y y y karya yakin /karya/
42 z z z zaman ijazah /zaman/

Transformasi Konsonan Kontekstual

Konsonan yang bunyinya berubah tergantung posisi dalam kata:

Huruf Posisi Bunyi Contoh tulis Contoh lafal
b awal/tengah [b] baru, tambal /baru/
b akhir kata [p] implosif adab, peradaban /adap/
d awal/tengah [d] duta, madu /duta/
d akhir kata [t'] implosif tekad, abad /tekat'/
g awal/tengah [g] gula, ragu /gula/
g akhir kata [k] bedug, gudeg /beduk/
h normal [h] hari, rumah /hari/
h antara dua vokal silent/lemah tahu, lihat /tau/, /liat/
k awal/tengah [k] kasih, sukar /kasih/
k akhir kata [?] glotal rusak, tidak /rusa?/, /tida?/
k akhir kata (formal) [k'] politik /politik'/
p akhir kata [p'] implosif sedap, tatap /sedap'/
t akhir kata [t'] implosif lompat /lompat'/

Gugus Konsonan

Kumpulan konsonan dalam satu suku kata yang sama:

Gugus Contoh
/pl/ pleonasme, kompleks, taplak
/bl/ blangko, gemblang
/kl/ klinik, klimaks, klasik
/gl/ global, gladiator
/fl/ flamboyan, flu
/sl/ slogan
/pr/ pribadi, semprot
/br/ brahma, obral
/tr/ tragedi, sastra
/dr/ drama, drastis
/kr/ kristen, akrab
/gr/ gram, grafik
/fr/ fragmen, diafragma
/sr/ pasrah, Sriwijaya
/ps/ psikologi, pseudo
/ks/ ekstra, eksponen
/dw/ dwifungsi, dwibahasa
/sw/ swalayan, swasta
/kw/ kuintal
/sp/ spora, sponsor
/sm/ smokel
/sn/ snobisme
/sk/ skala, skema

Deret Vokal

Deret Contoh
/i u/ tiup, nyiur
/i o/ kios, radio
/i a/ tiap, dia
/e a/ beasiswa, kreasi
/a i/ saing, mainan, kain
/a u/ kaum, mau
/o a/ soal, doa
/u a/ dua, puasa
/ə i/ seikat
/ə e/ seekor
/ə a/ seakan
/ə u/ seutas
/ə o/ seorang

Format Silabel Bahasa Indonesia

Format Contoh
V /a/-ku
KV /bu/-ku, /ra/-gam
VK /im/-an, /in/-dah
VKK /eks/-perimen
KKV /kli/-maks, /kla/-sik
KVK in-/dah/, /gel/-ap
KKVK /prak/-tis
KKKVK /struk/-tur
KKVKK /trans/-migrasi
KVKKK /korps/
KKKV in-/stru/-men

Temuan dari Analisis KBBI (62.715 kata)

Validasi phoneset ini dilakukan terhadap leksikon KBBI 62.715 entri menggunakan pipeline G2P otomatis. Temuan penting:

Ambiguitas vokal 'e'

62,5% kata dalam KBBI mengandung huruf 'e'. Distribusi resolusi:

Status Jumlah Keterangan
Resolved (E atau @) 37.630 Akurat dari diakritik KBBI atau rule jelas
MEDIUM confidence 466 Awalan me-/be-/pe-/se- → schwa jelas
LOW confidence 1.108 Kata daerah/teknis ultra-jarang
Error rate 1.8% Kata yang genuinely ambigu

Pola yang ditemukan

Kata serapan ilmiah/teknis (dominasi LOW confidence):

  • Prefix: pre-, res-, tel-, aer-, ste-, ant-, pal-, dek-
  • Suffix: -asi, -isme, -sis, -bia, -ogi, -mia, -tik
  • 'e' dalam kata serapan hampir selalu e murni /e/, bukan schwa

Rule loanword detection yang dikembangkan dari analisis ini:

  1. Pola konsonan asing (ph, th, str, sch, dh)
  2. Panjang kata > 11 karakter → hampir pasti teknis
  3. Suffix ilmiah: -asi, -isme, -sis, -bia, dll
  4. Kata dimulai a + konsonan, panjang > 4 → serapan
  5. Kata ae- (Yunani: aerob, aeolus) → serapan

Diakritik KBBI sebagai ground truth

Field lafal dalam data KBBI menggunakan diakritik yang secara eksplisit menyelesaikan ambiguitas 'e':

Diakritik Bunyi Contoh KBBI
è /ɛ/ e terbuka absèn → /absEn/
ê /ə/ schwa adêm → /ad@m/
é /e/ murni aboné → /abOne/

Hanya 23% entri KBBI yang memiliki lafal eksplisit — selebihnya membutuhkan heuristik atau loanword detection.


Implementasi

Rule-based G2P ini diimplementasikan sebagai bagian dari pipeline TTS Bahasa Indonesia:

styletts2-id/
├── g2p/
│   ├── rules.py          # Rule fonem (repo ini)
│   ├── converter.py      # G2P orchestrator
│   └── data/
│       └── lexicon.json  # 62.715 kata dari KBBI
├── preprocessing/
│   └── pipeline.py       # Audio preprocessing
└── ...

kbbi-lexicon-builder/
├── tts_lexicon_builder.py  # Ekstrak KBBI → lexicon
└── lexicon_audit.py        # Audit kualitas

Alur konversi:

Teks BI
  ↓
Lookup lexicon KBBI (62.715 kata, akurat)
  ↓ tidak ditemukan
Rule-based heuristik (rules.py)
  ↓
Phoneme sequence → StyleTTS2 / Piper TTS

Referensi

Sumber lihat bagian akhir artikel

Releases

Packages

Contributors