Menggunakan penilaian pengucapan
Dalam artikel ini, Anda akan mempelajari cara menggunakan penilaian pengucapan melalui SDK Azure Cognitive Service untuk Ucapan.
Catatan
Penilaian pengucapan tidak tersedia dengan Speech SDK untuk Go. Anda dapat membaca tentang konsep di bawah ini, tetapi Anda harus memilih bahasa pemrograman lain untuk detail implementasi.
Anda bisa mendapatkan skor penilaian pengucapan untuk:
- Teks lengkap
- Kata
- Grup suku kata
- Fonem dalam format SAPI atau IPA
Catatan
Untuk informasi tentang ketersediaan penilaian pengucapan, lihat bahasa yang didukung dan wilayah yang tersedia.
Grup suku kata, fonem IPA, dan fitur fonem lisan penilaian pengucapan saat ini hanya tersedia untuk lokal en-US.
Parameter konfigurasi
Tabel ini mencantumkan beberapa parameter konfigurasi utama untuk penilaian pengucapan.
| Parameter | Deskripsi |
|---|---|
ReferenceText |
Teks pengucapan yang akan dievaluasi. |
GradingSystem |
Sistem poin untuk kalibrasi skor. Sistem FivePoint memberikan skor poin floating 0-5, dan HundredMark memberikan skor poin floating 0-100. |
Granularity |
Menentukan tingkat granularitas evaluasi terendah. Skor untuk tingkat di atas atau sama dengan nilai minimal dikembalikan. Nilai yang diterima adalah Phoneme, yang menunjukkan skor pada teks lengkap, tingkat kata, suku kata, dan fonem, Syllable, yang menunjukkan skor pada teks lengkap, kata dan tingkat suku kata, Word, yang menunjukkan skor pada teks lengkap dan tingkat kata, FullText, yang menunjukkan skor hanya pada level teks lengkap. Teks referensi lengkap yang disediakan dapat berupa kata, kalimat, atau paragraf, dan hal tersebut tergantung pada teks referensi input Anda. |
EnableMiscue |
Memungkinkan perhitungan miscue ketika kata-kata yang diucapkan dibandingkan dengan teks referensi. Jika nilai ini adalah True, nilai hasil ErrorType dapat diatur ke Omission atau Insertion berdasarkan perbandingan. Nilai yang diterima adalah False dan True. Default: False. |
Anda harus membuat objek PronunciationAssessmentConfig dengan teks referensi, sistem penilaian, dan granularitas. Mengaktifkan pengaturan konfigurasi kesalahan dan lainnya bersifat opsional.
var pronunciationAssessmentConfig = new PronunciationAssessmentConfig(
referenceText: "good morning",
gradingSystem: GradingSystem.HundredMark,
granularity: Granularity.Phoneme,
enableMiscue: true);
auto pronunciationAssessmentConfig = PronunciationAssessmentConfig::CreateFromJson("{\"referenceText\":\"good morning\",\"gradingSystem\":\"HundredMark\",\"granularity\":\"Phoneme\"}");
PronunciationAssessmentConfig pronunciationAssessmentConfig = PronunciationAssessmentConfig.fromJson("{\"referenceText\":\"good morning\",\"gradingSystem\":\"HundredMark\",\"granularity\":\"Phoneme\"}");
pronunciation_assessment_config = speechsdk.PronunciationAssessmentConfig(json_string="{\"referenceText\":\"good morning\",\"gradingSystem\":\"HundredMark\",\"granularity\":\"Phoneme\"}")
var pronunciationAssessmentConfig = SpeechSDK.PronunciationAssessmentConfig.fromJSON("{\"referenceText\":\"good morning\",\"gradingSystem\":\"HundredMark\",\"granularity\":\"Phoneme\"}");
SPXPronunciationAssessmentConfiguration *pronunciationAssessmentConfig =
[[SPXPronunciationAssessmentConfiguration alloc] init:@"good morning"
gradingSystem:SPXPronunciationAssessmentGradingSystem_HundredMark
granularity:SPXPronunciationAssessmentGranularity_Phoneme
enableMiscue:true];
var pronunciationAssessmentConfig: SPXPronunciationAssessmentConfiguration?
do {
try pronunciationAssessmentConfig = SPXPronunciationAssessmentConfiguration.init(referenceText, gradingSystem: SPXPronunciationAssessmentGradingSystem.hundredMark, granularity: SPXPronunciationAssessmentGranularity.phoneme, enableMiscue: true)
} catch {
print("error \(error) happened")
pronunciationAssessmentConfig = nil
return
}
Grup suku kata
Penilaian pengucapan dapat memberikan hasil penilaian tingkat suku kata. Pengelompokan dalam suku kata lebih mudah terbayangkan dan selaras dengan kebiasaan berbicara, karena sebuah kata biasanya diucapkan suku kata demi suku kata daripada fonem demi fonem.
Tabel berikut membandingkan contoh fonem dengan suku kata yang sesuai.
| Contoh kata | Fonem | Suku kata |
|---|---|---|
| technological | teknələdʒɪkl | tek·nə·lɑ·dʒɪkl |
| halo | hɛloʊ | hɛ·loʊ |
| luck | lʌk | lʌk |
| photosynthesis | foʊtəsɪnθəsɪs | foʊ·tə·sɪn·θə·sɪs |
Untuk meminta hasil tingkat suku kata bersama dengan fonem, atur parameter konfigurasi granularitas ke Phoneme.
Format alfabet fonem
Nama fonem disediakan bersama dengan skor, untuk membantu mengidentifikasi fonem mana yang diucapkan secara akurat atau tidak akurat. Untuk bahasa yang didukung, Anda bisa mendapatkan nama fonem dalam format SAPI, dan untuk en-US lokal, Anda juga bisa mendapatkan nama fonem dalam format IPA.
Tabel berikut membandingkan contoh fonem SAPI dengan fonem IPA yang sesuai.
| Contoh kata | Fonem SAPI | Fonem IPA |
|---|---|---|
| halo | h eh l ow | h ɛ l oʊ |
| luck | l ah k | l ʌ k |
| photosynthesis | f ow t ax s ih n th ax s ih s | f oʊ t ə s ɪ n θ ə s ɪ s |
Untuk meminta fonem IPA, atur alfabet fonem ke "IPA". Jika Anda tidak menentukan alfabet, secara default fonem akan memiliki format SAPI.
pronunciationAssessmentConfig.PhonemeAlphabet = "IPA";
auto pronunciationAssessmentConfig = PronunciationAssessmentConfig::CreateFromJson("{\"referenceText\":\"good morning\",\"gradingSystem\":\"HundredMark\",\"granularity\":\"Phoneme\",\"phonemeAlphabet\":\"IPA\"}");
PronunciationAssessmentConfig pronunciationAssessmentConfig = PronunciationAssessmentConfig.fromJson("{\"referenceText\":\"good morning\",\"gradingSystem\":\"HundredMark\",\"granularity\":\"Phoneme\",\"phonemeAlphabet\":\"IPA\"}");
pronunciation_assessment_config = speechsdk.PronunciationAssessmentConfig(json_string="{\"referenceText\":\"good morning\",\"gradingSystem\":\"HundredMark\",\"granularity\":\"Phoneme\",\"phonemeAlphabet\":\"IPA\"}")
var pronunciationAssessmentConfig = SpeechSDK.PronunciationAssessmentConfig.fromJSON("{\"referenceText\":\"good morning\",\"gradingSystem\":\"HundredMark\",\"granularity\":\"Phoneme\",\"phonemeAlphabet\":\"IPA\"}");
pronunciationAssessmentConfig.phonemeAlphabet = @"IPA";
pronunciationAssessmentConfig?.phonemeAlphabet = "IPA"
Fonem lisan
Dengan fonem lisan, Anda bisa mendapatkan skor keyakinan yang menunjukkan seberapa besar kemungkinan fonem lisan cocok dengan fonem yang diharapkan.
Misalnya, ketika Anda mengucapkan kata "halo", fonem IPA yang diharapkan adalah "h ɛ l oʊ". Fonem lisan yang sebenarnya bisa menjadi "h ə l oʊ". Dalam hasil penilaian berikut, fonem yang paling mungkin diucapkan adalah "ə" alih-alih fonem "ɛ" yang diharapkan. Fonem "ɛ" yang diharapkan hanya menerima skor keyakinan 47. Potensi kecocokan lainnya mendapatkan skor keyakinan 52, 17, dan 2.
{
"Phoneme": "ɛ",
"PronunciationAssessment": {
"AccuracyScore": 47.0,
"NBestPhonemes": [
{
"Phoneme": "ə",
"Score": 100.0
},
{
"Phoneme": "l",
"Score": 52.0
},
{
"Phoneme": "ɛ",
"Score": 47.0
},
{
"Phoneme": "h",
"Score": 17.0
},
{
"Phoneme": "æ",
"Score": 2.0
}
]
},
"Offset": 11100000,
"Duration": 500000
},
Untuk menunjukkan apakah, dan berapa banyak potensi fonem lisan untuk mendapatkan skor keyakinan, atur parameter NBestPhonemeCount ke nilai bilangan bulat seperti 5.
pronunciationAssessmentConfig.NBestPhonemeCount = 5;
auto pronunciationAssessmentConfig = PronunciationAssessmentConfig::CreateFromJson("{\"referenceText\":\"good morning\",\"gradingSystem\":\"HundredMark\",\"granularity\":\"Phoneme\",\"phonemeAlphabet\":\"IPA\",\"nBestPhonemeCount\":5}");
PronunciationAssessmentConfig pronunciationAssessmentConfig = PronunciationAssessmentConfig.fromJson("{\"referenceText\":\"good morning\",\"gradingSystem\":\"HundredMark\",\"granularity\":\"Phoneme\",\"phonemeAlphabet\":\"IPA\",\"nBestPhonemeCount\":5}");
pronunciation_assessment_config = speechsdk.PronunciationAssessmentConfig(json_string="{\"referenceText\":\"good morning\",\"gradingSystem\":\"HundredMark\",\"granularity\":\"Phoneme\",\"phonemeAlphabet\":\"IPA\",\"nBestPhonemeCount\":5}")
var pronunciationAssessmentConfig = SpeechSDK.PronunciationAssessmentConfig.fromJSON("{\"referenceText\":\"good morning\",\"gradingSystem\":\"HundredMark\",\"granularity\":\"Phoneme\",\"phonemeAlphabet\":\"IPA\",\"nBestPhonemeCount\":5}");
pronunciationAssessmentConfig.nbestPhonemeCount = 5;
pronunciationAssessmentConfig?.nbestPhonemeCount = 5
Mendapatkan hasil penilaian pengucapan
Saat ucapan dikenali, Anda dapat meminta hasil penilaian pengucapan sebagai objek SDK atau string JSON.
using (var speechRecognizer = new SpeechRecognizer(
speechConfig,
audioConfig))
{
pronunciationAssessmentConfig.ApplyTo(speechRecognizer);
var speechRecognitionResult = await speechRecognizer.RecognizeOnceAsync();
// The pronunciation assessment result as a Speech SDK object
var pronunciationAssessmentResult =
PronunciationAssessmentResult.FromResult(speechRecognitionResult);
// The pronunciation assessment result as a JSON string
var pronunciationAssessmentResultJson = speechRecognitionResult.Properties.GetProperty(PropertyId.SpeechServiceResponse_JsonResult);
}
Hasil kata, suku kata, dan fonem tidak tersedia melalui objek SDK dengan Speech SDK foc C++. Hasil kata, suku kata, dan fonem hanya tersedia dalam string JSON.
auto speechRecognizer = SpeechRecognizer::FromConfig(
speechConfig,
audioConfig);
pronunciationAssessmentConfig->ApplyTo(speechRecognizer);
speechRecognitionResult = speechRecognizer->RecognizeOnceAsync().get();
// The pronunciation assessment result as a Speech SDK object
auto pronunciationAssessmentResult =
PronunciationAssessmentResult::FromResult(speechRecognitionResult);
// The pronunciation assessment result as a JSON string
auto pronunciationAssessmentResultJson = speechRecognitionResult->Properties.GetProperty(PropertyId::SpeechServiceResponse_JsonResult);
Untuk pengembangan aplikasi Android, hasil kata, suku kata, dan fonem tersedia melalui objek SDK dengan Speech SDK foc Java. Hasilnya juga tersedia dalam string JSON. Untuk pengembangan aplikasi Java Runtime (JRE), hasil kata, suku kata, dan fonem hanya tersedia dalam string JSON.
SpeechRecognizer speechRecognizer = new SpeechRecognizer(
speechConfig,
audioConfig);
pronunciationAssessmentConfig.applyTo(speechRecognizer);
Future<SpeechRecognitionResult> future = speechRecognizer.recognizeOnceAsync();
SpeechRecognitionResult speechRecognitionResult = future.get(30, TimeUnit.SECONDS);
// The pronunciation assessment result as a Speech SDK object
PronunciationAssessmentResult pronunciationAssessmentResult =
PronunciationAssessmentResult.fromResult(speechRecognitionResult);
// The pronunciation assessment result as a JSON string
String pronunciationAssessmentResultJson = speechRecognitionResult.getProperties().getProperty(PropertyId.SpeechServiceResponse_JsonResult);
recognizer.close();
speechConfig.close();
audioConfig.close();
pronunciationAssessmentConfig.close();
speechRecognitionResult.close();
var speechRecognizer = SpeechSDK.SpeechRecognizer.FromConfig(speechConfig, audioConfig);
pronunciationAssessmentConfig.applyTo(speechRecognizer);
speechRecognizer.recognizeOnceAsync((speechRecognitionResult: SpeechSDK.SpeechRecognitionResult) => {
// The pronunciation assessment result as a Speech SDK object
var pronunciationAssessmentResult = SpeechSDK.PronunciationAssessmentResult.fromResult(speechRecognitionResult);
// The pronunciation assessment result as a JSON string
var pronunciationAssessmentResultJson = speechRecognitionResult.properties.getProperty(SpeechSDK.PropertyId.SpeechServiceResponse_JsonResult);
},
{});
speech_recognizer = speechsdk.SpeechRecognizer(
speech_config=speech_config, \
audio_config=audio_config)
pronunciation_assessment_config.apply_to(speech_recognizer)
speech_recognition_result = speech_recognizer.recognize_once()
# The pronunciation assessment result as a Speech SDK object
pronunciation_assessment_result = speechsdk.PronunciationAssessmentResult(speech_recognition_result)
# The pronunciation assessment result as a JSON string
pronunciation_assessment_result_json = speech_recognition_result.properties.get(speechsdk.PropertyId.SpeechServiceResponse_JsonResult)
SPXSpeechRecognizer* speechRecognizer = \
[[SPXSpeechRecognizer alloc] initWithSpeechConfiguration:speechConfig
audioConfiguration:audioConfig];
[pronunciationAssessmentConfig applyToRecognizer:speechRecognizer];
SPXSpeechRecognitionResult *speechRecognitionResult = [speechRecognizer recognizeOnce];
// The pronunciation assessment result as a Speech SDK object
SPXPronunciationAssessmentResult* pronunciationAssessmentResult = [[SPXPronunciationAssessmentResult alloc] init:speechRecognitionResult];
// The pronunciation assessment result as a JSON string
NSString* pronunciationAssessmentResultJson = [speechRecognitionResult.properties getPropertyByName:SPXSpeechServiceResponseJsonResult];
let speechRecognizer = try! SPXSpeechRecognizer(speechConfiguration: speechConfig, audioConfiguration: audioConfig)
try! pronConfig.apply(to: speechRecognizer)
let speechRecognitionResult = try? speechRecognizer.recognizeOnce()
// The pronunciation assessment result as a Speech SDK object
let pronunciationAssessmentResult = SPXPronunciationAssessmentResult(speechRecognitionResult!)
// The pronunciation assessment result as a JSON string
let pronunciationAssessmentResultJson = speechRecognitionResult!.properties?.getPropertyBy(SPXPropertyId.speechServiceResponseJsonResult)
Parameter hasil
Tabel ini mencantumkan beberapa hasil utama penilaian pengucapan.
| Parameter | Deskripsi |
|---|---|
AccuracyScore |
Akurasi pelafalan ucapan. Akurasi menunjukkan seberapa dekat fonem cocok dengan pengucapan penutur asli. Skor akurasi suku kata, kata, dan teks lengkap diagregasi dari skor akurasi tingkat fonem. |
FluencyScore |
Kelancaran ucapan yang diberikan. Kefasihan menunjukkan seberapa dekat ucapan cocok dengan penggunaan jeda diam antara kata-kata penutur asli. |
CompletenessScore |
Kelengkapan ucapan, dihitung dengan rasio kata yang diucapkan ke teks referensi input. |
PronScore |
Skor keseluruhan menunjukkan kualitas pelafalan ucapan yang diberikan. PronScore diagregasi dari AccuracyScore, FluencyScore, dan CompletenessScore dengan bobot. |
ErrorType |
Nilai ini menunjukkan apakah kata dihilangkan, disisipkan, atau diucapkan dengan buruk, dibandingkan dengan ReferenceText. Nilai yang mungkin adalah None, Omission, Insertion, dan Mispronunciation. |
Contoh hasil JSON
Hasil penilaian pengucapan untuk kata lisan "hello" ditampilkan sebagai string JSON dalam contoh berikut. Berikut yang harus Anda ketahui:
- Alfabet fonem adalah IPA.
- Suku kata ditampilkan bersama fonem untuk kata yang sama.
- Anda dapat menggunakan nilai
OffsetdanDurationuntuk menyelaraskan suku kata dengan fonem yang sesuai. Misalnya, offset awal (11700000) dari suku kata kedua ("loʊ") selaras dengan fonem ketiga ("l"). - Terdapat lima
NBestPhonemesyang sesuai dengan jumlah fonem lisan yang diminta. - Dalam
Phonemes, fonem lisan yang paling mungkin adalah"ə"alih-alih fonem"ɛ"yang diharapkan. Fonem"ɛ"yang diharapkan hanya menerima skor keyakinan 47. Potensi kecocokan lainnya mendapatkan skor keyakinan 52, 17, dan 2.
{
"Id": "bbb42ea51bdb46d19a1d685e635fe173",
"RecognitionStatus": 0,
"Offset": 7500000,
"Duration": 13800000,
"DisplayText": "Hello.",
"SNR": 34.879055,
"NBest": [
{
"Confidence": 0.975003,
"Lexical": "hello",
"ITN": "hello",
"MaskedITN": "hello",
"Display": "Hello.",
"PronunciationAssessment": {
"AccuracyScore": 100,
"FluencyScore": 100,
"CompletenessScore": 100,
"PronScore": 100
},
"Words": [
{
"Word": "hello",
"Offset": 7500000,
"Duration": 13800000,
"PronunciationAssessment": {
"AccuracyScore": 99.0,
"ErrorType": "None"
},
"Syllables": [
{
"Syllable": "hɛ",
"PronunciationAssessment": {
"AccuracyScore": 91.0
},
"Offset": 7500000,
"Duration": 4100000
},
{
"Syllable": "loʊ",
"PronunciationAssessment": {
"AccuracyScore": 100.0
},
"Offset": 11700000,
"Duration": 9600000
}
],
"Phonemes": [
{
"Phoneme": "h",
"PronunciationAssessment": {
"AccuracyScore": 98.0,
"NBestPhonemes": [
{
"Phoneme": "h",
"Score": 100.0
},
{
"Phoneme": "oʊ",
"Score": 52.0
},
{
"Phoneme": "ə",
"Score": 35.0
},
{
"Phoneme": "k",
"Score": 23.0
},
{
"Phoneme": "æ",
"Score": 20.0
}
]
},
"Offset": 7500000,
"Duration": 3500000
},
{
"Phoneme": "ɛ",
"PronunciationAssessment": {
"AccuracyScore": 47.0,
"NBestPhonemes": [
{
"Phoneme": "ə",
"Score": 100.0
},
{
"Phoneme": "l",
"Score": 52.0
},
{
"Phoneme": "ɛ",
"Score": 47.0
},
{
"Phoneme": "h",
"Score": 17.0
},
{
"Phoneme": "æ",
"Score": 2.0
}
]
},
"Offset": 11100000,
"Duration": 500000
},
{
"Phoneme": "l",
"PronunciationAssessment": {
"AccuracyScore": 100.0,
"NBestPhonemes": [
{
"Phoneme": "l",
"Score": 100.0
},
{
"Phoneme": "oʊ",
"Score": 46.0
},
{
"Phoneme": "ə",
"Score": 5.0
},
{
"Phoneme": "ɛ",
"Score": 3.0
},
{
"Phoneme": "u",
"Score": 1.0
}
]
},
"Offset": 11700000,
"Duration": 1100000
},
{
"Phoneme": "oʊ",
"PronunciationAssessment": {
"AccuracyScore": 100.0,
"NBestPhonemes": [
{
"Phoneme": "oʊ",
"Score": 100.0
},
{
"Phoneme": "d",
"Score": 29.0
},
{
"Phoneme": "t",
"Score": 24.0
},
{
"Phoneme": "n",
"Score": 22.0
},
{
"Phoneme": "l",
"Score": 18.0
}
]
},
"Offset": 12900000,
"Duration": 8400000
}
]
}
]
}
]
}
Langkah berikutnya
- Mencoba penilaian pengucapan di Studio Azure Cognitive Service untuk Ucapan
- Cobalah demo penilaian pengucapan dan tonton tutorial video penilaian pengucapan.