TIẾNG VIỆT CHẤT LƯỢNG TỐT
4.1. Đề xuất phương án xây dựng bộ tổng hợp tiếng Việt chất lượng tốt
Như đã phân tích chi tiết trong các chương trước về những ưu điểm, nhược điểm của các phương pháp tổng hợp và những mục tiêu đề ra của đề tài, chương này sẽ tập trung trình bày đề xuất nhằm nâng cao chất lượng của bộ tổng hợp tiếng Việt trên cơ sở đó tiến hành xây dựng cơ sở dữ liệu nhằm đảm bảo chất lượng của tiếng nói tổng hợp.
Tiếng Việt tổng hợp chất lượng tốt, theo chúng tôi phải là tiếng nói tiếng Việt gần giống với tiếng nói tự nhiên. Nói cách khác, các tham số của tín hiệu tiếng nói được tổng hợp là xấp xỉ với các tham số tín hiệu của tiếng nói tự nhiên. Đây chính là ý tưởng xuyên suốt trong quá trình thực hiện và triển khai đề tài.
Với các yêu cầu đã đề ra và những phân tích ở trên, để xây dựng bộ tổng hợp tiếng Việt chất lượng tốt cần thực hiện các công việc sau:
Xây dựng cơ sở dữ liệu đảm bảo tổng hợp tiếng Việt chất lượng tốt.
Xử lý và phân tích văn bản tiếng Việt.
Thực hiện tổng hợp tiếng Việt bằng phương pháp ghép nối và đề xuất một số giải pháp nhằm nâng cao chất lượng tiếng Việt tổng hợp.
Hình 4.1 – Sơ đồ khối quá trình tổng hợp tiếng Việt
Bắt đầu Văn bản đầu vào (text) Phân tích văn bản thành các đơn vị âm Tổng hợp (Ghép nối) Truy vấn cơ sở dữ liệu
Nâng cao chất lượng tiếng Việt tổng hợp
Đọc văn bản (audio) Kết thúc
4.2. Xây dựng cơ sở dữ liệu
Xây dựng cơ sở dữ liệu là bước rất quan trọng trong quá trình xây dựng bộ tổng hợp tiếng Việt chất lượng tốt. Bởi vậy, việc xây dựng cơ sở dữ liệu phải đáp ứng cho hệ tổng hợp tiếng Việt chất lượng tốt theo quan điểm tạo lại các thanh điệu tự nhiên nhất. Yếu tố dung lượng của cơ sở dữ liệu không phải được đặt lên hàng đầu trong trường hợp này mà chính là chất lượng thanh điệu. Để xây dựng được bộ cơ sở dữ liệu tốt, đáp ứng yêu cầu nêu trên, có hai vấn đề được quan tâm. Đó là cơ sở dữ liệu được xây dựng sẽ cho phép tổng hợp được các thanh điệu giống với tiếng nói tự nhiên và chất lượng tín hiệu tiếng nói ghi âm trong cơ sở dữ liệu phải tốt. Ngoài ra, chúng ta cần giải quyết các vấn đề như xây dựng ngữ liệu đầy đủ thỏa mãn theo yêu cầu đề ra, chọn giọng để thu và tổ chức kịch bản thu.
Để đáp ứng các yêu cầu nêu trên, cơ sở dữ liệu được xây dựng gồm các tập tin ghi âm, mỗi tập tin tương ứng với một âm tiết được thu. Mỗi âm tiết được thu sẽ chứa một đơn vị âm đã được xác định khi tổng hợp. Với ý tưởng đó, bất kỳ một âm tiết tiếng Việt nào đều được tách ra thành hai đơn vị âm, mà chúng tôi gọi là đơn vị âm đầu và đơn vị âm cuối. Trong đó, đơn vị âm đầu sẽ chứa thành phần chính là âm đầu. Đơn vị âm cuối chứa thành phần chính là âm chính trong bảng cấu trúc âm tiết tiếng Việt (Bảng 2.2). Dựa theo kết quả nghiên cứu của [7] và cách phân chia một âm tiết thành hai đơn vị âm, các đơn vị âm đầu sẽ ứng với thanh ngang, còn các đơn vị âm cuối ứng với tất cả 6 thanh. Vì vậy, khi xây dựng cơ sở dữ liệu cho các đơn vị âm đầu sẽ chỉ thu những đơn vị âm ứng với thanh ngang. Đối với đơn vị âm cuối thì thu đầy đủ cả 6 thanh.
4.2.1. Xây dựng danh sách các âm tiết cần thu
Dựa vào cấu trúc âm tiết tiếng Việt và dùng công cụ máy tính, chúng tôi đã lập danh sách đầy đủ các âm tiết chứa các đơn vị âm cần thu. Công việc xây
dựng danh sách được thực hiện bằng phương pháp tổ hợp nhằm vét cạn tất cả các trường hợp có thể có đối với các âm tiết tiếng Việt. Sau bước tổ hợp, tiến hành loại bỏ các trường hợp không có trong tiếng Việt, lọc ra một danh sách các âm cần thu bằng phương pháp thủ công. Các âm tiết được ghi âm dựa trên số lượng các đơn vị âm đầu và đơn vị âm cuối đã được xác định.
- Xây dựng đơn vị âm đầu: Bằng cách tổ hợp các phụ âm đầu với nguyên âm chính mang thanh ngang ta được 324 tổ hợp. Tiến hành loại bỏ thủ công các tổ hợp không có trong tiếng Việt ta thu được 294 tổ hợp. Chẳng hạn loại bỏ các tổ hợp không có trong tiếng Việt như: ce, cê, ci, nghu, nghư,…
- Xây dựng đơn vị âm cuối: Bằng cách tổ hợp phần âm đệm, âm chính và âm cuối trong bảng cấu trúc âm tiết tiếng Việt cuối cùng ta được 721 tổ hợp có trong tiếng Việt. Cụ thể, bằng cách tổ hợp âm đệm với âm chính và sau khi loại bỏ tổ hợp không có trong tiếng Việt ta được 187 tổ hợp. Tiếp tục lấy 187 tổ hợp này để tổ hợp với âm cuối sẽ thu được 2244 tổ hợp. Tiếp theo loại bỏ các tổ hợp không có trong tiếng Việt sẽ chỉ còn 721 tổ hợp. Chẳng hạn loại bỏ các tổ hợp không có trong tiếng Việt như: àt, ảt, ãt, àp, ảp, ãp, ă, ăi, â, âo,…
Tổng cộng có 1015 tổ hợp được xây dựng và số tổ hợp này được kết hợp với các ký tự cần thiết tạo thành danh sách các âm tiết cần thu. Trong số các âm tiết phải thu có một số âm tiết có phát âm trùng nhau. Vì vậy, khi thực hiện thu âm ta chỉ còn phải thu 976 âm tiết.
4.2.2. Xây dựng kịch bản thu
Khi đã có danh sách đầy đủ các âm tiết cần thiết, cần phải xây dựng kịch bản thu nhằm đảm bảo các đơn vị âm được thu cho kết quả tốt nhất.
Đối với các tổ hợp âm cuối, thực hiện ghép thêm âm /n/ hoặc /t/ vào đầu các âm này. Thí dụ, khi thu hai đơn vị âm cuối ưỡng, oan ta sẽ cho các âm tiết
tiết và đơn vị âm trong danh sách ghi âm sẽ thuận lợi hơn rất nhiều, đồng thời chất lượng vẫn được đảm bảo.
Để giảm tới mức thấp nhất hiện tượng đồng cấu âm giữa các âm tiết, danh sách các âm tiết cần thu sẽ được hiển thị một cách độc lập trên màn hình máy tính. Tại mỗi thời điểm chỉ cho phép một âm tiết cần thu được hiển thị và thời gian hiển thị một âm tiết là 1s.
4.2.3. Thu âm
Thiết bị thu là máy CSL Model 4500(Computerized Speech Lab, Model 4500) của KayPENTAX chuyên dùng để thu và phân tích tiếng nói. Môi trường thu được cách ly với tiếng ồn bên ngoài phòng thu. Quá trình thu âm được thực hiện tại phòng thu của Phòng Thí nghiệm Thiết kế Điện tử, Trường Đại học Bách khoa Hà Nội. Tín hiệu thu được lấy mẫu ở tần số 16000Hz và 16 bit cho một mẫu. Người phát âm sẽ đọc đều, rõ ràng và dứt khoát các âm tiết cần thu. Với tốc độ phát âm trung bình là 250ms cho một âm tiết, tổng thời gian thu liên tục kéo dài trong 244000ms (tức 244s).
Hình 4.2 – Thiết bị thu âm CSL Model 4500
Thời gian thu mỗi bộ 976 âm tiết liên tục là 20 phút (tính cả thời gian nghỉ giữa các âm tiết). Tổng dung lượng của 1015 âm tiết là 10MB cho mỗi giọng. Đây là cơ sở dữ liệu xây dựng để phục vụ cho mục đích nghiên cứu. Với các ứng
dụng thực tế, sau khi tách lấy đơn vị âm đầu hoặc đơn vị âm cuối dùng cho tổng hợp, phần còn lại sẽ được cắt bỏ. Khi đó dung lượng sẽ giảm chỉ còn khoảng 5,8MB. Theo kết quả tính toán, tỷ số tín hiệu trên nhiễu của cơ sở dữ liệu đã được xây dựng trung bình là 21dB. Đây là kết quả chấp nhận được.
4.2.4. Tách lấy âm tiết
Sau bước thu âm, kết quả ta nhận được là một cơ sở dữ liệu gồm các tập tin dữ liệu ghi âm có định dạng *.wav. Bước tiếp theo, chúng ta sẽ thực hiện tách các âm tiết từ danh sách ghi âm. Trong đó, mỗi âm tiết được tách sẽ được lưu ra thành một tập tin tương ứng và chúng được đặt tên theo một quy ước thống nhất. Ở đây tên của các âm tiết sẽ được đặt tên của đơn vị âm mà nó sẽ được lấy ra khi tổng hợp. Ví dụ: ta cần có đơn vị âm là oán thì ta sẽ thu âm toán và đặt tên là
oans.wav giống cách gõ tiếng Việt theo chuẩn Telex. Để có thể tách các âm tiết một cách chính xác nhằm đảm bảo không mất thông tin khi tổng hợp, ta cần thực hiện theo các bước sau đây:
Bước 1: Tiền xử lý, thực hiện xử lý sơ bộ các tập tin trong cơ sở dữ liệu thu, nhằm loại bỏ những đoạn nhiễu, những âm tiết bị lỗi trong khi thu, đồng thời kiểm tra và sắp sếp thứ tự các âm tiết được thu theo đúng danh sách cần thu, mục đích của việc kiểm tra và sắp xếp này nhằm có thể tự động hóa quá trình tách âm tiết. Tất cả các thao tác trong bước tiền xử lý này sẽ được thực hiện bởi trên chương trình editsig được viết bằng MatLab.
Bước 2: Thực hiện cắt âm tiết, sau khi đã thực hiện tốt quá trình tiền xử lý đối với các tập tin ghi âm trong cơ sở dữ liệu thu. Bước tiếp theo, thực hiện tách các âm tiết trong cơ sở dữ liệu thu ra thành các âm tiết độc lập, mỗi âm tiết tương ứng với một tập tin riêng. Quá trình này được thực hiện như sau: nạp tập tin ghi âm và tập tin chứa danh sách tên các âm tiết cần tách ra trong tập tin ghi âm tương ứng vào trong chương trình. Sau đó, quá trình cắt và lưu các âm tiết được
thực hiện tự động bằng chương trình silencedetect. Tuy nhiên, để đảm bảo việc cắt được thực hiện chính xác, thông thường trước khi thực hiện cắt tự động chúng ta nên có thao tác kiểm tra thủ công toàn bộ các điểm cắt mà chương trình đã dò tìm được xem chúng đã được đặt đúng vị trí hay chưa, nếu cần ta có thể điểu chỉnh cho phù hợp ngay trên giao diện chương trình, trong trường hợp có quá nhiều từ thiếu chính xác thì ta có thể trực tiếp thay đổi các tham số của chương trình như: giá trị ngưỡng năng lượng của đoạn tín hiệu bắt đầu và kết thúc của âm tiết, kích thước cửa sổ xử lý,… Sau đó ta cần cập nhật các tham số này để quá trình dò tìm được thực hiện lại với tham số mới và cứ tiếp tục kiểm tra như vậy. Quá trình này được thực hiện cho tới khi nào chúng ta nhận thấy kết quả là chính xác thì lúc đó quá trình cắt và lưu tập tin mới được thực hiện tự động.
Hình 4.3 – Giao diện xử lý của chương trình editsig
Trong cơ sở dữ liệu tiếng Việt, khi cắt âm tiết ta đặc biệt lưu ý đối với danh sách các đơn vị âm đầu như ta, xa, cha, nha, la, sa, da,…. Nếu chúng được lưu trên
cùng một tập tin dữ liệu ghi âm thì quá trình dò tìm các điểm cắt thường không chính xác cho tất cả các âm tiết trong danh sách này. Sở dĩ là trong danh sách tồn tại một số âm tiết có chứa ký tự khi phát âm là vô thanh như âm tiết xa, sa, … và một số âm tiết khác thì không như từ la, nha,… vì thế các tham số đã thiết lập trong chương trình không thể phù hợp cho cả hai loại âm tiêt này khi dò tìm điểm cắt. Vì vậy, đối với các trường hợp này thì thường ta cần phải kiểm tra để điểu chỉnh trực tiếp trên giao diện chương trình bằng tay trước khi thực hiện việc cắt tự động minh họa hình 4.4.
Hình 4.4 – Giao diện xử lý của chương trình silencedetect.
Bước 3: Thực hiện quá trình lặp tương tự với bước1 và bước 2 đối với các tập tin khác trong cơ sở dữ liệu cho tới khi kết thúc.
4.2.5. Tách lấy đơn vị âm
Việc tách lấy các đơn vị âm trong các âm tiết tương ứng đã được thu và tách ra ở trên là yếu tố rất quan trọng, việc làm này có ảnh hưởng trực tiếp đến chất lượng tiếng nói tổng hợp sau này. Hơn thế nữa, công việc này đòi hỏi rất nhiều
thời gian và công sức thực hiện. Chính vì vậy, ngay từ khi thu âm, chúng tôi đã phải tính đến vấn đề này và đã xây dựng kịch bản thật chi tiết sao cho có thể thực hiện việc tách các đơn vị âm một cách dễ dàng nhất. Thí dụ, đối với các đơn vị âm đầu, chúng tôi chọn các âm được bắt đầu bằng ”t” hoặc “n” khi thu. Sở dĩ chọn âm t vì thời gian phát âm t trong một âm tiết là rất ngắn, nên khi tách ta cũng dễ dàng ước lượng được phần tín hiệu của âm này trong âm tiết cần thu. Còn đối với âm “n” ta rất dễ nhận ra phần tín hiệu của âm “n” nên việc tách các âm cũng trở lên dễ dàng hơn. Tất cả các lý do đã nêu đều đưa đến một mục đích chung là có thể thực hiện việc tách đơn vị âm trong từ một cách nhanh chóng, dễ dàng và chính xác. Tuy nhiên, để có cơ sở dữ liệu tốt thì nhất thiết việc tách các đơn vị âm vẫn cần rất nhiều công sức, kinh nghiệm cũng như kiến thức chuyên môn trong việc phân tích tín hiệu cũng như phân tích ngữ âm học.
Để thực hiện quá trình tách các đơn vị âm được nhanh, chính xác và trực quan, trong đề tài này chúng tôi có sử dụng tới chương trình psolatools để hỗ trợ quá trình tách. Vì thế, thời gian thực hiện tách đã giảm đi đáng kể nhưng vẫn đảm bảo tính chính xác cao. Chương trình có hỗ trợ một số chức năng như chức năng tổng hợp. Chức năng này cho phép người dùng có thể tổng hợp trực tiếp các đơn vị âm vừa tách để đánh giá chất lượng, từ đó có điều chỉnh kịp thời vị trí điểm cắt nếu cần. Đây là cơ sở dữ liệu xây dựng nhằm mục đích cho nghiên cứu, nên thông tin về điểm cắt được xác định và lưu ở một tập tin đã được định dạng sẵn. Tập tin này có tên trùng với tên tập tin ghi âm, nhưng có định dạng khác(* .pim) còn tập tin ghi âm tương ứng ban đầu vẫn được bảo toàn nguyên vẹn. Chính vì điều này mà thông tin về điểm cắt sau khi được xác định có thể điều chỉnh lại nếu cần nhằm nâng cao chất lượng tiếng nói được tổng hợp.
Hình 4.5 – Giao diện xử lý của chương trình psolatools.
4.2.6. Xử lý các điểm cắt và lưu trữ dữ liệu
Ngoài việc xác định đúng các âm cần tổng hợp trong âm tiết đã thu, chúng ta cần phải xử lý chính xác các điểm cắt và lưu thông tin này vào tập tin dữ liệu có định dạng *.pim. Để đảm bảo quá trình ghép các đơn vị âm khi tổng hợp được tốt, các điểm cắt cần thỏa mãn các điều kiện sau:
Điểm cắt được xác định trong vùng ổn định của tín hiệu, tức là đoạn tín hiệu ít có sự biến thiên nhất về mặt biên độ, phổ.
Điểm cắt phải nằm trong phần ổn định của nguyên âm.
Điểm cắt phải là điểm có giá trị cực đại hoặc cực tiểu địa phương trong vùng được cắt để khi tổng hợp tránh sự lệch pha (trong đề tài này tôi chọn điểm cắt tại điểm có biên độ cực tiểu)
Để phục vụ tốt quá trình tổng hợp sau này, trong các tập tin *.pim có chứa thông tin về vị trí điểm cắt của các đơn vị âm đầu, ngoài ra còn lưu thêm các thông tin về vị trí của điểm chuyển tiếp giữa phụ âm và nguyên âm trong đơn vị
âm đầu và các điểm cực tiểu trong đoạn này, như minh họa trên hình 4.7 và hình