Bab 4 T.2.2
Bab 4 T.2.2
4.1 Implementasi
Sistem yang dirancang merupakan “Sistem sintesa ucapan alami Bahasa
Melayu Pontianak berbasis HMM-based Speech Synthesis System (HTS)” berbasis
web yang bertujuan untuk mensintesa suara ucapan dari masukan berupa teks.
Antarmuka sistem yang dirancang terdiri dari dua yaitu halaman utama / beranda
dan halaman keterangan. Adapun hasil implementasinya sebagai berikut:
4.1.1 Antarmuka sistem
Antarmuka merupakan sebuah sarana bagi pengguna untuk menggunakan
beberapa fitur atau fungsi yang ditawarkan oleh sistem. Antarmuka memiliki
beberapa bagian secara umum yaitu bagian navigasi, bagian isi dan beberapa
bagian lain seperti footer. Bagian navigasi berfungsi untuk menampilkan beberapa
link untuk menuju halaman lain dan bagian isi yang berfungsi untuk
menyampaikan informasi atau menampilkan fitur dari sistem.
Antarmuka sistem sintesa ucapan alami bahasa Melayu Pontianak berupa
halaman web yang terdiri dari beberapa menu yaitu beranda, dan keterangan.
Setiap halaman web memiliki fungsi berbeda-beda.
69
70
tersebut tidak akan diproses atau dihilangkan oleh sistem. Bagian daftar format
berisi tentang daftar format teks yang memiliki makna tertentu yang dikonversi
sistem sehingga dapat diucapkan sesuai dengan makna yang dimaksud seperti
format tanggal atau format nominal angka.
Tidak semua tanda baca dan simbol atau juga disebut dengan token akan
dikonversikan pada sistem sintesa. Token yang diproses oleh sistem dapat dilihat
pada tabel 3.1. Penghapusan token terdiri dari penghapusan token yang tidak
ditanganin oleh sistem dan menghapus token yang berlebihan. Pencarian,
substitusi dan penghapusan token dilakukan dengan menggunakan ekpresi regular
atau regex (regular expression). Terdapat dua implementasi penghapusan token
tertentu yang masing-masing dapat dilihat pada kode program 4.1 dan 4.2.
Kode program 4.1 Penghapusan token yang tidak ditanganin oleh sistem
1. $text = preg_replace("/[^A-Z|a-z|\d|\&|\
+|\=|\>|\<|\@|\s|\-|\~|\.|\:|\,|\'|\/|\n|\r]/", " ", $text)
Pada kode program 4.2, teks hasil masukan pengguna disaring dengan
menggunakan fungsi preg_replace() sehingga hasil masukan pengguna hanya
terdiri dari token yang ditanganin oleh sistem. Kode program 4.2 ditulis dalam
bahasa pemrograman PHP. Proses pengolahan teks selanjutkan akan ditulis dalam
bahasa pemrograman Python.
Kode program 4.2 Penghapusan token berlebihan
1. special_tokens = ["\&", "\+", "\=", '\>', '\<', '\@', "\/"]
2. default_tokens = ["\s",'\-','\~', '\.', "\:", '\,', "\'","\/"]
+ special_tokens
3.
4. def rmDblToken(text, tokens):
5. for token in tokens:
6. tmp = token
7. regex = r"({0}{0}+)"
8. text = re.sub(regex.format(token), (" " if token ==
"\s" else token[1:]), text)
9. normal_text = text
10. return normal_text
Pada kode program 4.2, token direpresentasi dalam bentuk larik dan setiap
token akan dibuat sebuah pola (pattern) regex. Contoh pola yang dihasilkan untuk
token “-“ adalah “ \-\-+ dan berikut beberapa penjelasan terkait pola tersebut:
1. Meta karakter \s bermakna spasi,
2. tanda garis miring terbalik atau backslash (\) berfungsi untuk
meloloskan karakter setelah garis miring,
3. tanda (+) bermakna kemuculan pola terkait minimal 1 kali atau lebih.
74
Setelah teks yang sesuai pola tersaring, pola akan disubstitusikan dengan
token terkait sehingga token yang berlebihan akan dapat dihapus. Contoh hasil
kalimat yang telah melalui prose penghapusan token tertentu dapat dilihat pada
tabel 4.2.
Tabel 4.2 Contoh kalimat hasil penghapusan token tertentu
No. Jenis kalimat Hasil perubahan
1. A “ saye& die pegi same - same ke kapal klotok pada
tanggal - 12-09-2012 12:30 12 kali”
2. B “ nomor undian 12-01-2-3-4-66-55555. Silehkan ambek
duitnye di kantor A.”
3. C “duit saye ,sisak 10.000 rupiah>dari kemaren. Habes
dari pantai”
Pada kode program 4.3, terdapat dua pola yang digunakan. Pola pertama
untuk dua token yaitu koma (,) dan titik (.) karena kedua token tersebut dapat
bermakna sebagai tanda akhir dari kalimat. Pola pada kedua token tersebut adalah
“semua tanda titik atau koma yang berada diakhir kalimat atau diakhiri oleh
spasi”. Sedangkan pola kedua adalah token selain untuk format tanggal, waktu
dan angka.
75
Setelah teks yang sesuai pola tersaring, pola akan disubstitusikan dengan
token terkait dengan spasi diantara token tersebut. Contoh kalimat hasil
penambahan spasi pada token dapat dilihat pada tabel 4.3.
Tabel 4.3 Contoh kalimat hasil penambahan spasi pada token
No. Jenis kalimat Hasil perubahan
1. A “ saye & die pegi same - same ke kapal klotok pada
tanggal - 12-09-2012 12:30 12 kali”
2. B “ nomor undian 12 - 01 - 2 - 3 - 4 - 66 – 55555 .
Silehkan ambek duitnye di kantor A .”
3. C “duit saye , sisak 10.000 rupiah > dari kemaren . habes
dari pantai”
4.2.1.3 Tokenisasi
Tokenisasi adalah proses memecahkan sebuah teks menjadi bagian yang
lebih kecil atau token. Tokenisasi pada umumnya menggunakan spasi sebagai
pemisah. Token yang dihasilkan berupa kata, tanda baca atau simbol.
Implementasi tokenisasi dapat dilihat pada kode program 4.4. Pada python, teks
dapat ditokenisasi dengan menggunakan fungsi split(). Contoh kalimat hasil
tokenisasi dapat dilihat pada tabel 4.4.
Kode program 4.4 Tokenisasi dan konversi teks
1 def checkRegex(text, format_regex):
2 regex = r"({})"
3 pattern = str.join("|", format_regex)
4 return re.match(regex.format(pattern), text) is not None
5
6 def convertToWord(text):
7 convert_text = []
8 for normal in text.split(" "):
9 if(checkRegex(normal, format_date) and isDate(normal)):
10 convert_text.append(dateToStr(normal))
11 elif(checkRegex(normal, format_time) and
isTime(normal)):
12 convert_text.append(timeToStr(normal))
13 elif(checkRegex(normal, format_num)):
14 convert_text.append(currNumToStr(normal))
15 elif(checkRegex(normal, format_text)):
16 convert_text.append(normal)
17 else:
18 tmp = numToStr(normal)
76
19 tmp = convertToken(tmp)
20 convert_text.append(tmp)
21 return addSpace(rmDblToken(str.join(" ", convert_text),
default_tokens))
Format tanggal diubah menjadi pola regex. Setelah teks sesuai pola
tersaring, pola akan dicek kembali dengan menggunakan fungsi strptime dari
modul datetime dari python. Pengecekan kembali dilakukan untuk mengecek isi
dari teks yang telah tersaring. Setelah pengecekan, teks akan diubah secara
manual menjadi teks. Implementasi konversi tanggal dapat dilihat pada kode
program 4.5. Contoh hasil konversi tanggal dapat dilihat pada kalimat A di tabel
4.5.
Kode program 4.5 Pola regex untuk konversi tanggal
1 format_date =
['^\d{1,2}\/\d{1,2}\/\d{4}$','^\d{1,2}\-\d{1,2}\-\d{4}$',
'^\d{1,2}\/\d{4}$', '^\d{1,2}-\d{4}$']
2 format_time = ['^\d{1,2}\:\d{2}', '^\d{1,2}$\:\d{2}:\d{2}$']
Kode program 4.7 Pola regex untuk konversi angka sesuai dengan nominal
78
1 format_num = ['^(?:[1-9]{1}\d{0,2})(?:\.\d{3})*(?:\,\d+)*$',
'^(?:[1-9]{1}\d{0,2})(?:\,\d{3})*(?:\.\d+)*$', '^([1-9]
{1}\d{0,3})$']
15 if(not findLex(word)):
16 if(len(re.findall(regex, word)) > 0):
17 pronounces[word] = re.findall(regex, word)
18 return pronounces, converted_words
∑ x (i). k
MOS= i=0
N
86
x 1 + x 2+. . .+ x 10
MOS=
10
3+ 2+ 2+ 3+3+2+3+3+2+2
MOS=
10
25
MOS= =2.5
10
Hasil MOS yang didapatkan dari responden nomor 1 untuk korpus latih 1
adalah 2.5. Nilai MOS ini akan dikonversi menjadi skala ITU-800.1. Contoh hasil
konversi MOS pada pendengar satu untuk korpus latih 100 kalimat adalah sebagai
berikut:
5
MOS ITU− P .800 .1= MOS
4
5
MOS ITU− P .800 .1= x 2.5
4
5
MOS ITU− P .800 .1= x 2.5=3.125
4
Hasil MOS dari responden nomor 1 untuk korpus latih 1 adalah 3.125
(cukup). Konversi dapat dilakukan setelah MOS pada satu skema dirata-ratakan
atau dikonversi terlebih dahulu kemudian dirata-ratakan. Cara perhitungan nilai
CMOS sama dengan MOS. Hasil rata-rata MOS dan CMOS semua respoden
untuk semua variasi hasil sintesa dapat dilihat pada tabel 4.10.
Tabel 4.10 Hasil pengujian MOS dan CMOS
Variasi hasil sintesa
Pengujian X Y Z
MOS 2.9375 3.5 3.55
CMOS 3.2 3.4625 3.5
4.3.3 Pengujian AB
Pengujian AB bertujuan untuk memilih hasil sintesa yang terbaik dari
variasi hasil sintesa yang ada. Pengujian AB dilakukan dengan memberi pilihan
kepada responden dan menghitung rata-rata pilihan dari pilih responden setiap
variasi. Hasil pengujian AB dapat dilihat pada tabel 4.11.
Tabel 4.11 Hasil pengujian AB
Persentase
Jumlah pemilihan per kalimat total
(%)
Variasi 1 2 3 4 5 6 7 8 9 10
87
Sintesa
X 0 23 19 17 13 1 1 1 2 1 78 26
Y 5 5 0 7 8 3 23 12 10 16 89 29.67
Z 25 2 11 6 9 26 6 17 18 13 133 44.33
Total data 300 100%
4.3.4 Pengujian WER
Pengujian WER berupa pengujian dikte atau menulis kembali apa yang
telah diperdengarkan. Hasil pengujian WER dapat dilihat pada lampiran N.
Perhitungan WER menggunakan rumus 3.3 dan akurasi WER menggunakan
rumus 3.4. Contoh perhitungan WER pada responden nomor 1 untuk variasi hasil
sintesa B untuk urutan kalimat 1 adalah sebagai berikut:
K0 = “Mampu die ngasi motipasi masyarakat e supaye teros kerje keras
K1 = “mampu die kasi motipasi masalah supaye teros kerje keras”
Nr = [“mampu”, “die”, “ngasi”, “motipasi”, “masyarakat”, “e”, “supaye”,
“teros”, “kerje”, “keras”] = 10
I = [] = 0
S = [“masalah” => “masyarakat”] = 1
D = [“e”] = 1
S+ D+ I 1+ 0+1 2
WER= = = =0.2 AkurasiWER=1−0.2=0.8=80 %
Nr 10 10
Hasil perhitungan akurasi WER yang didapatkan oleh responden nomor 1
untuk variasil hasil sintesa B untuk urutan kalimat 1 adalah 0.8 atau 80 %. Hasil
Akurasi WER semua responden untuk semua variasi hasil sintesa dapat dilihat
pada tabel 4.12.
Tabel 4.12 Hasil pengujian WER
Variasi hasil sintesa (dalam %)
Pengujian X Y Z
Akurasi WER 26.790 56.376 64.572
telah definisikan sesuai tabel 3.3, kecuali pembunyian ucapan pada fonem
tertentu dan format tanggal. Bunyi fonem e dan ǝ yang dihasilkan tidak selalu
sama dengan bunyi fonem yang sesuai dengan teks masukan pengguna.
Ambiguitas yang terjadi disebabkan pemodelan suara yang statistik sehingga
suara yang dihasilkan tergantung terhadap probabilitas urutan fonem dan
informasi prosodi. Sedangkan pada konversi format tanggal, teks yang
dihasilkan akan secara standar dikonversi sesuai format pertama yaitu dd-
mm-yyyy dan dd/mm/yyyy sehingga ketika format tanggal yang diharapkan
adalah mm-dd-yyyy, hasil konversi tidak sesuai dengan format yang
diharapkan.
2. Hasil pengujian MOS pada variasi hasil sintesa x, y dan z adalah 2.9 (cukup
buruk), 3.5 (cukup / sedang) dan 3.55 (cukup / sedang). Hasil pengujian MOS
dapat dilihat pada tabel 4.10. Hasil MOS tertinggi adalah variasi hasil sintesa
z dengan jumlah korpus latih 300 kalimat dan terendah adalah variasi hasil
sintesa x dengan jumlah korpus latih 100 kalimat. Kualitas suara yang diuji
pada pengujian MOS adalah tingkat kealamian dimana penilaian secara
subjektif diberikan oleh responden. Berdasarkan hasil pengujian MOS,
semakin banyak korpus latih maka semakin tinggi tingkat kealamian hasil
sintesa.
3. Hasil pengujian CMOS pada variasi hasil sintesa x, y dan z adalah 3.2 (cukup
/ sedang), 3.46 (cukup / sedang) dan 3.5 (cukup/ sedang). Hasil pengujian
CMOS dapat dilihat pada tabel 4.10. Hasil MOS tertinggi adalah variasi hasil
sintesa z dengan jumlah korpus latih 300 kalimat dan terendah adalah variasi
hasil sintesa x dengan jumlah korpus latih 100 kalimat. Kualitas suara yang
diuji pada pengujian CMOS adalah tingkat kemiripan hasil sintesa dengan
korpus rekaman. Kemiripan hasil sintesa dapat direpresentasikan dengan gaya
berbicara seperti intonasi, tempo dan karakteristik suara. Berdasarkan hasil
pengujian CMOS, semakin banyak korpus latih maka hasil sintesa akan
semakin tinggi tingkat kemiripan dengan korpus latih.
4. Pengujian AB hanya dilakukan pada responden untuk variasi A karena pada
variasi x, variasi yang diperdengarkan pertama kali adalah variasi x dan
korpus rekaman sehingga penilaian AB yang didapatkan akan lebih baik
89
karena responden telah mendapatkan batas paling baik dan batas paling buruk
dari hasil sintesa. Hasil pengujian AB dapat dilihat pada tabel 4.11. Hasil
pengujian AB berupa 26% memilih variasi sintesa x, 29.67% memilih variasi
sintesa y, dan 44.33% memilih variasi sintesa z. Semakin banyak responden
yang memilih suatu variasi hasil sintesa maka semakin baik kualitas variasi
hasil sintesa yang dipilih. Variasi hasil sintesa yang terbaik adalah variasi
hasil sintesa z dan yang terburuk adalah variasi hasil sintesa x.
5. Pengujian WER dilakukan dengan variasi hasil sintesa x, y dan z yang dapat
dilihat pada tabel 4.12 adalah 29.79%, 56.38%, dan 64.57%. Hasil pengujian
WER yang paling akurat adalah variasi hasil sintesa z dan yang paling tidak
akurat adalah variasi hasil sintesa x. Pengujian WER bertujuan untuk menilai
tingkat kejelasan dari hasil sintesa. Semakin besar korpus latih, maka semakin
tinggi tingkat kejelasan hasil sintesa suara.
6. Suara hasil sintesa yang dihasilkan tidak datar dan karakteristik suara yang
dihasilkan menyerupai suara narasumber. Karakteristik suara ini dihasilkan
dari parameter-parameter yang telah diekstrak pada fase pelatihan. Parameter-
parameter yang didapatkan secara langsung dari rekaman suara menyebabkan
informasi prosodi lain seperti intonasi, aksen, penekanan nada, dan tempo
secara tak langsung tersimpan pada parameter tersebut. Sistem dapat
menghasilkan suara sintesa yang memiliki karakteristik dari narasumber
meskipun informasi prosodi yang digunakan hanya berupa fonem, dan durasi.
Kualitas dari hasil sintesa dapat ditingkatkan kembali dengan memberi
penandaan khusus pada informasi prosodi lainnya seperti intonasi dan
penambahan struktur kalimat seperti frase dan suku kata sehingga model
statistik yang dihasilkan dapat lebih spesifik sehingga suara yang dihasilkan
dapat lebih baik. Ambiguitas yang terjadi pada pengujian black box dapat
disebabkan karena jumlah korpus yang masih sedikit, informasi prosodi yang
belum spesifik serta kualitas korpus yang belum mencakup probabilitas yang
ada.
7. Hasil MOS, CMOS, AB, dan WER pada variasi hasil sintesa menujukan hasil
sintesa memiliki memiliki hubungan secara linear antara jumlah korpus latih
dengan tingkat kealamian, kemiripan dan kejelasan suara hasil sintesa.
90
Semakin banyak jumlah korpus latih maka semakin baik kualitas suara hasil
sintesa. Sedangkan hasil pengujian black box, sistem sudah dapat dijalankan
dengan baik karena telah dapat mengolah masukan pengguna. Namun pada
pengolahan teks, terutama pada format tertentu seperti tanggal masih perlu
ditingkatkan kembali.