다음을 통해 공유


발음 평가 사용

이 문서에서는 Speech SDK를 통해 음성 텍스트 변환을 사용하여 발음을 평가하는 방법을 알아봅니다. 발음 평가는 음성 발음을 평가하고 음성 오디오의 정확도와 능숙도에 대한 피드백을 발표자에게 제공합니다.

스트리밍 모드의 발음 평가 사용

발음 평가는 중단 없는 스트리밍 모드를 지원합니다. 녹음/녹화 시간은 Speech SDK를 통해 무제한일 수 있습니다. 녹음/녹화를 중지하지 않는 한 평가 프로세스가 완료되지 않으며 평가를 편리하게 일시 중지하고 다시 시작할 수 있습니다.

발음 평가의 가용성에 대한 자세한 내용은 지원되는 언어사용 가능한 지역을 참조하세요.

기본적으로 발음 평가 사용 비용은 종량제 또는 약정 계층 가격 책정에 대한 음성 텍스트 변환 비용과 동일합니다. 음성을 텍스트로 변환하기 위한 약정 계층을 구매하는 경우 발음 평가 비용은 약정을 충족하는 데 사용됩니다. 자세한 내용은 가격 책정을 참조하세요.

고유한 애플리케이션에서 스트리밍 모드로 발음 평가를 사용하는 방법은 샘플 코드를 참조하세요.

고유한 애플리케이션에서 스트리밍 모드로 발음 평가를 사용하는 방법은 샘플 코드를 참조하세요.

고유한 애플리케이션에서 스트리밍 모드로 발음 평가를 사용하는 방법은 샘플 코드를 참조하세요.

고유한 애플리케이션에서 스트리밍 모드로 발음 평가를 사용하는 방법은 샘플 코드를 참조하세요.

고유한 애플리케이션에서 스트리밍 모드로 발음 평가를 사용하는 방법은 샘플 코드를 참조하세요.

고유한 애플리케이션에서 스트리밍 모드로 발음 평가를 사용하는 방법은 샘플 코드를 참조하세요.

고유한 애플리케이션에서 스트리밍 모드로 발음 평가를 사용하는 방법은 샘플 코드를 참조하세요.

구성 매개 변수 설정

참고 항목

Go용 Speech SDK에서는 발음 평가를 사용할 수 없습니다. 이 가이드의 개념에 대해 읽을 수 있습니다. 솔루션에 대한 다른 프로그래밍 언어를 선택합니다.

SpeechRecognizer에서 발음 개선을 배우거나 연습할 언어를 지정할 수 있습니다. 기본 로캘은 en-US입니다. 자체 애플리케이션에서 발음 평가 학습 언어를 지정하는 방법을 알아보려면 샘플 코드를 참조하세요.

로캘이 여러 개 있는 언어에 대해 설정할 로캘을 잘 모르는 경우 각 로캘을 개별적으로 시도합니다. 예를 들어 스페인어의 경우 es-ESes-MX를 사용해 보세요. 사용자 시나리오에 대해 더 높은 로캘 점수를 결정합니다.

PronunciationAssessmentConfig 개체를 만들어야 합니다. 운율 및 콘텐츠 평가를 사용하도록 EnableProsodyAssessmentEnableContentAssessmentWithTopic을 설정할 수 있습니다. 자세한 내용은 구성 방법을 참조하세요.

var pronunciationAssessmentConfig = new PronunciationAssessmentConfig( 
    referenceText: "", 
    gradingSystem: GradingSystem.HundredMark,  
    granularity: Granularity.Phoneme,  
    enableMiscue: false); 
pronunciationAssessmentConfig.EnableProsodyAssessment(); 
pronunciationAssessmentConfig.EnableContentAssessmentWithTopic("greeting"); 
auto pronunciationConfig = PronunciationAssessmentConfig::Create("", PronunciationAssessmentGradingSystem::HundredMark, PronunciationAssessmentGranularity::Phoneme, false); 
pronunciationConfig->EnableProsodyAssessment(); 
pronunciationConfig->EnableContentAssessmentWithTopic("greeting"); 
PronunciationAssessmentConfig pronunciationConfig = new PronunciationAssessmentConfig("", 
    PronunciationAssessmentGradingSystem.HundredMark, PronunciationAssessmentGranularity.Phoneme, false); 
pronunciationConfig.enableProsodyAssessment(); 
pronunciationConfig.enableContentAssessmentWithTopic("greeting");
pronunciation_config = speechsdk.PronunciationAssessmentConfig( 
    reference_text="", 
    grading_system=speechsdk.PronunciationAssessmentGradingSystem.HundredMark, 
    granularity=speechsdk.PronunciationAssessmentGranularity.Phoneme, 
    enable_miscue=False) 
pronunciation_config.enable_prosody_assessment() 
pronunciation_config.enable_content_assessment_with_topic("greeting")
var pronunciationAssessmentConfig = new sdk.PronunciationAssessmentConfig( 
    referenceText: "", 
    gradingSystem: sdk.PronunciationAssessmentGradingSystem.HundredMark,  
    granularity: sdk.PronunciationAssessmentGranularity.Phoneme,  
    enableMiscue: false); 
pronunciationAssessmentConfig.enableProsodyAssessment(); 
pronunciationAssessmentConfig.enableContentAssessmentWithTopic("greeting");  
SPXPronunciationAssessmentConfiguration *pronunicationConfig = 
[[SPXPronunciationAssessmentConfiguration alloc] init:@"" gradingSystem:SPXPronunciationAssessmentGradingSystem_HundredMark granularity:SPXPronunciationAssessmentGranularity_Phoneme enableMiscue:false]; 
[pronunicationConfig enableProsodyAssessment]; 
[pronunicationConfig enableContentAssessmentWithTopic:@"greeting"]; 
let pronAssessmentConfig = try! SPXPronunciationAssessmentConfiguration("", 
    gradingSystem: .hundredMark, 
    granularity: .phoneme, 
    enableMiscue: false) 
pronAssessmentConfig.enableProsodyAssessment() 
pronAssessmentConfig.enableContentAssessment(withTopic: "greeting")

다음 표에는 발음 평가에 대한 몇 가지 주요 구성 매개 변수가 나와 있습니다.

매개 변수 설명
ReferenceText 발음을 평가하는 기준 텍스트입니다.

ReferenceText 매개 변수는 선택 사항입니다. 읽기 언어 학습 시나리오에 대해 스크립팅된 평가를 실행하려면 참조 텍스트를 설정합니다. 스크립팅되지 않은 평가를 실행하려면 참조 텍스트를 설정하지 마세요.

스크립팅된 평가와 스크립팅되지 않은 평가 간의 가격 차이는 가격 책정을 참조하세요.
GradingSystem 점수 보정을 위한 지점 시스템입니다. FivePoint는 0-5의 부동 소수점 점수를 제공합니다. HundredMark는 0-100의 부동 소수점 점수를 제공합니다. 기본값: FivePoint.
Granularity 가장 낮은 수준의 평가 세분성을 결정합니다. 최솟값보다 크거나 같은 수준의 점수가 반환됩니다. 허용되는 값은 전체 텍스트, 단어, 음절 및 음소 수준의 점수를 표시하는 Phoneme, 전체 텍스트 및 단어 수준의 점수를 표시하는 Word 또는 전체 텍스트 수준에서만 점수를 표시하는 FullText 입니다. 제공된 전체 참조 텍스트는 단어, 문장 또는 단락일 수 있습니다. 입력 참조 텍스트에 따라 달라집니다. 기본값: Phoneme.
EnableMiscue 발음된 단어를 참조 텍스트와 비교할 때 오답 계산이 가능합니다. 잘못된 큐를 사용하도록 설정하는 것은 선택 사항입니다. 이 값이 True이면 비교에 따라 ErrorType 결과 값을 Omission 또는 Insertion으로 설정할 수 있습니다. 값은 FalseTrue입니다. 기본값: False. 잘못된 계산을 사용하려면 EnableMiscue을(를) True(으)로 설정합니다. 표 위의 코드 조각을 참조할 수 있습니다.
ScenarioId 사용자 지정된 지점 시스템의 GUID입니다.

구성 방법

다음 표에서는 PronunciationAssessmentConfig 개체에 대해 설정할 수 있는 선택적 메서드 중 일부를 보여 줍니다.

참고 항목

콘텐츠 및 운율 평가는 en-US 로캘에서만 사용할 수 있습니다.

콘텐츠 및 프로소디 평가를 탐색하려면 SDK 버전 1.35.0 이상으로 업그레이드합니다.

메서드 설명
EnableProsodyAssessment 발음 평가에 대해 운율 평가를 사용하도록 설정합니다. 이 기능은 강세, 억양, 말하기 속도 및 리듬과 같은 측면을 평가합니다. 이 기능은 음성의 자연스러움과 표현성에 대한 인사이트를 제공합니다.

운율 평가를 사용하도록 설정하는 것은 선택 사항입니다. 이 메서드가 호출되면 ProsodyScore 결과 값이 반환됩니다.
EnableContentAssessmentWithTopic 콘텐츠 평가를 사용하도록 설정합니다. 콘텐츠 평가는 말하기 언어 학습 시나리오에 대한 스크립팅되지 않은 평가에 속합니다. 설명을 제공하여 말하는 특정 토픽에 대한 평가의 이해를 높일 수 있습니다. 예를 들어 C#에서 pronunciationAssessmentConfig.EnableContentAssessmentWithTopic("greeting");을 호출합니다. 'greeting'을 토픽을 설명하는 원하는 텍스트로 바꿀 수 있습니다. 설명은 길이 제한이 없으며 현재 en-US 로캘만 지원합니다.

발음 평가 결과 가져오기

음성이 인식되면 발음 평가 결과를 SDK 개체 또는 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);
}

단어, 음절 및 음소 결과는 C++용 Speech SDK를 사용하여 SDK 개체를 통해 사용할 수 없습니다. 단어, 음절 및 음소 결과는 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);

자체 애플리케이션에서 발음 평가 학습 언어를 지정하는 방법을 알아보려면 샘플 코드를 참조하세요.

Android 애플리케이션 개발의 경우 Java용 Speech SDK를 사용하여 SDK 개체를 통해 단어, 음절 및 음소 결과를 사용할 수 있습니다. 또한 결과는 JSON 문자열에서도 사용할 수 있습니다. Java 런타임(JRE) 애플리케이션 개발의 경우 단어, 음절 및 음소 결과는 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)

결과 매개 변수

스크립팅된 평가 또는 스크립트되지 않은 평가 중 어떤 평가를 사용하는지에 따라 다른 발음 평가 결과를 얻을 수 있습니다. 스크립팅된 평가는 읽기 언어 학습 시나리오를 위한 것입니다. 스크립팅되지 않은 평가는 말하기 언어 학습 시나리오를 위한 것입니다.

참고 항목

스크립팅된 평가와 스크립팅되지 않은 평가 간의 가격 차이는 가격 책정을 참조하세요.

스크립팅된 평가 결과

다음 표에는 스크립팅된 평가 또는 읽기 시나리오에 대한 몇 가지 주요 발음 평가 결과가 나와 있습니다.

매개 변수 설명 세분성
AccuracyScore 음성의 발음 정확도입니다. 정확도는 음소가 원어민의 발음에 얼마나 근접하게 일치하는지를 나타냅니다. 음절, 단어 및 전체 텍스트 정확도 점수는 음소 수준 정확도 점수에서 집계되고 평가 목표를 사용하여 구체화됩니다. 음소 수준,
음절 수준(en-US에만 해당),
단어 수준,
전체 텍스트 수준
FluencyScore 지정된 음성의 능숙도입니다. 능숙도는 음성이 원어민이 사용하는 단어 사이의 무음 분리에 얼마나 근접하게 일치하는지를 나타냅니다. 전체 텍스트 수준
CompletenessScore 입력 참조 텍스트에 대한 발음 단어의 비율로 계산된 음성의 완전성입니다. 전체 텍스트 수준
ProsodyScore 지정된 음성의 운율입니다. 운율은 강세, 억양, 말하기 속도 및 리듬을 포함하여 주어진 음성이 얼마나 자연스러운지를 나타냅니다. 전체 텍스트 수준
PronScore 지정된 음성에 대한 발음 품질의 전체 점수입니다. PronScoreProsodyScoreCompletenessScore를 사용할 수 있는 경우 가중치가 있는 AccuracyScore, FluencyScore, CompletenessScoreProsodyScore에서 계산됩니다. 둘 중 하나라도 사용할 수 없으면 PronScore는 해당 점수를 고려하지 않습니다. 전체 텍스트 수준
ErrorType 이 값은 참조 텍스트와 비교하여 오류 유형을 나타냅니다. 옵션에는 단어를 생략할지, 삽입할지 또는 중단점을 사용해서 잘못 삽입할지가 포함됩니다. 또한 문장 부호에서 누락된 중단점을 나타냅니다. 또한 발화에서 단어가 잘못 발음되는지, 아니면 일정하게 상승할지, 떨어질지 또는 같은 높이를 유지할지를 나타냅니다. 가능한 값은 None(이 단어에 오류가 없음을 의미함), Omission, Insertion, Mispronunciation, UnexpectedBreak, MissingBreakMonotone입니다. 오류 유형은 단어의 발음 AccuracyScore가 60 미만인 경우 Mispronunciation일 수 있습니다. 단어 수준

스크립팅되지 않은 평가 결과

다음 표에는 스크립팅되지 않은 평가 또는 말하기 시나리오에 대한 몇 가지 주요 발음 평가 결과가 나와 있습니다.

VocabularyScore, GrammarScoreTopicScore 매개 변수는 결합된 콘텐츠 평가에 롤업됩니다.

참고 항목

콘텐츠 및 운율 평가는 en-US 로캘에서만 사용할 수 있습니다.

응답 매개 변수 설명 세분성
AccuracyScore 음성의 발음 정확도입니다. 정확도는 음소가 원어민의 발음에 얼마나 근접하게 일치하는지를 나타냅니다. 음절, 단어 및 전체 텍스트 정확도 점수는 음소 수준 정확도 점수에서 집계되고 평가 목표를 사용하여 구체화됩니다. 음소 수준,
음절 수준(en-US에만 해당),
단어 수준,
전체 텍스트 수준
FluencyScore 지정된 음성의 능숙도입니다. 능숙도는 음성이 원어민이 사용하는 단어 사이의 무음 분리에 얼마나 근접하게 일치하는지를 나타냅니다. 전체 텍스트 수준
ProsodyScore 지정된 음성의 운율입니다. 운율은 강세, 억양, 말하기 속도 및 리듬을 포함하여 주어진 음성이 얼마나 자연스러운지를 나타냅니다. 전체 텍스트 수준
VocabularyScore 어휘 사용 숙련도. 화자가 아이디어를 정확하게 표현하기 위해 지정된 컨텍스트 내에서 단어를 효과적으로 사용하는지, 단어의 적절성과 어휘 복잡성 수준을 평가합니다. 전체 텍스트 수준
GrammarScore 문법 및 다양한 문장 패턴을 사용할 때의 정확성. 어휘 정확도, 문법 정확도 및 문장 구조의 다양성이 결합되어 문법 오류를 높이는 결과를 가져옵니다. 전체 텍스트 수준
TopicScore 토픽에 대한 이해 및 참여 수준- 화자가 자신의 생각과 아이디어를 효과적으로 표현할 수 있는 능력과 토픽에 참여할 수 있는 능력에 대한 인사이트를 제공합니다. 전체 텍스트 수준
PronScore 지정된 음성에 대한 발음 품질의 전체 점수입니다. PronScoreProsodyScore를 사용할 수 있는 경우 가중치가 있는 AccuracyScore, FluencyScoreProsodyScore에서 계산됩니다. ProsodyScore를 사용할 수 없는 경우 PronScore는 해당 점수를 고려하지 않습니다. 전체 텍스트 수준
ErrorType 단어가 잘못 발음되거나, 중단점을 사용해서 잘못 삽입되거나, 문장 부호에서 중단점이 누락되었습니다. 또한 발화에서 발음이 일정하게 상승할지, 떨어질지 또는 같은 높이를 유지할지를 나타냅니다. 가능한 값은 None(이 단어에 오류가 없음을 의미함), Mispronunciation, UnexpectedBreak, MissingBreakMonotone입니다. 단어 수준

다음 표에서는 운율 평가 결과를 좀 더 자세히 설명합니다.

필드 설명
ProsodyScore 전체 발화의 운율 점수
Feedback 단어 수준(BreakIntonation 포함)에 대한 피드백
Break
ErrorTypes 중단점과 관련된 오류 유형(UnexpectedBreakMissingBreak 포함). 현재 버전은 중단점 오류 유형을 제공하지 않습니다. 단어 앞에 예기치 않은 중단점 또는 누락된 중단점이 있는지를 결정하는 임계값을 필드 UnexpectedBreak – ConfidenceMissingBreak – confidence에 설정해야 합니다.
UnexpectedBreak 단어 앞의 예기치 않은 중단점을 나타냅니다.
MissingBreak 단어 앞에 누락된 중단점을 나타냅니다.
Thresholds 두 신뢰도 점수에서 제안된 임계값은 0.75입니다. 즉, 값 UnexpectedBreak – Confidence가 0.75보다 크면 예기치 않은 중단점이 발생합니다. 값 MissingBreak – confidence가 0.75보다 크면 누락된 중단점이 있습니다. 0.75는 권장되는 값이지만 사용자 고유의 시나리오에 따라 임계값을 조정하는 것이 좋습니다. 이러한 두 중단점에서 변수 감지 민감도를 유지하려면 UnexpectedBreak - ConfidenceMissingBreak - Confidence 필드에 서로 다른 임계값을 할당할 수 있습니다.
Intonation 음성의 음조를 나타냅니다.
ErrorTypes 현재 단조만 지원하는 음조와 관련된 오류 유형입니다. MonotoneErrorTypes 필드에 있으면 발화가 단조로 감지됩니다. 단조가 전체 발화에서 검색되지만 태그는 모든 단어에 할당됩니다. 동일한 발화의 모든 단어는 동일한 단조 감지 정보를 공유합니다.
Monotone 단조 음성을 나타냅니다.
Thresholds (Monotone Confidence) 필드 Monotone - SyllablePitchDeltaConfidence는 사용자 지정 단조 감지용으로 예약되어 있습니다. 제공된 단조 결정이 만족스럽지 않는 경우 이러한 필드에 대한 임계값을 조정하여 기본 설정에 따라 감지를 사용자 지정합니다.

JSON 결과 예제

다음 예제에서는 "hello"라는 음성 단어에 대한 스크립팅된 발음 평가 결과가 JSON 문자열로 표시됩니다.

  • 음소 알파벳은 IPA입니다.
  • 음절은 동일한 단어의 음소와 함께 반환됩니다.
  • OffsetDuration 값을 사용하여 음절을 해당 음소에 맞출 수 있습니다. 예를 들어 두 번째 음절 loʊ의 시작 오프셋(11700000)은 세 번째 음소 l에 맞춥니다. 오프셋은 인식된 음성이 오디오 스트림에서 시작하는 시간을 나타냅니다. 이 값은 100나노초 단위로 측정됩니다. OffsetDuration에 대한 자세한 내용을 알아보려면 응답 속성을 참조하세요.
  • 요청된 음성 음소 수에 해당하는 5개의 NBestPhonemes가 있습니다.
  • Phonemes 내에서 가장 가능성이 높은 음성 음소는 예상되는 ɛ 음소 대신 ə였습니다. 예상되는 ɛ 음소는 47의 신뢰도 점수만 받았습니다. 다른 잠재적 일치 항목은 52, 17 및 2의 신뢰도 점수를 받았습니다.
{
    "Id": "bbb42ea51bdb46d19a1d685e635fe173",
    "RecognitionStatus": 0,
    "Offset": 7500000,
    "Duration": 13800000,
    "DisplayText": "Hello.",
    "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
                        }
                    ]
                }
            ]
        }
    ]
}

다음에 대한 발음 평가 점수를 받을 수 있습니다.

  • 전체 텍스트
  • 단어
  • 음절 그룹
  • SAPI 또는 IPA 형식의 음소

로캘당 지원되는 기능

다음 표에는 로캘에서 지원하는 기능이 요약되어 있습니다. 구체적인 내용은 다음 섹션을 참조하세요. 필요한 언어가 지원되는 기능에 대해 다음 표에 나열되어 있지 않으면 추가 지원을 위해 이 접수 양식을 작성합니다.

음소 알파벳 IPA SAPI
음소 이름 en-US en-US, zh-CN
음절 그룹 en-US en-US
음성 음소 en-US en-US

음절 그룹

발음 평가는 음절 수준 평가 결과를 제공할 수 있습니다. 단어는 일반적으로 음소별이 아니라 음절별로 발음됩니다. 음절로 그룹화하는 것이 더 읽기 쉽고 말하기 습관에 맞춰집니다.

발음 평가는 IPA 및 SAPI를 사용하는 en-US 음절 그룹만 지원합니다.

다음 표에서는 음소 예제와 해당 음절을 비교합니다.

샘플 단어 음소 음절
technological teknələdʒɪkl tek·nə·lɑ·dʒɪkl
hello hɛloʊ hɛ·loʊ
luck lʌk lʌk
photosynthesis foʊtəsɪnθəsɪs foʊ·tə·sɪn·θə·sɪs

음소와 함께 음절 수준 결과를 요청하려면 세분성 구성 매개 변수Phoneme으로 설정합니다.

음소 알파벳 형식

발음 평가는 IPA를 사용한 en-US 및 SAPI를 사용한 en-USzh-CN 음소 이름을 지원합니다.

음소 이름을 지원하는 로캘의 경우 음소 이름이 점수와 함께 제공됩니다. 음소 이름은 정확하거나 부정확하게 발음된 음소 식별에 도움이 됩니다. 다른 로캘의 경우 음소 점수만 가져올 수 있습니다.

다음 표에서는 SAPI 음소 예제와 해당 IPA 음소를 비교합니다.

샘플 단어 SAPI 음소 IPA 음소
hello 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

IPA 음소를 요청하려면 음소 알파벳을 IPA로 설정합니다. 알파벳을 지정하지 않으면 음소는 기본적으로 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"

음성 음소 평가

음성 음소를 사용하면 음성 음소가 예상 음소와 일치할 가능성을 나타내는 신뢰도 점수를 얻을 수 있습니다.

발음 평가는 IPA 및 SAPI를 사용하여 en-US 음성 음원을 지원합니다.

예를 들어 Hello라는 단어에 대한 완전한 음성을 얻으려면 예측되는 각 음소에 대한 첫 번째 음성 음소와 가장 높은 신뢰도 점수를 결부시킬 수 있습니다. 다음 평가 결과에서 hello라는 단어를 말할 때 예측되는 IPA 음소는 h ɛ l oʊ입니다. 그러나 실제 음성 음소는 h ə l oʊ입니다. 이 예제에서는 예측되는 각 음소에 대해 5개의 후보가 있습니다. 평가 결과에 따르면 가장 가능성이 높은 음성 음소는 예측한 ɛ 음소가 아닌 ə입니다. 예상되는 ɛ 음소는 47의 신뢰도 점수만 받았습니다. 다른 잠재적 일치 항목은 52, 17 및 2의 신뢰도 점수를 받았습니다.

{
    "Id": "bbb42ea51bdb46d19a1d685e635fe173",
    "RecognitionStatus": 0,
    "Offset": 7500000,
    "Duration": 13800000,
    "DisplayText": "Hello.",
    "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
                        }
                    ]
                }
            ]
        }
    ]
}

신뢰도 점수를 받을 수 있는지 여부와 잠재적 음성 음소 수를 나타내려면 NBestPhonemeCount 매개 변수를 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