Nhiệm vụ: Xây dựng luồng TTS có quản lý cho các âm tiết và từ vựng học tập
Xây dựng luồng TTS có quản lý cho các âm tiết và từ vựng học tập
Thiết lập quy trình TTS tùy chỉnh có kiểm soát để tạo trước âm thanh cho các chữ cái, âm tiết và từ thay vì phụ thuộc vào SpeechSynthesis không thể đoán trước của trình duyệt.
Bối cảnh
Nhiệm vụ liên quan đến tính năng đọc văn bản của trình duyệt cmu326hnm0bbpqw0qh5fgsv2f.
Các thử nghiệm cho thấy SpeechSynthesisUtterance phát âm khá tốt nhiều từ đầy đủ, nhưng hoạt động kém và không ổn định với các chữ cái đơn lẻ, âm tiết ngắn và các phần của từ được cắt xén nhân tạo.
Các ví dụ quan sát được:
Собака(Con chó) — bình thường;Со— phát âm gần giốngС;Р— gần giốngЭ;Ры— bình thường;Свинь— có thể bị tách rời thành việc đọc tên các chữ cái;Пель— bình thường;Ковь,Солн— có thể bị đánh vần từng chữ cái;Ко→ khoảngКа;Ар→ khoảngА;Ре→ khoảngЭ;Де→Дэ.
Kết luận: Không thể coi TTS của trình duyệt là nguồn đáng tin cậy cho phát âm chuẩn sư phạm đối với cơ chế chữ cái → âm tiết → từ.
Mục tiêu
Xây dựng luồng TTS có quản lý của riêng bạn để tạo trước và kiểm tra âm thanh học tập.
Ý tưởng chính:
nội dung thẻ
↓
chữ cái / âm tiết / từ
↓
TTS có kiểm soát
↓
kiểm tra thủ công/tự động
↓
tệp âm thanh sẵn sàng
↓
ứng dụng chỉ phát âm thanh đã chuẩn bị trước
Trong quá trình chạy của ứng dụng học tập, không dựa vào giọng hệ thống của người dùng cho các phát âm quan trọng.
Những gì cần tạo
Tối thiểu:
- các chữ cái đơn lẻ, nơi phù hợp về mặt sư phạm;
- các âm tiết học tập;
- các từ đơn lẻ cho thẻ hình ảnh;
- các hướng dẫn/câu thoại ngắn của nhân vật nếu cần.
Đặc biệt quan trọng là tạo trước tất cả các âm tiết và từ thực sự được sử dụng trong nội dung học tập tĩnh.
Không cần một trình tạo vạn năng cho tất cả các tổ hợp có thể có của tiếng Nga. Chúng tôi chỉ tạo từ vựng thực sự có trong ứng dụng.
Yêu cầu đối với TTS
Cần một công cụ/dịch vụ có thể kiểm soát phát âm tốt hơn so với SpeechSynthesis của trình duyệt.
Các tính năng mong muốn:
- giọng nói ổn định giữa các lần tạo;
- kiểm soát ngôn ngữ
ru-RU; - kiểm soát tốc độ
rate; - kiểm soát cao độ
pitchnếu được hỗ trợ; - SSML hoặc cơ chế điều khiển phát âm tương tự;
- khả năng đặt khoảng dừng;
- khả năng ảnh hưởng đến việc đọc các chữ cái/âm tiết riêng lẻ;
- xuất kết quả sang WAV/MP3/OGG;
- kết quả có thể tái tạo khi tạo hàng loạt.
Nếu một TTS cụ thể đọc kém một âm tiết nào đó, phải có khả năng chỉ định một chuỗi TTS đặc biệt tách biệt với văn bản hiển thị.
Ví dụ:
type PronunciationAsset = {
text: string
ttsText?: string
audioSrc: string
}
trong đó:
{
text: 'КО',
ttsText: '<chuỗi đặc biệt/SSML để phát âm chính xác>',
audioSrc: '/audio/syllables/ko.mp3',
}
Luồng nội dung
Cung cấp một sổ đăng ký các đơn vị được tạo:
type TtsSourceItem = {
id: string
text: string
kind: 'letter' | 'syllable' | 'word'
ttsText?: string
voiceId?: string
rate?: number
pitch?: number
}
Ví dụ:
const items: TtsSourceItem[] = [
{
id: 'word-dog',
text: 'СОБАКА',
kind: 'word',
},
{
id: 'syllable-so',
text: 'СО',
kind: 'syllable',
ttsText: '...',
},
{
id: 'letter-r',
text: 'Р',
kind: 'letter',
ttsText: '...',
},
]
Sau đó là một tập lệnh/bước xây dựng riêng biệt:
items
→ TTS API
→ audio files
→ manifest
Manifest âm thanh hoàn chỉnh
Sau khi tạo, ứng dụng sẽ không còn hoạt động với TTS mà với các tài nguyên (asset) đã sẵn sàng.
Ví dụ:
type AudioAsset = {
id: string
text: string
kind: 'letter' | 'syllable' | 'word'
src: string
}
export const audioAssets: AudioAsset[] = [
{
id: 'word-dog',
text: 'СОБАКА',
kind: 'word',
src: '/audio/words/sobaka.mp3',
},
{
id: 'syllable-so',
text: 'СО',
kind: 'syllable',
src: '/audio/syllables/so.mp3',
},
]
Trong UI:
const audio = new Audio(asset.src)
audio.play()
Ý tưởng kiến trúc quan trọng
Tách biệt ba lớp:
Display text
≠
TTS input
≠
Generated audio asset
Điều này cho phép hiển thị СО cho trẻ em, nhưng gửi một chuỗi kỹ thuật/SSML khác đến TTS nếu đó là cách duy nhất để có được phát âm chính xác.
Nghĩa là không giả định rằng:
những gì hiển thị trên màn hình
=
những gì cần truyền tải nguyên văn cho TTS
Kiểm tra chất lượng
Mỗi đơn vị cần có trạng thái kiểm tra đơn giản:
type AudioReviewStatus =
| 'generated'
| 'approved'
| 'rejected'
Quy trình tối thiểu:
- tạo một loạt;
- nghe lại;
- đánh dấu các biến thể kém;
- điều chỉnh
ttsText/ giọng đọc / tham số; - tạo lại chỉ những mục bị từ chối;
- sau khi
approved, sử dụng asset trong ứng dụng.
Kiểm tra đặc biệt cẩn thận:
- các phụ âm đơn lẻ;
- âm tiết hai chữ cái;
- âm tiết có dấu mềm/cứng (
ь/ъ); - các phần của từ bị cắt xén;
- các tổ hợp mà TTS có thể nhầm là từ viết tắt.
Liên kết với nhân vật
Hệ thống nhân vật giọng nói có thể sử dụng cùng một luồng.
Nếu các nhân vật cần khác nhau về giọng đọc/nhịp độ/cao độ, đối với mỗi nhân vật bạn có thể:
- tạo một bộ asset riêng biệt;
- hoặc chỉ sử dụng các nhân vật cho các câu thoại không quan trọng, và giữ các chữ cái/âm tiết học tập ở một giọng chuẩn duy nhất.
Điều này cần được quyết định riêng sau khi ước tính khối lượng asset được tạo.
Giai đoạn thực tế đầu tiên
Không chọn ngay TTS cuối cùng.
Đầu tiên, so sánh một số ứng viên trên một tập thử nghiệm ngắn gồm các chuỗi có vấn đề:
Р
СО
РЫ
РЕ
ДЕ
КО
АР
СВИНЬ
ПЕЛЬ
КОВЬ
СОЛН
СОБАКА
СВИНЬЯ
Đánh giá cho mỗi ứng viên:
- tính chính xác của phát âm;
- độ ổn định;
- sự hiện diện của SSML/gợi ý âm vị (phoneme hints);
- chất lượng giọng tiếng Nga;
- khả năng tạo hàng loạt;
- chi phí;
- giới hạn bản quyền;
- sự thuận tiện khi lưu kết quả thành tệp âm thanh.
Sau đó, chọn TTS chính và tiến hành xây dựng luồng sản xuất (production pipeline).
Tiêu chí hoàn thành
Có một quy trình có thể tái tạo, lấy danh sách tĩnh các chữ cái/âm tiết/từ học tập để tạo ra các tệp âm thanh đã được kiểm chứng, lưu chúng dưới dạng asset của ứng dụng và cho phép ghi đè riêng biệt chuỗi TTS kỹ thuật cho các trường hợp ngoại lệ.