Việc bỏ dấu cho một tiếng chính là việc thay đổi tần số F0 của sóng âm thanh.
Các utterance có giá trị accent (trọng âm) và tone(âm). Ta có thể thay đổi 2 giá trị này
để tạo ra thanh điệu. ToBI cung cấp một số giá trị để thay đổi. Ta có thể thay đổi L*,
L+, L-, H+, H-, H%, !H [11]
45 trang |
Chia sẻ: lylyngoc | Lượt xem: 2529 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Luận văn -Thử nghiệm một phương pháp tổng hợp tiếng nói từ văn bản tiếng Việt, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
mềm sử dụng TTS
để check email qua điện thoại di động.
Hiện nay, ở Việt Nam việc sử dụng các hệ thống TTS vẫn cịn chưa nhiều.
Chủ yếu là việc đọc các thơng báo tại các nhà ga, sân bay hay tại cơ quan
nhà nước cĩ hệ thống xếp hàng.
1.3 Quá trình phát triển của TTS trên thế giới
Tiếng nĩi nhân tạo đã được nghiên cứu trong một thời gian dài và cĩ sự tham gia
của nhiều nhà khoa học. Những người đầu tiên cĩ ý tưởng về một chiếc máy cĩ khả
năng nĩi được là Gerbert of Aurillac, Albertus Magnus (1198 – 1280) và Roger Bacon
(1214 – 1294). [18]
Tuy vậy phải tới năm 1779, nhà khoa học người Đan Mạch Christian
Kratzenstein mới xây dựng thành cơng mơ hình cơ khí tổng hợp 5 âm /a/, /e/, /i/, /o/,
/u/. Thiết bị này vẫn chưa tổng hợp được một câu nĩi hồn chỉnh.
Thiết bị đầu tiên được xem như một bộ tổng hợp tiếng nĩi là VODER (Voice
Operating Demonstrator) được nhà khoa học người Mỹ Homer Dulley giới thiệu năm
1939 tại New York. Hệ thống này cĩ thể tổng hợp các câu đơn giản những cần sự điều
khiển hết sức phức tạp. [14]
Trong mấy thập kỷ qua, các hệ thống TTS đã cĩ những bước phát triển vượt bậc.
Chất lượng của những hệ thống TTS được phát triển ngày càng cao và đã được ứng
dụng với các mục đích thương mại. Đa số các hệ thống này dành cho tiếng Anh. Ngồi
ra, cũng cĩ một số các ngơn ngữ khác như tiếng Trung, tiếng Tây Ban Nha, … nhưng
tiếng Anh vẫn được nghiên cứu nhiều nhất vì vậy tiếng Anh cĩ hệ thống TTS chuẩn
mực hơn cả.
1.4 TTS ở Việt Nam
TTS ở Việt Nam cũng đã được nghiên cứu từ khá lâu. Hiện nay cĩ 2 chương
- 3 -
trình thành cơng hơn cả là VnSpeech và VietSound.
Phần mềm VnSpeech là hệ thống tổng hợp tiếng nĩi đầu tiên của Tiếng Việt,
phần mềm này sử dụng phương pháp tổng hợp Formant. Hệ thống này cĩ thể đọc được
hầu hết các âm tiết tiếng Việt ở mức nghe rõ tuy vậy, mức độ tự nhiên khơng cao.
Phần mềm VietSound là phần mềm được phát triển tại đại học Bách Khoa Thành
phố Hồ Chí Minh. Phần mềm này sử dụng giải thuật TD-PSOLA dùng để tổng hợp các
nguyên âm đơn và phương pháp tổng hợp FORMANT để tổng hợp các phụ âm,
nguyên âm và âm vần đơn giản. Phần mềm này cũng chưa đạt đến mức độ tự nhiên
gần giống với tiếng nĩi con người. [2]
Cả hai phần mềm trên đều cĩ nhược điểm là âm thanh thu được rời rạc, thiếu tự
nhiên.
1.5 Mục đích của khĩa luận
Mục đích của khĩa luận này là tìm hiểu và xây dựng hệ thống tổng hợp tiếng nĩi
tiếng Việt dựa trên phương pháp ghép nối diphone. Hệ thống cần cĩ khả năng tổng
hợp một tiếng nĩi cĩ độ liền mạch và cĩ khả năng nghe hiểu được.
1.6 Cấu trúc của khĩa luận
Khĩa luận này được trình bày thành 4 chương. Chương 2 sẽ nêu ra lý thuyết một
hệ thống tổng hợp tiếng nĩi; các phương pháp tổng hợp tiếng nĩi thơng dụng hiện nay.
Dựa trên đặc điểm riêng của tiếng Việt, chúng ta cĩ thể so sánh và cĩ sự lựa chọn
phương pháp tổng hợp tiếng nĩi cho tiếng Việt phù hợp nhất. Chương 3 sẽ là các bước
cụ thể để cĩ thể xây dựng được một hệ thống tổng hợp tiếng nĩi bằng phương pháp
ghép nối diphone. Chương 4 sẽ là tổng kết cho tồn bộ quá trình thử nghiệm phương
pháp này.
- 4 -
Chương 2 Các phương pháp tổng hợp tiếng nĩi
2.1 Mơ hình chung của một hệ thống TTS
Thơng thường, hệ thống TTS bao gồm 3 bước:
Phân tích văn bản
Phân tích cách đọc
Tạo ra sĩng âm thanh
Hình 1 Mơ hình một hệ thống tổng hợp tiếng nĩi
2.1.1 Phân tích văn bản
Phân tích văn bản là việc chuyển các kí hiệu, các số, các chữ viết tắt ra thành các
câu chữ đầy đủ. Ví dụ như câu “Phong trào sinh viên tình nguyện do TW Đồn TNCS
Hồ Chí Minh phát động đã được hưởng ứng của hơn 10000 sinh viên trên cả nước”
cần phải được chuyển thành “Phong trào sinh viên tình nguyện do Trung Ương Đồn
Thanh niên Cộng sản Hồ Chí Minh phát động đã được hưởng ứng của hơn mười nghìn
sinh viên trên cả nước”.
Để thực hiện việc phân tích văn bản tốt, ta cần cĩ:
Một module chuyển số thành dạng chữ viết.
Một cơ sở dữ liệu các chữ viết tắt thơng dụng.
Tiếng nĩi Văn bản
Phân tích
văn bản
Chia các cụm từ
Ngữ điệu
Độ dài ngắn
Tạo
sĩng âm
Phân tích
cách đọc
- 5 -
Một cơ sở dữ liệu các khuơn dạng thơng dụng như ngày tháng, giờ, …
Tuy vậy, ta cũng sẽ gặp phải nhiều khĩ khăn do những tình huống nhập nhằng.
Ví dụ như cụm “1/2” cĩ thể được hiểu là “ngày mùng một tháng hai” hoặc “một phần
hai”. Một ví dụ khác là khi ta gặp một dãy số “38533580”, ta cần phải xác định xem
đây là số đếm (ba mươi tám triệu năm trăm ba mươi ba ngàn năm trăm tám mươi) hay
đây là số điện thoại (ba tám năm ba ba năm tám khơng). Những trường hợp như thế
này đỏi hỏi ta phải xác định được văn cảnh của văn bản đầu vào.
2.1.2 Phân tích cách đọc
Việc phân tích cách đọc thực chất chính là quá trình tiền xử lý cho việc tổng hợp
tiếng nĩi. Vì vậy, quá trình này cịn phụ thuộc vào việc chúng ta sẽ sử dụng phương
pháp nào để thực hiện việc tổng hợp tiếng nĩi.
Cũng phải nĩi thêm rằng tiếng Việt cĩ một thuận lợi rất lớn là mỗi cách viết chỉ
cĩ một cách đọc khơng như tiếng Anh một cách viết cĩ thể cĩ nhiều cách đọc phụ
thuộc vào ngữ cảnh.
Nếu việc tổng hợp tiếng nĩi được thực hiện bằng các phương pháp ghép nối, thì
việc bắt buộc đối với chúng ta là phải phân chia câu cần tổng hợp thành các đơn vị đã
cĩ sẵn trong cơ sở dữ liệu của chúng ta. Hãy xét ví dụ ta cần tổng hợp câu “Xin chào”
bằng phương pháp ghép nối diphone. Các diphone đã cĩ trong cơ sở dữ liệu là “âm
câm – x”, “x – i”, “i – n”, “n – âm câm”, “âm câm – ch”, “ch – à”, “à – o”. Khi đĩ ta
cần tách đoạn text “Xin chào” thành “âm câm – x – i – n – âm câm – ch – à – o – âm
câm”.
Để tiếng nĩi tổng hợp được thu được chất lượng tốt thì phân tích ngơn điệu là vơ
cùng quan trọng. Ngơn điệu gồm: độ cao thấp, độ dài ngắn, cường độ.
Độ cao thấp (pitch) hay tần số trên một câu phụ thuộc vào nhiều yếu tố trong đĩ
cĩ loại câu (câu kể, câu hỏi, câu cảm thán); người nĩi (giới tính, trạng thái cảm xúc).
Ví dụ câu kể thường thấp giọng ở cuối câu cịn câu hỏi lại cao giọng ở cuối câu. Người
nĩi là nam thường nĩi với độ cao thấp hơn.
Độ dài ngắn (duration) là đặc điểm về thời gian phát âm một từ hay một âm vị.
Thơng thường hai tiếng liên tiếp mà tạo thành từ khoảng nghỉ giữa hai tiếng sẽ ngắn
hơn hai tiếng liên tiếp những khơng tạo thành một từ. Đơi khi, độ dài ngắn cũng được
thể hiện khi người nĩi muốn nhấn mạnh một từ nào đĩ trong câu. [2]
Cường độ thể hiện ở độ to nhỏ của tiếng nĩi. Ở mức âm tiết, các nguyên âm
- 6 -
thường cĩ cường độ mạnh hơn phụ âm. Ở mức cụm, các âm tiết ở phần cuối của cách
phát âm cĩ thể cĩ cường độ yếu hơn.
Một hệ thống TTS cần phân tích được cách đọc ở mức càng gần với thực tế càng
tốt. Đây là mục tiêu của mọi hệ thống TTS cho các ngơn ngữ khác nhau, tuy vậy chưa
cĩ một hệ thống nào cĩ thể thực hiện hồn hảo điều này.
2.1.3 Tạo ra sĩng âm thanh
Đây là quá trình trực tiếp tạo ra tín hiệu âm thanh. Chất lượng tiếng nĩi tổng hợp
được phụ thuộc rất nhiều vào phần này. Trên thế giới đã cĩ rất nhiều phương pháp
được đưa ra để tổng hợp tiếng nĩi như phương pháp tổng hợp Formant, phương pháp
ghép nối Diphone, …
Các phương pháp cĩ thể được chia làm 4 nhĩm:
Phương pháp tổng hợp dựa trên hệ luật: phương pháp Formant
Phương pháp tổng hợp bằng ghép nối:
o Phương pháp tổng hợp bằng ghép nối phones
o Phương pháp tổng hợp bằng ghép nối nửa phones
o Phương pháp tổng hợp bằng ghép nối diphone
Phương pháp tổng hợp dựa trên các mơ hình:
o Phương pháp tổng hợp dựa trên mơ hình Markov ẩn (HMM)
o Phương pháp tổng hợp dựa trên mơ hình âm tiếng nĩi và nhiễu
(Harmonic plus Noise – HNM)
Phương pháp tổng hợp dựa trên mơ phỏng phát âm
2.2 Phương pháp tổng hợp Formant
Phương pháp này cịn cĩ tên gọi khác là phương pháp tổng hợp dựa trên hệ luật
(rule-based). Đây là phương pháp khơng dựa vào những đoạn tiếng nĩi đã thu sẵn của
con người. Phương pháp tổng hợp Formant sẽ sử dụng tiếng nĩi tổng hợp được tạo ra
dựa trên cơ sở lý thuyết âm học của quá trình tạo tiếng nĩi. Phổ biến nhất hiện nay
chính là mơ hình nguồn âm bộ lọc ( source-filter model) để tạo ra được tín hiệu tiếng
nĩi.
Formant là một sự cộng hưởng âm thanh. Ở đây chúng ta cĩ thể hiểu tín hiệu
- 7 -
tiếng nĩi là kết quả của nguồn kích hữu thanh hoặc vơ thanh được cộng hưởng hay
phản cộng hưởng của tuyến âm, sau đĩ ảnh hưởng bởi sự tán xạ của tiếng nĩi qua mơi
và mũi.
Phương pháp tổng hợp Formant đầu tiên được Walter Lawrence đưa ra vào năm
1953, phương pháp này sử dụng 3 formant được nối song song. 3 formant cũng là số
lượng formant tối thiểu để cĩ thể tạo ra được một tiếng nĩi nghe được. Dưới đây là
một mơ hình 3 formant được nối nối tiếp [14]:
Hình 2 Mơ hình 3 formant nối tiếp
Đầu vào của mơ hình này là 12 tham số: tần số chung (F0), 3 tần số của các
Formant và 3 biên độ của các Formant, cường độ của tần số thấp, cường độ của tần số
cao, … Do cĩ nhiều tham số nên việc điều khiển là rất phức tạp. Tuy vậy, phương
pháp này mới chỉ đưa ra được một tiếng nĩi với chất lượng nghe được. Tiếng nĩi vẫn
cịn rời rạc, khơng trơn chu, liền mạch hay nĩi cách khác là khơng tự nhiên.
Năm 1980, Dennis Klatt đã đưa ra một mơ hình phức tạp gồm 5 formant và cần
tới 39 tham số điều khiển và được cập nhật 5 mili giây một lần. Dưới đây là mơ hình
được Klatt đưa ra [14]:
- 8 -
Hình 3 Mơ hình 5 formant của Klatt
Cho đến nay, đây vẫn là mơ hình tốt nhất cho phương pháp này. Phương pháp
formant cĩ những đặc điểm nổi trội so với các phương pháp khác là khơng cần phải
lưu trữ cơ sở dữ liệu, thời gian tổng hợp là rất nhanh. Đây là phương pháp hiện nay rất
thích hợp cho những ứng dụng trên các thiết bị như PDA, PC Pocket vì đặc điểm của
những thiết bị này là phần cứng yếu.
Tuy nhiên, phương pháp này về mặt chất lượng của tiếng nĩi vẫn khơng tốt.
Tiếng nĩi vẫn bị rời rạc, khơng tự nhiên. Hơn nữa, phương pháp này rất khĩ xây dựng.
Ta cần phải cĩ một sự hiểu biết sâu sắc về mặt âm học mới cĩ thể thực hiện được
phương pháp này.
2.3 Các phương pháp tổng hợp bằng ghép nối
Trong các phương pháp này, tiếng nĩi sẽ được tổng hợp từ các đoạn tiếng nĩi
nhỏ hơn đã được lưu trữ sẵn trong cơ sở dữ liệu. Đối với tiếng Việt, đĩ cĩ thể là:
phone, diphone, tiếng, …
2.3.1 Phương pháp tổng hợp bằng ghép nối các tiếng
Rõ ràng đây là một phương án khơng khả thi, đối với tiếng Việt, số lượng tiếng là
rất lớn, điều này làm cho cơ sở dữ liệu phải lưu trữ là rất lớn. Một nhược điểm nữa của
cách làm này là giữa các tiếng sẽ khơng cĩ độ trơn, do các tiếng được thu riêng biệt tại
- 9 -
các thời điểm khác nhau.
2.3.2 Phương pháp tổng hợp bằng ghép nối các phone
Phone: Là âm vị hay chính là đơn vị âm nhỏ nhất tạo ra tiếng nĩi. Thơng thường
đối với mỗi ngơn ngữ thì mỗi chữ cái trong bảng chữ cái là một phone. Trong tiếng
Việt, ngồi các phone là chữ cái ra cịn cĩ các phone là tổ hợp của các chữ cái như: th;
gh; kh; gi; nh; ng; ngh… Âm câm (silence) cĩ thể coi là một phone đặc biệt. Thơng
thường mỗi âm vị cĩ một cách đọc riêng, tuy nhiên khơng phải mỗi cách đọc chỉ tương
ứng với một âm vị. Trong tiếng Việt, một số âm vị cĩ cách đọc giống nhau tuy cách
viết khác nhau (chẳng hạn: ng và ngh, i và y, g và gh… ).
Số lượng phone của tiếng Việt cĩ dấu là 95 phone và cơ sở dữ liệu của ta chỉ cần
bao gồm 95 phone này. Cĩ thể thấy ngay cơ sở dữ liệu nhỏ là một ưu điểm lớn của
phương pháp này.
Tuy vậy, chất lượng tiếng nĩi tổng hợp của phương pháp này lại khơng cao. Hãy
xét ví dụ cần tổng hợp câu “Hai bạn đĩ hát hay”. Từ “hai” được ghép từ các phone
“h”, “a”, “i”. Từ “hay” được ghép từ các phone “h”, “a”, “y”. Rõ ràng trong cơ sở dữ
liệu cách đọc các phone, “h”, “a”, “i”, “y” thì phone “i” và phone “y” cĩ cách đọc
giống hệt nhau nhưng khi ghép với các phone khác lại cho ta hai cách đọc hồn tồn
khác nhau. Cách tổng hợp này đã khơng đạt được yêu cầu đầu tiên của một hệ thống
tổng hợp tiếng nĩi là “tiếng nĩi sinh ra phải hiểu được”, nĩ đã làm thay đổi hồn tồn
ý nghĩa của văn bản.
2.3.3 Phương pháp tổng hợp bằng ghép nối diphone
Đây là phương pháp được phát triển từ những năm 70 của thế kỷ trước. Cho tới
nay, phương pháp này là một trong những phương pháp hiệu quả nhất và đã được ứng
dụng rộng rãi cho nhiều ngơn ngữ.
Diphone: Một diphone được bắt đầu từ điểm giữa của phone trước đến điểm giữa
của phone sau trong hai phone đứng cạnh nhau của một cặp phone. Với một từ cĩ thể
cĩ một, hai hoặc nhiều diphone. Ví dụ như từ ba chỉ cĩ một diphone là b – a nhưng từ
ban cĩ hai diphone là b – a và a – n. Các từ chỉ cĩ một phone được coi là một diphone
của phone đĩ với âm câm, chẳng hạn từ a được coi là một diphone của asilence.
Phương pháp tổng hợp diphone được thực hiện theo 4 bước:
Liệt kê tất cả các phone và các đặc tính của các phone này.
- 10 -
Liệt kê tất cả các cách ghép nối các cặp phone-phone để tạo thành
diphone. Do cĩ những cặp phone-phone khơng xuất hiện nên số lượng
diphone khơng bao giờ quá bình phương số lượng phone.
Xây dựng cơ sở dữ liệu cách đọc cho các diphone này.
Ghép nối các diphone: đây chính là quá trình quan trọng nhất của phương
pháp này. Ở đây, thuật tốn thường dùng nhất là đồng bộ điểm pitch.
2.3.3.1 Điểm pitch
Điểm pitch (pitch mark) là điểm cĩ tần số là cực đại địa phương trên một sĩng
âm. Dưới đây là hình ảnh ví dụ về điểm pitch trong phone /u/.[15]
Hình 4 Điểm pitch trong phone
Giữa hai diphone gần ghép nối với nhau, bao giờ ta cũng cĩ một phone giống
nhau ví dụ như “a – b” và “b – c”. Việc chúng ta cần làm là chỉnh sửa sĩng âm của
phone “b” ở diphone thứ nhất hoặc diphone thứ hai hoặc cả hai diphone sau cho chúng
cĩ thể chồng khít được lên nhau.[15]
- 11 -
Hình 5 Ghép nối hai diphone
Việc ghép nối hai diphone cĩ thể được thực hiện bằng thuật tốn PSOLA (pitch
synchronous overlap – add) được gọi là đồng bộ điểm pitch.
2.3.3.2 Đồng bộ điểm pitch theo miền thời gian TD-PSOLA
Người ta đã phát triển nhiều phiên bản của thuật tốn PSOLA như: TD-PSOLA
(time domain pitch synchronous overlap – add), MBROLA (multi band overlap add),
LP-PSOLA (linear pitch synchronous overlap – add). Tất cả các phiên bản này đều cĩ
một ý tưởng chung là sửa đổi trực tiếp sĩng âm thanh mà khơng sử dụng các thơng số
nào của nĩ.
Thuật tốn TD-PSOLA được hãng truyền thơng Pháp phát triển vào đầu những
năm 1990 và dựa trên ý tưởng: “Nếu x(n) tuần hồn trong khoảng [−∞, +∞] thì ta cĩ
thể tạo ra một sĩng mới s(n) từ x(n) với các điểm pitch đã được dịch chuyển từ T0 về T
mà ta mong muốn. Thuật tốn được thể hiện bởi cơng thức biến đổi:
0
0
( ) ( ) ( )
( ) ( ( )
i
i
i
s n x n w n iT
s n s n i T T
Ở đây w(x) là một “cửa sổ” được chọn. Cĩ thể hiểu rằng, s(P) mới phụ thuộc vào
các điểm nằm trong “cửa số” của x(P0) cũ mà P0 và P là hai điểm tương ứng của sĩng
cũ và sĩng mới. Cách làm này người ta đã chứng minh được là biên độ sĩng khơng bị
thay đổi trong quá trình biến đổi sĩng. [14]
- 12 -
Hình 6 Thuật tốn TD-PSOLA
Trong hình trên, tín hiệu ở phía bên trái được đã giãn ra để khớp với các điểm
pitch mong muốn. Các hình bên phải là biên động số tương ứng và ta cĩ thể nhận thấy
là biên độ này khơng bị thay đổi.
2.4 Phương pháp mơ phỏng phát âm
Tổng hợp mơ phỏng phát âm là các kỹ thuật tổng hợp giọng nĩi dựa trên mơ hình
máy tính của cơ quan phát âm của người và quá trình phát âm xảy ra tại đĩ. Hệ thống
tổng hợp mơ phỏng phát âm đầu tiên là ASY được phát triển ở phịng thí nghiệm
Haskins vào giữa những năm 1970 bởi Philip Rubin, Tom Baer, và Paul Mermelstein.
Tổng hợp mơ phỏng phát âm đã từng chỉ là hệ thống dành cho nghiên cứu khoa học
cho mãi đến những năm gần đây. Lý do là rất ít mơ hình tạo ra âm thanh chất lượng đủ
cao hoặc cĩ thể chạy hiệu quả trên các ứng dụng thương mại. Một ngoại lệ là hệ thống
dựa trên NeXT; vốn được phát triển và thương mại hĩa bởi Trillium Sound Research
Inc, Canada. Hệ thống tạo ra một máy tổng hợp giọng nĩi dựa trên mơ phỏng phát âm
hồn chỉnh, dựa trên mơ hình ống dẫn sĩng tương đương với cơ quan phát âm của
người. Nĩ được điều khiển bởi Mơ hình Phần Riêng biệt của Carré; bản thân mơ hình
này lại dựa trên cơng trình của Gunnar Fant và các người khác ở Phịng thí nghiệm
Cơng nghệ Giọng nĩi Stockholm thuộc Viện Cộng nghệ Hồng gia Thụy Điển về tổng
hợp giọng nĩi cộng hưởng tần số. Cơng trình này cho thấy các cộng hưởng tần số
trong ống cộng hưởng cĩ thể được điều khiển bằng cách thay đổi tám tham số tương
đồng với các cách phát âm tự nhiên của cơ quan phát âm của người. Hệ thống bao gồm
- 13 -
một từ điển phát âm cùng với các quy tắc phát âm tùy thuộc ngữ cảnh để giúp ghép nối
âm điệu và tạo ra các tham số phát âm; mơ phỏng theo nhịp điệu và ngữ điệu thu được
từ các kết quả nghiên cứu ngữ âm học. [18]
Để cĩ thể thực hiện được phương pháp này địi hỏi thời gian, chi phí và cơng
nghệ. Phương pháp này khĩ cĩ thể ứng dụng tại Việt Nam trong thời điểm hiện nay.
2.5 Đặc điểm của tiếng Việt
Đối với bài tốn TTS, tiếng Việt so với các ngơn ngữ khác cĩ rất nhiều thuận lợi.
Mỗi cách viết chỉ cĩ duy nhất một cách đọc. Tuy nhiên, một trong những khĩ khăn lớn
nhất của tiếng Việt chính là vấn đề thanh điệu. Việc mỗi nguyên âm cĩ 6 thanh
(ngang, sắc, huyền, ngã, hỏi, nặng) lại làm cho việc tổng hợp gặp những khĩ khăn
khác. Việc đọc khơng dấu chúng ta hầu hết cĩ thể hiểu được nhưng như vậy vẫn cĩ thể
gây ra những hiểu lầm. Tuy nhiên, nếu ta đã sinh được sĩng âm cho tiếng Việt khơng
dấu, thì ta cĩ thể biến đổi sĩng âm đĩ để thu được sĩng âm thể hiện tiếng Việt cĩ dấu.
Một âm tiết tiếng Việt khi đọc cĩ 5 loại âm thanh: âm đầu (phụ âm), âm trung
bình (bán nguyên âm), âm trung tâm (nguyên âm hoặc nguyên âm đơi), âm cuối
(nguyên âm hoặc bán nguyên âm) và thanh điệu (dấu). Khi thay các thanh điệu vào
cùng từ, giá trị F0 thay đổi như sau: [3]
Với thanh ngang, giá trị F0 bắt đầu lớn nhất và duy trì cho tới khi kết thúc
âm tiết.
Thanh huyền giá trị F0 bắt đầu thấp hơn thanh ngang, thanh sắc và thanh
ngã.
Thanh ngã giá trị F0 bắt đầu cao, tới giữa âm tiết thì giảm xuống, và tăng
lên cao nhất khi đến cuối âm tiết. Trong hầu hết các trường hợp, các âm
tiết cĩ thanh ngã cĩ giá trị F0 cực tiểu rơi vào khoảng giữa đến 2/3 của F0
tại thời điểm ban đầu.
Thanh hỏi giá trị F0 giảm dần đến khoảng 2/3 giá trị F0 ban đầu rồi tăng
trở lại.
Thanh sắc giá trị F0 giữ ổn định trong khoảng 2/3 thời gian của âm tiết rồi
sau đĩ tăng nhanh.
Thanh nặng giá trị F0 giảm nhanh và thời gian kéo dài thường chỉ bằng
2/3 thời gian các thanh khác.
- 14 -
Dưới đây là đồ thị mơ tả sự biến thiên của giá trị F0 các thanh và ví dụ với việc
ghi âm chữ “chi” cùng với 6 thanh lần lượt là ngang, huyền, ngã, hỏi, sắc, nặng.[9]
Hình 7 Sự thay đổi giá trị F0 của các thanh
Hình 8 Sự thay đổi giá trị F0 khi các thanh đi với chữ "chi"
2.6 Kết luận
Với mục đích xây dựng được một hệ thống tổng hợp tiếng nĩi mà âm thanh thu
- 15 -
được phải cĩ độ trơn, độ tự nhiên cao nhất, phương pháp ghép nối bằng diphone là
vượt trội hơn cả. Yêu cầu về độ trơn và độ tự nhiên của tiếng nĩi chính là điểm mạnh
của phương pháp này. Các phương pháp khác đều khơng so sánh được với phương
pháp ghép nối diphone ở tiêu chí này. Hơn nữa, phương pháp này lại cĩ ưu điểm là
việc xây dựng khơng phức tạp. Vì vậy, tơi quyết định lựa chọn phương pháp ghép nối
diphone để xây dựng hệ thống TTS tiếng Việt.
Cùng với những đặc điểm của tiếng Việt ở trên, tơi quyết định áp dụng phương
pháp này với tiếng Việt khơng dấu và thay đổi tần số chung F0 để tạo ra thanh điệu
(dấu) cho tiếng nĩi được tổng hợp.
- 16 -
Chương 3 Xây dựng TTS tiếng Việt sử dụng phương
pháp ghép nối diphone
3.1 Các cơng cụ thực hiện
Tơi xây dựng hệ thống TTS tiếng Việt dựa trên bộ cơng cụ:
Speech Tools Library 2.0: Đây là một tập hợp các lớp, hàm, đối tượng
được viết bằng ngơn ngữ C++ cần thiết đối với xử lý âm thanh. Thư viện
này giúp ta cĩ khả năng đọc, ghi, thay đổi các sĩng âm. Thư viện cũng
cung cấp nhiều định dạng khác nhau các file chỉ số như (LPC, ceptra, F0)
và các hàm cần thiết để chuyển đổi giữa các định dạng đĩ. Thư viện này
được phát triển tại trung tâm nghiên cứu tiếng nĩi thuộc đại học
Edinburgh, Anh. [6]
Festvox 2.1 là bộ cơng cụ chủ yếu được viết bằng shell Linux và ngơn ngữ
PERL hỗ trợ việc xây dựng cơ sở dữ liệu phục vụ cho việc tổng hợp tiếng
nĩi. Cơ sở dữ liệu được xây dựng trên Festvox đảm bảo được sự tương
thích với hệ thống tổng hợp tiếng nĩi Festival. Bộ cơng cụ này được phát
triển tại đại học Carnegie Mellon, Hoa Kỳ. Mục đích phát triển của hệ
thống này là giúp cho việc xây dựng một giọng đọc mới hay một ngơn
ngữ mới trở nên dễ dàng hơn và mọi người cĩ thể tự xây dựng một giọng
đọc cho riêng mình. [7]
Festival 1.96 được viết bằng C++ cĩ thể coi là một frame work tổng hợp,
cho phép xây dựng các hệ thống tổng hợp tiếng nĩi bằng các phương pháp
khác nhau. Nhân của hệ thống này cĩ thể nĩi chính là thư viện Speech
Tools. Festival đồng thời con cung cấp sẵn những giọng đọc chuẩn tiếng
Anh giúp cho những người sử dụng rất thuận lợi trong việc xây dựng một
hệ thống TTS cho ngơn ngữ khác. Hệ thống này ban đầu được phát triển
tại trung tâm nghiên cứu tiếng nĩi thuộc đại học Edinburgh, Anh. Hiện
nay, hệ thống này cịn được phát triển đồng thời bởi trường đại học
Carnegie Mellon, Hoa Kỳ. [5]
Cả 3 cơng cụ trên đều là những phần mềm mã nguồn mở, được phát triển để sử
dụng trên Linux. Đây là một bộ cơng cụ tổng hợp hồn chỉnh dành cho tiếng Anh.
- 17 -
3.2 Cài đặt và tạo ra các file khuơn mẫu
Việc cài đặt các cơng cụ này cũng cần cĩ chú ý:
Cần cài bản gcc cũ 2.7.2 để biên dịch Speech Tools Library.
Cần cài đặt Speech Tools trước, sau đĩ đến Festvox rồi mới đến Festival.
Cần chỉnh lại đường dẫn mặc định của Festvox và Speech Tools.
Sau khi việc cài đặt hồn tất, chúng ta cĩ thể bắt đầu xây dựng hệ thống TTS
tiếng Việt bằng lệnh: “$FESTVOXDIR/src/diphones/setup_diphone vnu vn ldk” để
tạo ra các thư mục và file khuơn mẫu phục vụ cho việc thực hiện. Trong đĩ vnu là tên
đơn vị, vn là tên ngơn ngữ, ldk là tên người đọc. Sau khi thực hiện lệnh này, ta sẽ cĩ
một thư mục làm việc là “~/data/vnu_vn_ldk_diphone”. Tất cả các cơng việc tiếp theo
của chúng ta đều thực hiện từ thư mục này.
3.3 Định nghĩa tập phone tiếng Việt
Cơng việc tiếp theo của chúng ta là định nghĩa tập phone tiếng Việt trong
festvox/vnu_vn_ldk_phoneset:
Chúng ta sẽ sử dụng một phone đặc biệt là âm câm (tiếng Anh âm là silence,
trong danh sách của ta sẽ được kí hiệu là pau).
Tiếng Việt cịn gồm cĩ 24 phụ âm tính cả phụ âm đơn và đơi là b, c(k), ch, d, đ,
g, gi, h, kh, l, m, n, ng(ngh), nh, p, ph, q, r, s, t, tr, th, v, x. Ở đây, 2 cặp phone k và c,
ng và ngh cĩ cách phát âm giống nhau, nên ta sẽ chỉ định nghĩa một lần.
Ngồi ra, tiếng Việt bao gồm 12 nguyên âm đơn a, ă, â, e, ê, i, o, ơ, ơ, u, ư, y.
Như đã nĩi ở mục 2.6, chúng ta sẽ chỉ thực hiện việc tổng hợp tiếng nĩi cho tiếng Việt
khơng dấu.
Để tăng chất lượng của tiếng nĩi được tổng hợp, tơi cho rằng chúng ta cĩ thể coi
cả các nguyên âm đơi ví dụ như ao, au, oi, ưu … là một phone mặc dù chúng cĩ thể
được tổng hợp từ những nguyên âm đơn. Cách làm này sẽ khơng làm giảm đi chất
lượng của tiếng nĩi (độ trơn) do các từ vẫn được ghép nhờ âm câm.
Ở đây, tơi kí hiệu các phone theo cách gõ tiếng Việt TELEX. Các chữ cái chỉ dấu
sẽ được viết thường, cịn lại viết hoa. Ví dụ như phone “ưu” gõ theo cách gõ TELEX
là uwu nên sẽ được kí hiệu là UwU.
Đối với mỗi phone, ta cần biết các thơng số về phone là:
- 18 -
Loại phone: nguyên âm hay phụ âm tương ứng là + hoặc –. Ở đây chúng
ta phải lưu ý răng ta chia phone là nguyên âm hay phụ âm dựa trên cách
phát âm của chúng (âm học). Nguyên âm là âm mà khi phát âm, dịng
khơng khí sau khi đi qua thanh quản đi thẳng ra ngồi, khơng gặp vật cản.
Phụ âm là âm mà khi phát âm, dịng khơng khí sau khi đi qua thanh quản
gặp vật cản trên đường đi ví dụ như vịm miệng, răng, mơi. Với cách định
nghĩa như trên, phone “y” trong tiếng Việt được coi là nguyên âm.
Độ dài của phone nếu là nguyên âm: dài, ngắn hay là nguyên âm đơi
tương ứng là l, s, d
Nếu là nguyên âm, độ cao của phone (vheight): cao, trung bình, thấp
tương ứng là 1 2 3
Nếu là nguyên âm, phone cĩ phát âm trịn miệng khơng (vrnd) (+ -)
Nếu phone là phụ âm (ctype), phone là loại âm gì: âm mũi (n), âm xát (f),
âm nước (l), âm dừng (s), âm dừng và xát (a).
Nếu là phụ âm vị trí gặp vật cản (cplace): mơi (l), vịm miệng (p), răng (a,
d, v), cả mơi và răng (b).
Tơi đã xây dựng bảng phone tiếng Việt cho các nguyên âm và phụ âm như sau:
Bảng 1 Các nguyên âm đơn tiếng Việt và tính chất
Thứ tự Phone Ký hiệu Độ dài Độ cao Phát âm trịn miệng
1. a A Dài Thấp Khơng
2. ă Aw Ngắn Cao Khơng
3. â Aa Ngắn Cao Khơng
4. e E Ngắn Thấp Khơng
5. ê Ee Dài Thấp Khơng
6. i I Ngắn Cao Khơng
7. o O Ngắn TB Cĩ
- 19 -
8. ơ Oo Ngắn TB Cĩ
9. ơ Ow Ngắn TB Khơng
10. u U Ngắn Cao Cĩ
11. ư Uw Dài Cao Khơng
12. y Y Ngắn Cao Khơng
Bảng 2 Các nguyên âm đơi của tiếng Việt và tính chất
Thứ tự Phone Kí hiệu Độ dài Độ cao Phát âm trịn miệng
1. ai AI Nguyên âm đơi Cao Khơng
2. ao AO Nguyên âm đơi TB Cĩ
3. au AU Nguyên âm đơi TB Cĩ
4. ay AY Nguyên âm đơi TB Cĩ
5. âu AaU Nguyên âm đơi Thấp Cĩ
6. ây AaY Nguyên âm đơi Cao Khơng
7. eo EO Nguyên âm đơi TB Cĩ
8. êu EeU Nguyên âm đơi Cao Khơng
9. ia IA Nguyên âm đơi TB Khơng
10. iê IEe Nguyên âm đơi TB Khơng
11. iêu IEeU Nguyên âm đơi TB Khơng
12. iu IU Nguyên âm đơi Cao Khơng
13. oa OA Nguyên âm đơi TB Khơng
- 20 -
14. oă OAw Nguyên âm đơi Cao Khơng
15. oe OE Nguyên âm đơi Cao Khơng
16. oi OI Nguyên âm đơi Cao Khơng
17. oo OO Nguyên âm đơi TB Cĩ
18. ơi OoI Nguyên âm đơi TB Khơng
19. ơi OwI Nguyên âm đơi TB Khơng
20. ua UA Nguyên âm đơi TB Khơng
21. uâ UAa Nguyên âm đơi Cao Khơng
22. uê UEe Nguyên âm đơi TB Khơng
23. ui UI Nguyên âm đơi Cao Khơng
24. uyê UYEe Nguyên âm đơi TB Khơng
25. uơ UOo Nguyên âm đơi TB Cĩ
26. uơi UOoI Nguyên âm đơi TB Khơng
27. uơ UOw Nguyên âm đơi TB Khơng
28. uy UY Nguyên âm đơi Cao Khơng
29. uya UYA Nguyên âm đơi Cao Khơng
30. ưa UwA Nguyên âm đơi Cao Khơng
31. ưi UwI Nguyên âm đơi Cao Khơng
32. ươ UwOw Nguyên âm đơi TB Khơng
33. ươu UwOwU Nguyên âm đơi TB Cĩ
34. ưu UwU Nguyên âm đơi TB Cĩ
- 21 -
Bảng 3 Các phụ âm tiếng Việt và tính chất
Thứ tự Phone Kí hiệu Loại phụ âm Vị trí cản
1. b B Âm dừng Mơi
2. c C Âm dừng Mơi
3. ch CH Âm dừng Mơi
4. d D Âm dừng Răng
5. đ Dd Âm dừng Răng
6. g G Âm dừng Răng
7. gi GI Âm dừng Răng
8. h H Âm xát Răng
9. kh KH Âm dừng Mơi
10. l L Âm nước Răng
11. m M Âm mũi Mơi
12. n N Âm mũi Răng
13. ng NG Âm mũi Răng
14. nh NH Âm dừng Mơi
15. p P Âm dừng Mơi
16. ph PH Âm dừng Mơi
17. q Q Âm dừng Răng
18. r R Âm xát Răng
- 22 -
19. s S Âm xát Răng
20. t T Âm dừng Răng
21. tr TR Âm dừng Răng
22. th TH Âm xát Răng
23. v V Âm xát Mơi và răng
24. x X Âm xát Vịm miệng
Từ bảng tổng hợp trên, tơi đã định nghĩa các phone tiếng Việt trong file
festvox/vnu_vn_ldk_phoneset.scm.
3.4 Xây dựng tập các diphone:
Đây là quá trình liệt kê tất cả các khả năng ghép của các phone với nhau. Một
cách đơn giản chúng ta cĩ thể viết đoạn chương trình:
Bảng 4 Một cách liệt kê các diphone
for (phone u trong tập phone)
for (phone v trong tập phone)
tập diphone kết quả = add(diphone(u – v))
Trong tiếng Việt khơng phải cặp phone – phone nào cũng tồn tại, vì vậy, cách
làm này gây ra sự lãng phí về cơ sở dữ liệu phải lưu trữ, tuy khơng ảnh hưởng đến chất
lượng tiếng nĩi tổng hợp thu được sau cùng nhưng làm cho cơ sở dữ liệu bị tăng lên
nhiều lần. Theo cách định nghĩa các phone như trên, sẽ khơng tồn tại các diphone dạng
nguyên âm – nguyên âm hoặc phụ âm – phụ âm. Tơi sẽ chỉ định nghĩa những diphone
cĩ tồn tại. Để dễ dàng hơn cho việc xây dựng, tơi chia các phone vào 5 tập:
Bảng 5 Phân loại các phone
Các tập dữ liệu Các phần tử
8 phone phụ âm cĩ thể đứng cuối
(consonants_can_stay_last)
C, CH, M, N, NG, NH, P, T
- 23 -
16 phone phụ âm khơng thể đứng cuối
(consonants_cannot_stay_last)
B, D, Dd, G, GI, H, KH, L, PH, Q, R,
S, TR, TH, V, X
13 phone nguyên âm cĩ thể đứng cuối
(vowels_can_stay_last)
A, E, Ee, I, O, Oo, Ow, U, Uw, OA,
OE, UY, Y
24 phone nguyên âm bắt buộc phải đứng cuối
(vowels_must_stay_last)
AI, AO, AU, AY, AaU, AaY, EO,
EeU, IA, IEeU, IU, OI, OoI, OwI,
UA, UEe, UI, UooI, UOw, UYA,
UwA, UwI, UwOwU, UwU
9 phone nguyên âm khơng thể đứng cuối
(vowel_cannot_stay_last)
Aa, Aw, IEe, OAw, OO, UAa,
UYEe, UOo, UwOw
Sau khi đã chia các phone vào 5 tập như trên, ta cĩ thể thực hiện việc liệt kê các
phép ghép nối dễ dàng hơn.
3.4.1 Diphone giữa âm câm và phụ âm:
Mọi phụ âm đều cĩ khả năng đứng ở đầu của một tiếng vì vậy ta sẽ cĩ 24
diphone giữa âm câm và phụ âm:
Bảng 6 Diphone âm câm – phụ âm
(set! silc-carrier '(() (A T A pau)))
(define (list-silc)
(mapcar
(lambda (c)
(set! count (+ 1 count)) ;;; to count
(list
(list (string-append silence "-" c))
(append (car silc-carrier)(list silence c)(car(cdr silc-carrier)))
)
) (append consonants_can_stay_last consonants_cannot_stay_last)
)
)
3.4.2 Diphone giữa âm câm và nguyên âm
Mọi nguyên âm đều cĩ khả năng đứng đầu của một tiếng vì vậy ta sẽ cĩ 46
diphone giữa âm câm và nguyên âm:
Bảng 7 Diphone âm câm – nguyên âm
(set! silv-carrier '(() (N N A pau)))
- 24 -
(define (list-silv)
(mapcar
(lambda (v)
(list
(list (string-append silence "-" v))
(append (car silv-carrier)(list silence v)(car(cdr silv-carrier)))
)
) (append vowels_can_stay_last vowels_cannot_stay_last
vowels_must_stay_last)
)
)
3.4.3 Diphone giữa phụ âm và âm câm
Diphone phụ âm và âm câm cần xét đến khi phụ âm đứng cuối một tiếng. Ở đây
sẽ chỉ cĩ các phụ âm trong tập consonants_can_stay_last tham gia. Ta sẽ thu được 8
diphone.
Bảng 8 Diphone phụ âm – âm câm
(set! csil-carrier '((pau T A T A) ()))
(define (list-csil)
(mapcar
(lambda (c)
(list
(list (string-append c "-" silence))
(append (car csil-carrier)(list c silence)(car(cdr csil-carrier)))
)
) consonants_can_stay_last
)
)
3.4.4 Diphone giữa nguyên âm và âm câm
Diphone giữa nguyên âm và âm câm cần xét đến khi cĩ nguyên âm đứng ở cuối
một tiếng. Ở đây sẽ chỉ cĩ các nguyên âm thuộc tập vowel_can_stay_last và
vowels_must_stay_last tham gia. Ta sẽ thu được 37 diphone.
Bảng 9 Diphone nguyên âm – âm câm
(set! vsil-carrier '((pau T A T ) ()))
(define (list-vsil)
(mapcar
(lambda (v)
(list
(list (string-append v "-" silence))
(append (car vsil-carrier)(list v silence)(car(cdr vsil-carrier)))
)
) (append vowels_can_stay_last vowels_must_stay_last)
)
)
- 25 -
3.4.5 Diphone giữa phụ âm – nguyên âm
Theo cách định nghĩa như ở trên, mọi cặp phụ âm – nguyên âm đều cĩ thể ghép
để tạo thành diphone. Tuy nhiên ở đây, ta sẽ tách làm 2 phần. Nhĩm 1 sẽ gồm tất cả
các phụ âm được ghép với các nguyên âm thuộc hai tập vowels_can_stay_last và
vowels_must_stay_last. Nhĩm 2 sẽ gồm tất cả các phụ âm được ghép với các nguyên
âm thuộc tập vowels_cannot_stay_last. Lý do của việc tách cơng việc làm hai phần là
do chúng ta trong lúc chúng ta tạo danh sách các diphone, chúng ta đồng thời cịn làm
luơn việc nhúng các diphone vào carrier. Và sẽ là thuận lợi hơn cho chúng ta trong quá
trình thu âm nếu chúng ta tách làm hai phần. Danh sách diphone của chúng ta sau khi
thực hiện xong bước này sẽ cĩ thêm 1104 diphone
Bảng 10 Diphone phụ âm – nguyên âm 1
(set! cvl-carrier '((pau T A ) (pau)))
(define (list-cv1)
(apply append
(mapcar
(lambda (v)
(mapcar
(lambda (c)
(list
(list (string-append c "-" v))
(append (car cv1-carrier)(list c v)(car(cdr cv1-carrier))))
)(append consonants_can_stay_last consonants_cannot_stay_last)
)
)(append vowels_can_stay_last vowels_must_stay_last)
)
)
)
Bảng 11 Diphone phụ âm – nguyên âm 2
(set! cv2-carrier '((pau T A ) (N pau)))
(define (list-cv2)
(apply append
(mapcar
(lambda (v)
(mapcar
(lambda (c)
(list
(list (string-append c "-" v))
(append (car cv2-carrier)(list c v)(car(cdr cv2-carrier))))
)(append consonants_can_stay_last consonants_cannot_stay_last)
)
) vowels_cannot_stay_last
)
)
)
- 26 -
3.4.6 Diphone giữa nguyên âm – phụ âm
Đây chính là cơng đoạn khĩ khăn nhất trong việc xây dựng tập các diphone cho
tiếng Việt. Nguyên nhân là do ta khơng thể đưa ra một quy tắc chung nào cho việc liệt
kê danh sách của các diphone giữa nguyên âm – phụ âm. Ở cơng đoạn này, tơi hồn
làm thủ cơng, liệt kê danh sách các diphone này. Cụ thể chúng ta cĩ 89 diphone.
Bảng 12 Diphone nguyên âm – phụ âm
(set! vc-carrier '((pau T A T) ( pau)))
(set! valid_vc '(
(A C) (A CH) (A M) (A N) (A NG) (A NH) (A T)
(Aw C) (Aw M) (Aw N) (Aw NG) (Aw t)
(AA C) (AA M) (AA N) (AA NG) (AA t)
(E C) (E M) (E N) (E NG) (E t)
(Ee CH) (Ee M) (Ee N) (Ee NG) (Ee NH) (Ee T)
(I CH) (I M) (I N) (I NG) (I t)
(O C) (O M) (O N) (O NG) (O t)
(Oo C) (Oo M) (Oo N) (Oo NG) (Oo t)
(Ow C) (Ow M) (Ow N) (Ow NG) (Ow t)
(U C) (U M) (U N) (U NG) (U t)
(Uw C) (Uw M) (Uw N) (Uw NG) (Uw t)
(Y T) (Y CH)
(OA C) (OA CH) (OA M) (OA N) (OA NG) (OA T)
(OE N) (OE T)
(UY T)
(IEe C) (IEe M) (IEe N) (IEe NG) (IEe T)
(OAw C) (OAw M) (OAw N) (OAw NG) (OAw T)
(OO NG)
(UAa N) (UAa T)
(UYEe N) (UYEe T)
(UOo C) (UOo M) (UOo N) (UOo NG) (UOo T)
))
(define (list-vc)
(mapcar
(lambda (z)
(set! v (car z))
(set! c (car (cdr z)))
(list
(list (string-append v "-" c))
(append (car vc-carrier) (list v c) (car (cdr vc-carrier))))
)
valid_vc)
)
3.5 Carrier và ý nghĩa của nĩ
Ta hồn thành việc tạo danh sách diphone bằng cách gọi: festival –b
festvox/diphlist.scm festvox/vn_schema.scm ‘(diphone-gen-schema “vn”
“etc/vndiph.list”)’. Lúc này, chúng ta cĩ thể xem tồn bộ danh sách các diphone và
carrier chứa nĩ trong file etc/vndiph.list
- 27 -
Sau khi đã hồn thành việc tạo danh sách 1309 diphone, nếu ta thu âm ngay các
diphone này để thực hiện ghép nối thì chúng ta hồn tồn cĩ thể thu đươc một tiếng
nĩi ở mức trung bình. Nguyên nhân của điều này là do ta thu từng diphone tại các thời
điểm khác nhau nên khi ghép hai diphone, tần số tại điểm cần ghép là khơng tương
đương nhau. Ngồi ra, cịn do cách đọc các diphone dài hoặc ngắn khác nhau tại mỗi
thời điểm nên tiếng nĩi sau khi ghép khơng được như mong muốn. Để tăng cường chất
lượng cho tiếng nĩi tổng hợp, người ta đưa ra khái niệm carrier.
Để tăng chất lượng cho tiếng nĩi, đồng thời với việc tạo ra danh sách các
diphone, người ta đã nghĩ ra một giải pháp khắc phục nhược điểm này. Thay vì chỉ đọc
một diphone, ta sẽ đọc một câu trong đĩ cĩ chứa diphone đĩ. Diphone sau đĩ sẽ được
trích ra, việc này giúp giảm thiểu những ảnh hưởng do âm điệu của người đọc vì khi
đọc một đoạn dài cĩ chứa diphone, người đọc cĩ xu hướng đọc đều hơn và ta cĩ thể
thu được một diphone mong muốn. Câu gồm nhiều diphone và khơng cĩ nghĩa này
chính là carrier.
Ta phải nhúng các diphone cần thu âm vào carrier theo ý của ta. Các đoạn code ở
phía trên đây đã cĩ một bước thực hiện việc nhúng các diphone nay vào các carrier
(các đoạn code in nghiêng). Tơi đã quy định với mỗi loại diphone thì carrier lại cĩ một
định dạng riêng như sau:
Bảng 13 Khai báo các carrier
(set! silc-carrier '(() (A T A pau)))
(set! silv-carrier '(() (N N A pau)))
(set! csil-carrier '((pau T A T A) ()))
(set! vsil-carrier '((pau T A T ) ()))
(set! cv1-carrier '((pau T A ) (pau)))
(set! cv2-carrier '((pau T A ) (N pau)))
(set! vc-carrier '((pau T A T) ( pau)))
Ý nghĩa của đoạn khai báo trên là tạo ra dạng của các carrier:
Với các diphone dạng âm câm – phụ âm như âm câm – B ta cĩ carrier là
“silence B A T A silence”.
Với các diphone dạng silence – nguyên âm như silence – A ta cĩ carrier là
“silence A N N A silence”.
Với các diphone dạng phụ âm – silence như T – silence ta cĩ carrier là
“silence T A T A T silence”.
Với các diphone dạng nguyên âm – silence như Ow – silence, ta cĩ carrier
là “silence T A T Ow silence”.
- 28 -
Với các diphone dạng phụ âm – nguyên âm (loại 1) như B – O ta cĩ
carrier là “silence T A B O silence”.
Với các diphone dạng phụ âm – nguyên âm (loại 2) như T – IEe ta cĩ
carrier là “silence T A T I Ee N silence”.
Với các diphone dạng nguyên âm – phụ âm như UYEe – T ta cĩ carrier là
“silence T A T UYEe T silence”
Điều quan nhất là các carrier khơng cĩ nghĩa cụ thể nên người đọc khơng thể
hiện sự biến thiên về ngơn điệu và duration (khoảng thời gian kéo dài của âm vị) khi
đọc chúng. Đặc biệt với các diphone được lấy ra từ giữa của một carrier, ảnh hưởng tại
điểm khớp nối sẽ được làm giảm tới mức cực tiểu.
3.6 Ánh xạ các phone tiếng Việt sang tiếng Anh
Ngồi việc nhúng các diphone vào carrier, ta cịn phải ánh xạ mỗi phone tiếng
Việt sang một phone cĩ cách đọc gần giống trong tiếng Anh. Mục đích của việc ánh xạ
các phone tiếng Việt sang tiếng Anh là để Festival cĩ thể đọc được và cĩ thể tự động
trích được diphone mong muốn ra khỏi carrier.
Festival cĩ cung cấp 4 bộ phone chuẩn (2 Anh – Anh, 2 Anh – Mỹ). Giả sử ta cĩ
một carrier “silence – a – n – a – silence” và ta mong muốn trích được diphone “a –
silence” ra khỏi carrier. Với việc ta ánh xạ phone tiếng Việt sang phone tiếng Anh,
Festival sẽ tự đọc carrier trên theo giọng đọc của Festival. Nhờ vậy, khi sau khi ta thu
âm carrier của ta và so sánh với carrier do Festival đọc, Festival cĩ thể tự trích lấy
diphone “a – silence” mà ta mong muốn. Dưới đây là ví dụ bảng ánh xạ mà tơi đã thực
hiện trong file vn_schema.scm [13]:
Bảng 14 Ví dụ ánh xạ phone tiếng Việt sang phone tiếng Anh
Phone tiếng Việt Phone tiếng Anh Phone tiếng Việt Phone tiếng Anh
A aa Ow er
O ow D dh
E eh Uw uh
Aw ae GI jh
- 29 -
Sinh khi thực hiện việc ánh xạ này xong, chúng ta cĩ thể sinh ra cách đọc của
Festival cho các carrier của chúng ta bằng lệnh: festival –b festvox/diphlist.scm
festvox/vn_schema.scm ‘(diphone-gen-waves “prompt-wav” “prompt-lab”
“etc/vndiph.list”)’ Lệnh này cũng đồng thời sinh ra “nhãn” của các diphone được
Festival đọc. “Nhãn” ở đây cĩ ý nghĩa là thời điểm đọc của các diphone.
3.7 Thu âm
Sau khi đã sinh được danh sách các diphone, ta cĩ thể kiểm tra lại trong file
etc/vndiph.list sẽ cĩ 1309 diphone tiếng Việt.
Để thu âm đạt được kết quả cao, ta cần các điều kiện sau:
Về phịng thu: Phịng thu phải đảm bảo các yếu tố về cách âm. Đây là điều
rất quan trọng ảnh hưởng đến chất lượng tiếng nĩi được tổng hợp. Ngồi
ra, nếu thu trong nhiều ngày, phịng thu cần phải cĩ độ ẩm và nhiệt độ
tương đương nhau.
Về thiết bị thu: Chúng ta cần một micro tốt và card sound tốt. Micro tốt là
micro cĩ khả năng lọc được nhiễu ở đầu vào, âm thanh thu đạt độ trung
thực cao. Card sound cĩ nhiệm vụ chính là chuyển tín hiệu rời rạc (digital)
ở đầu ra thành tín hiệu sĩng (analog). Card sound tốt sẽ giúp cho chất
lượng tiếng nĩi tổng hợp được trơn hơn. Ngồi ra, card sou
Về người đọc: Chúng ta cần một người cĩ giọng đọc chuẩn, khơng mang
tính địa phương. Giọng đọc khơng quá cao hoặc quá thấp. Người đọc cần
phải thu âm trong trạng thái khỏe mạnh, khơng bị các bệnh tai, mũi, họng.
Nếu thu âm trong nhiều ngày thì nên thu âm vào cùng một thời điểm trong
ngày.
Một phịng thu ở studio với hệ thống âm thanh hiện đại và MC chuyên nghiệp là
một điều kiện lý tưởng. Tuy nhiên, trong khuơn khổ khĩa luận này, tơi khơng cĩ đủ
khả năng để cĩ được điều kiện lý tưởng như vậy. Tơi thực hiện việc thu âm này trên
máy tính cá nhân và một micro khơng thật tốt.
Festival cĩ hỗ trợ chúng ta hàm prompt-them cho phép chúng ta thu âm liên tiếp
các diphone theo thứ tự từ carrier thứ X trở đi: “bin/prompt-them etc/vndiph.list X”. Ở
đây X mặc định bằng 1.
- 30 -
3.8 Đánh nhãn các diphone
Sau khi thực hiện việc thu âm xong, chúng ta đã cĩ tập âm các carrier. Để trích
các diphone ra, ta thực hiện việc đánh “nhãn” các diphone với hàm make_labs của
festival: bin/make_labs prompt-wav/*.wav. “Nhãn” ở đây là thời điểm chúng ta đọc
từng diphone trong carrier. Từ “nhãn” này cĩ thể dễ dàng sinh ra cách đọc của các
diphone. Sau quá trình trên, với mỗi file wav thu âm giọng đọc, chúng ta cĩ một file
lab lưu thơng tin về điểm bắt đầu và điểm kết thúc của diphone. Dưới đây là hình ảnh
biểu diễn dạng sĩng của một carrier và diphone đã được được đánh nhãn [2]:
Hình 9 Biểu diễn dạng sĩng của một carrier và đánh nhãn diphone
3.9 Tìm pitchmark
Hàm make_pm_wave tìm ra các điểm pitch trong biểu diễn dạng sĩng của
diphone thu được. “bin/make_pm_wave etc/vndip.list”
Tiếp đĩ, hàm make_pm_fix di chuyển các điểm pitch về các điểm phù hợp nhất
sao cho biểu diễn dạng sĩng phone khớp nối trong hai diphone cần ghép nối giống
nhau. “bin/make_pm_fix etc/vndiph.list”.
- 31 -
Lúc này, ta đã cĩ một cơ sở dữ liệu cách đọc các diphone đầy đủ.
3.9.1 Các bước để lấy pitchmark tốt
Festival đã hỗ trợ việc lấy pitchmark tự động tuy nhiên việc lấy được pitchmark
tốt là rất quan trọng, một đoạn carrier cĩ quá nhiều, hay quá ít pitchmark đều khơng
tốt. Lấy pitchmark tự động rất dễ bị rơi vào trường hợp này. Đây là cách tơi thực hiện
để cĩ thể lấy được một pitch mark tốt dựa theo hướng dẫn của [15].
Script make_pm_wave cĩ được gọi với một vài tham số mà ta cần phải quan tâm
như sau:
min – là khoảng thời gian ngắn nhất giữa hai pitchmark (được tính bằng
giây)
max – là khoảng thời gian dài nhất giữa hai pitchmark (được tính bằng
giây)
def – là chu kỳ pitchmark mặc định. Thơng thường được đặt là 0.01 giây.
wave_end – đặt pitch mark cuối cùng ở kết thúc của sĩng.
lx_lf – cận dưới của tần số
lx_hf – cận trên của tần số
Các bước để lấy pitch của 1 file, ví dụ file wav/vn_0001.wav:
Sửa giá trị min và max cho phù hợp với giọng người đọc. Một người đọc
là nam nên đặt min = 0.005, max = 0.012 (tức là 200 đến 80 Hz). Nếu
người đọc là nữ, nên đặt min = 0.0033, max = 0.7 (tương đương với (300
tới 140 Hz).
Chạy script bin/make_pm_wave wav/vn_0001.wav để lấy pitchmark.
Chạy script make_pmlab_pm. Script này đổi file pitchmark thành một file
cĩ thể biểu diễn được bằng cơng cụ emulabel (cơng cụ đã cĩ sẵn trong
Festival): bin/make_pmlab_pm pm/vn_0001.pm
Xem các pitchmark bằng cách gọi emulabel etc/emu_pm vn_0001
- 32 -
Hình 10 Pitchmark của sĩng "taa taa taa"
Ta phải lặp lại việc hiệu chỉnh các thơng số cho tới khi thu được một pitch mark
như ý.
3.10 Kiểm thử
Sau khi hồn thành việc đánh pitchmark, ta đã cĩ thể thử nghiệm hệ thống của
chúng ta bằng cách load diphone chúng ta vừa thu được:
festival festvox/vnu_vn_ldk_diphone.scm “(voice_vnu_vn_ldk_diphone)”
festival> (SayPhones ‘(pau x i n ch a o))
Thực tế cho thấy đây là giai đoạn tốn nhiều thời gian nhất. Giai đoạn này đi kèm
với việc thu đi thu lại các diphone, đánh pitchmark lại.
3.11 Thêm dấu cho tiếng Việt
Thư viện Festival cĩ cung cấp cho chúng ta chương trình ToBI cho phép chúng
ta truy cập trực tiếp vào sĩng âm thanh (utterance). Để sử dụng được chương trình này
ta thực hiện các bước sau: [5]
festival/ %FESTIVALDIR%/lib/tobi_rules.scm
festival> (require ‘tobi_rules)
festival> (setup_tobi_f0_method)
Tất cả các dữ liệu trong thư viện festival được lưu trữ dưới dạng utterance. Một
utterance cĩ thể ở dạng: xâu (Words), sĩng âm (Wave), số (Number). Festival đồng
- 33 -
thời cũng cung cấp cho chúng ta các hàm để truy cập, thay đổi giá trị các utterance
này. Dưới đây là các câu lệnh để khởi tạo một utterance dạng xâu, tổng hợp utterance
đĩ thành dạng sĩng và phát ra loa:
festival>(set! myUTT (Utterance Words (chao)))
festival>(utt.synth myUTT)
festival>(utt.play myUTT)
Đoạn chương trình trên sẽ phát ra chữ “chao”.
Việc bỏ dấu cho một tiếng chính là việc thay đổi tần số F0 của sĩng âm thanh.
Các utterance cĩ giá trị accent (trọng âm) và tone (âm). Ta cĩ thể thay đổi 2 giá trị này
để tạo ra thanh điệu. ToBI cung cấp một số giá trị để thay đổi. Ta cĩ thể thay đổi L*,
L+, L-, H+, H-, H%, !H [11]
Dựa trên các nghiên cứu ở mục (2.5) và qua quá trình kiểm thử, tơi đã thay đổi
các giá trị sĩng âm để tạo ra thành cơng 4 / 6 thanh điệu của tiếng Việt.
Đây là các lệnh cần thực hiện để tạo ra tiếng: “Chào”
festival>(set! myUTT (Utterance Words ((chao ((accent L*) (tone L-))))))
festival>(utt.synth myUTT)
festival>(utt.play myUTT)
Với giá trị accent là L* và tone là H-H%, ta cĩ thể tạo ra âm “chão”.
Với giá trị accent là H* và tone là H-H%, ta cĩ thể tạo ra âm “cháo”.
- 34 -
Chương 4 Tổng kết
4.1 Kết quả thu được
Hệ thống TTS cho tiếng Việt mà tơi đã xây dựng đã tạo ra được một tiếng nĩi
thỏa mãn yêu cầu quan trọng nhất là phát âm khơng sai và con người cĩ thể nghe hiểu
được. Tiếng nĩi được tổng hợp cĩ độ tự nhiên, khơng rời rạc. Các từ trong câu được
đọc một cách liền mạch, trơn chu. Kết quả thu được này cĩ thể nĩi là đã đạt được mục
đích ban đầu đặt ra khi thực hiện khĩa luận này.
Cĩ thể kết luận rằng, với hệ thống TTS cho tiếng Việt, phương pháp ghép nối
diphone thể hiện được nhiều ưu điểm vượt trội so với các phương pháp tổng hợp khác
như Formant. Cĩ thể khẳng định rằng, tại thời điểm hiện nay, đây là phương pháp
thích hợp nhất.
Đã thử nghiệm thành cơng việc thay đổi tần số của sĩng âm để tạo ra dấu cho
tiếng Việt. Tuy vậy, tơi mới chỉ thay đổi được tần số của sĩng âm để tạo ra 4 trong số
6 thanh của tiếng Việt.
Trong khuơn khổ khĩa luận này, tơi cũng chưa chú ý đến xử lý ngữ điệu của văn
bản trong khi tổng hợp. Đây chính là điểm mà TTS tiếng Anh đang vượt xa các hệ
thống TTS của các ngơn ngữ khác
4.2 Các khĩ khăn thách thức
Trong quá trình thực hiện việc thử nghiệm tổng hợp tiếng nĩi tiếng Việt sử dụng
phương pháp ghép nối diphone, tơi đã gặp nhiều khĩ khăn, trong đĩ cĩ cả những khĩ
khăn về chủ quan lẫn khách quan.
Một khĩ khăn rất lớn tơi đã gặp phải khi thực hiện đề tài này là việc sử dụng bộ 3
thư viện mã nguồn mở Festival, Festvox, Speech Tools. Ba thư viện này đã được cập
nhật các phiên bản mới hơn nhưng hướng dẫn sử dụng lại khơng được cập nhật đồng
thời. Vì vậy, tơi đã mất rất nhiều thời gian để xem lại mã nguồn của 3 thư viện này.
Bản thân tiếng Việt tuy cĩ nhiều thuận lợi hơn so với các ngơn ngữ khác nhưng
lại cĩ những đặc trưng riêng và thanh điệu gây khĩ khăn cho việc tổng hợp.
Một khĩ khăn nữa là tơi khơng cĩ một phịng thu đảm bảo, khơng cĩ một micro
thật tốt và khơng cĩ một giọng đọc tốt.
- 35 -
Đây là lần đầu tiên tơi rời xa Windows và thực sự làm việc nghiêm túc trên mơi
trường Linux. Những khĩ khăn do mơi trường làm việc mới là khơng thể tránh khỏi.
Tuy vậy, sau một thời gian nghiên cứu, tìm hiểu, những khĩ khăn này khơng cịn là
cản trở lớn.
Dù vậy, tơi hài lịng với những kết quả đã đạt được.
4.3 Các hướng nghiên cứu phát triển tiếp theo
Đề tài tổng hợp tiếng nĩi tiếng Việt sử dụng phương pháp ghép nối diphone mà
tơi thực hiện cịn nhiều hạn chế, cịn rất nhiều hướng để cĩ thể tiếp tục nghiên cứu,
phát triển tiếp:
Ta cĩ thể xây dựng lại tập phone đầy đủ (cĩ dấu) cho tiếng Việt. Phát triển theo
hướng tự đánh nhãn, khơng phụ thuộc vào giọng đọc của Festival. Cách làm này sẽ rất
vất vả trong việc đánh nhãn do sẽ phải thực hiện tồn bộ bằng tay, nhưng sẽ mang lại
một giọng nĩi tổng hợp chính xác về thanh điệu, trơn chu và tự nhiên.
Ta cĩ thể phát triển tiếp theo hướng nghiên cứu sâu hơn về kỹ thuật sửa đổi sĩng
âm để cĩ thể tạo ra thanh điệu. Nếu thành cơng, đây sẽ là cách tổng hợp hiệu quả nhất,
cả về chất lượng cũng như tiết kiệm về cơ sở dữ liệu phải lưu trữ.
Tập trung nghiên cứu về ngữ điệu của tiếng Việt và thực hiện một hệ thống TTS
cĩ ngữ điệu.
- 36 -
Tài liệu tham khảo
[1] Mai Ngọc Chử, Vũ Đức Nghiệu, Hồng Trọng Phiến: “Cơ sở ngơn ngữ
học và Tiếng Việt”, NXB Giáo dục (2000)
[2] Nguyễn Thị Hương, “Tổng hợp tiếng nĩi từ văn bản tiếng Việt bằng
phương pháp ghép nối diphone”, (2005)
[3] Đồn Thiện Thuật, “Ngữ âm tiếng Việt”, NXB Đại học Quốc Gia Hà Nội
(1999)
[4] ổng_hợp_giọng_nĩi
[5] Alan W Black, Paul Taylor, Richard Caley, “The Festival Speech
Synthesis System” (1999)
[6] Alan W Black, Paul Taylor, Richard Caley, Simon King, “Edinburgh
Speech Tools Library”, (1999)
[7] Alan W Black, Kevin A Lenzo, “Building Synthetic Voices”, (2007)
[8] Nguyen Tien Dung, Hansjưrg Mixdorff, Luong Chi Mai, Ngo Huy Hoang,
Vu Kim Bang, “Fujisaki Model based F0 contours in Vietnamese TTS”
(2004)
[9] Tran Do Dat, Eric Castelli, Jean-Francois Serignat, Trinh Van Loan, Le
Xuan Hung, “Influence of F0 on Vietnamese syllable perception”
[10] Thierry Dotoit “High Quality Text-to-Speech Synthesis: A Comparison
of Four Candidate Algorithms” (1994)
[11] Janet Fletcher “Intonation and Prosody in Australian English and New
Zealand English”, STT 2006 workshop Auckland, New Zeland
[12] Carolie Hemptinne “Intergration of the harmonic plus noise model
(HNM) into the hidden Markov model-based speech synthesis system
(HTS)” (2006)
[13] James L.Hieronymus, Bell Laboratories, Murray Hill, “ASCII Phonetic
Symbols for the World’s Languages”
[14] Sami Lemetty, “Review of Speech Synthesis Technology”, (1999)
[15] J.A. Louw, “A Short Guide to Pitch-marking in the Festival Speech
- 37 -
Synthesis System and Recommendations for Improvements”
[16] Yannis Stylianou, Thierry Dutoit, Juergen Schroeter “Diphone
Concatenation using a Harmonic plus Noise Model of Speech”
[17] David Vandromme “Harmonic Plus Noise Model for Concatnenative
Speech Synthesis” (2005)
[18]
Các file đính kèm theo tài liệu này:
- LUẬN VĂN-THỬ NGHIỆM MỘT PHƯƠNG PHÁP TỔNG HỢP TIẾNG NÓI TỪ VĂN BẢN TIẾNG VIỆT.pdf