次の方法で共有


発音評価を使用する

この記事では、Speech SDK で音声テキスト変換を使用して、発音を評価する方法について説明します。 発音評価ではスピーチの発音を評価し、話された音声の正確性と流暢性に関するフィードバックを話者に提供します。

Note

発音評価では、標準の音声テキスト変換モデルとは異なる特定のバージョンの音声テキスト変換モデルを使って、一貫性のある正確な発音評価が保証されます。

ストリーミング モードでの発音評価を使用する

発音評価では、中断のないストリーミング モードがサポートされています。 録音時間は Speech SDK を介して無制限にできます。 録音を停止しない限り、評価プロセスは終了しません。評価は簡単に一時停止して再開できます。

発音評価の可用性については、サポートされている言語利用可能なリージョンに関する記事を参照してください。

ベースラインとして、発音評価の使用には、従量課金制とコミットメント レベルのどちらの価格設定でも、音声テキスト変換と同じ料金がかかります。 音声テキスト変換のコミットメント レベルを購入した場合、発音評価の支出はコミットメントを満たす方向に向けられます。 詳細については、価格に関するページをご覧ください。

ストリーミング モードでの発音評価を独自のアプリケーションで使用する方法については、サンプル コードを参照してください。

ストリーミング モードでの発音評価を独自のアプリケーションで使用する方法については、サンプル コードを参照してください。

ストリーミング モードでの発音評価を独自のアプリケーションで使用する方法については、サンプル コードを参照してください。

ストリーミング モードでの発音評価を独自のアプリケーションで使用する方法については、サンプル コードを参照してください。

ストリーミング モードでの発音評価を独自のアプリケーションで使用する方法については、サンプル コードを参照してください。

ストリーミング モードでの発音評価を独自のアプリケーションで使用する方法については、サンプル コードを参照してください。

ストリーミング モードでの発音評価を独自のアプリケーションで使用する方法については、サンプル コードを参照してください。

継続的認識

オーディオ ファイルが 30 秒を超える場合は、処理に連続モードを使います。 連続モードのサンプル コードは、GitHub の関数 PronunciationAssessmentContinuousWithFile の下で見つかります。

オーディオ ファイルが 30 秒を超える場合は、処理に連続モードを使います。

オーディオ ファイルが 30 秒を超える場合は、処理に連続モードを使います。 連続モードのサンプル コードは、GitHub の関数 pronunciationAssessmentContinuousWithFile の下で見つかります。

オーディオ ファイルが 30 秒を超える場合は、処理に連続モードを使います。 連続モードのサンプル コードは、GitHub の関数 pronunciation_assessment_continuous_from_file の下で見つかります。

オーディオ ファイルが 30 秒を超える場合は、処理に連続モードを使います。 連続モードのサンプル コードは、GitHub で見つかります。

オーディオ ファイルが 30 秒を超える場合は、処理に連続モードを使います。 連続モードのサンプル コードは、GitHub の関数 pronunciationAssessFromFile の下で見つかります。

オーディオ ファイルが 30 秒を超える場合は、処理に連続モードを使います。 連続モードのサンプル コードは、GitHub の関数 continuousPronunciationAssessment の下で見つかります。

構成パラメーターを設定する

Note

Speech SDK for Go では発音評価を使用できません。 このガイドでは、概念について説明します。 ソリューション向けに別のプログラミング言語を選択します。

SpeechRecognizer で、発音の向上を学習したり練習したりしている言語を指定できます。 既定のロケールは en-US です。 独自のアプリケーションで発音評価の学習言語を指定する方法を確認するには、次のサンプル コードを使用できます。

var recognizer = new SpeechRecognizer(speechConfig, "en-US", audioConfig);
auto recognizer = SpeechRecognizer::FromConfig(speechConfig, "en-US", audioConfig);
SpeechRecognizer recognizer = new SpeechRecognizer(speechConfig, "en-US", audioConfig);
speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config, language="en-US", audio_config=audio_config)
speechConfig.speechRecognitionLanguage = "en-US";
SPXSpeechRecognizer* recognizer = [[SPXSpeechRecognizer alloc] initWithSpeechConfiguration:speechConfig language:@"en-US" audioConfiguration:audioConfig];
let recognizer = try! SPXSpeechRecognizer(speechConfiguration: speechConfig, language: "en-US", audioConfiguration: audioConfig)

ヒント

言語に複数のロケールがある場合に設定するロケールがわからない場合は、各ロケールを個別に試してください。 たとえば、スペイン語の場合は、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 発音された単語を参照テキストと比較し、誤りの計算を有効にします。 miscue の有効化は省略可能です。 この値がTrueの場合、 ErrorType結果の値は、比較に基づいてOmissionまたはInsertionに設定できます。 値は FalseTrue です。 既定値: False。 誤りの計算を有効にするには、EnableMiscueTrue に設定します。 表の上にあるコード スニペットを参照できます。
ScenarioId カスタマイズされたポイント システムの GUID。

構成方法

次の表に、PronunciationAssessmentConfig オブジェクトに設定できるオプションのメソッドの一部を示します。

Note

コンテンツと韻律の評価は、en-US ロケールでのみお使いいただけます。

コンテンツとプロソディの評価を試すには、SDK バージョン 1.35.0 以降にアップグレードします。

トピック パラメーターの長さに制限はありません。

Method 説明
EnableProsodyAssessment 発音評価のプロソディ評価を有効にします。 この機能では、アクセント、イントネーション、話す速度、リズムなどの面が評価されます。 この機能は、音声の自然さと表現力に関する分析情報を提供します。

プロソディ評価の有効化はオプションです。 このメソッドが呼び出されると、ProsodyScore 結果の値が返されます。
EnableContentAssessmentWithTopic コンテンツ評価を有効にします。 コンテンツ評価は、スピーキング言語学習シナリオの スクリプトなしの評価 の一部です。 説明を提供することで、話されている特定のトピックに対する評価の理解を高めることができます。 たとえば、C# では pronunciationAssessmentConfig.EnableContentAssessmentWithTopic("greeting"); を呼び出します。 「挨拶」を目的のテキストに置き換えてトピックを記述できます。 説明には長さの制限がなく、現在サポートされているロケールは en-US のみです。

発音評価の結果を取得する

スピーチが認識されたら、発音評価の結果を SDK オブジェクトまたは JSON 文字列として要求できます。

using (var speechRecognizer = new SpeechRecognizer(
    speechConfig,
    audioConfig))
{
    // (Optional) get the session ID
    speechRecognizer.SessionStarted += (s, e) => {
        Console.WriteLine($"SESSION ID: {e.SessionId}");
    };
    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);
}

Speech SDK for C++ を使用する場合、単語、音節、音素の結果を SDK オブジェクト経由で使用することはできません。 単語、音節、音素の結果は、JSON 文字列でのみ使用できます。

auto speechRecognizer = SpeechRecognizer::FromConfig(
    speechConfig,
    audioConfig);
// (Optional) get the session ID
speechRecognizer->SessionStarted.Connect([](const SessionEventArgs& e) {
    std::cout << "SESSION ID: " << e.SessionId << std::endl;
});
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 アプリケーション開発の場合、Speech SDK for Java を使用し、単語、音節、音素の結果を SDK オブジェクト経由で使用できます。 結果は JSON 文字列でも使用できます。 Java ランタイム (JRE) アプリケーション開発の場合、単語、音節、音素の結果は JSON 文字列でのみ使用できます。

SpeechRecognizer speechRecognizer = new SpeechRecognizer(
    speechConfig,
    audioConfig);
// (Optional) get the session ID
speechRecognizer.sessionStarted.addEventListener((s, e) -> {
    System.out.println("SESSION ID: " + e.getSessionId());
});
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);
// (Optional) get the session ID
speechRecognizer.sessionStarted = (s, e) => {
    console.log(`SESSION ID: ${e.sessionId}`);
};
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)
# (Optional) get the session ID
speech_recognizer.session_started.connect(lambda evt: print(f"SESSION ID: {evt.session_id}"))
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];
// (Optional) get the session ID
[speechRecognizer addSessionStartedEventHandler: ^ (SPXRecognizer *sender, SPXSessionEventArgs *eventArgs) {
    NSLog(@"SESSION ID: %@", eventArgs.sessionId);
}];
[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)
// (Optional) get the session ID
speechRecognizer.addSessionStartedEventHandler { (sender, evt) in
	print("SESSION ID: \(evt.sessionId)")
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)

発音評価結果のパラメーター

使っている評価がスクリプトありスクリプトなしかに応じて、異なる発音評価結果が得られます。 スクリプトありの評価は、リーディング言語学習シナリオ用です。 スクリプトなしの評価は、スピーキング言語学習シナリオ用です。

Note

スクリプトあり評価とスクリプトなし評価の価格の違いについては、「価格」のセクションを参照してください。

スクリプトあり評価の結果

この表は、スクリプトあり評価、またはリーディング シナリオの主要な発音評価結果の一部を示しています。

パラメーター 説明 細分性
AccuracyScore 音声の発音精度。 精度は、音素がネイティブ スピーカーの発音とどれだけ厳密に一致しているかを示します。 音節、単語、全文の正確性スコアは、音素レベルの正確性スコアから集計され、評価の目標で調整されます。 音素レベル、
音節レベル (en-US のみ)
単語レベル、
全文レベル
FluencyScore 指定された音声の流暢性。 流暢性は、音声がネイティブ スピーカーによる単語間の間の取り方にどれだけ厳密に一致しているかを示します。 全文レベル
CompletenessScore 音声の完成度。入力参照テキストに対する発音された単語の比率によって計算されます。 全文レベル
ProsodyScore 指定された音声の韻律。 韻律は、アクセント、イントネーション、話す速度、リズムなど、指定された音声がどの程度自然であるかを示します。 全文レベル
PronScore 特定の音声の発音品質の全体的なスコア。 PronScore は、ProsodyScoreCompletenessScore が使用可能な場合に、重み付けを使用して AccuracyScoreFluencyScoreCompletenessScoreProsodyScore から計算されます。 どちらかが使用できない場合、PronScore はそのスコアを考慮しません。 全文レベル
ErrorType この値は、参照テキストと比較したエラーの種類を示しています。 単語が省略される、挿入される、または区切りを伴って不適切に挿入されるかどうかのオプションがあります。 また、句読点による区切りが足りないことも示しています。 また、単語の発音が悪いか、発話が単調に上昇、下降、または平坦になっているかを示します。 指定できる値は、この単語にエラーがない場合の NoneOmissionInsertionMispronunciationUnexpectedBreakMissingBreakMonotone. です。 単語の発音の AccuracyScore が 60 未満の場合、エラーの種類は Mispronunciation です。 単語レベル

スクリプトなし評価の結果

この表は、スクリプトなし評価、またはスピーキング シナリオの主要な発音評価結果の一部を示しています。

VocabularyScoreGrammarScore、および TopicScore パラメーターは、組み合わされたコンテンツ評価にロールアップされます。

Note

コンテンツと韻律の評価は、en-US ロケールでのみお使いいただけます。

応答パラメーター 説明 細分性
AccuracyScore 音声の発音精度。 精度は、音素がネイティブ スピーカーの発音とどれだけ厳密に一致しているかを示します。 音節、単語、全文の正確性スコアは、音素レベルの正確性スコアから集計され、評価の目標で調整されます。 音素レベル、
音節レベル (en-US のみ)
単語レベル、
全文レベル
FluencyScore 指定された音声の流暢性。 流暢性は、音声がネイティブ スピーカーによる単語間の間の取り方にどれだけ厳密に一致しているかを示します。 全文レベル
ProsodyScore 指定された音声の韻律。 韻律は、アクセント、イントネーション、話す速度、リズムなど、指定された音声がどの程度自然であるかを示します。 全文レベル
VocabularyScore 語彙の使用能力。 話者の単語の効果的な使用法と、正確にアイデアを表現するための与えられたコンテキスト内での適切さ、語彙の複雑さのレベルを評価します。 全文レベル
GrammarScore 文法の使い方の正確さと文型の多様性。 語彙の正確さ、文法の正確さ、文構造の多様性により、文法の誤りは、総合的に評価されます。 全文レベル
TopicScore トピックの理解とエンゲージメントのレベル。これにより、話者の考えやアイデアを効果的に表現する能力と、トピックに関与する能力について洞察が得られます。 全文レベル
PronScore 特定の音声の発音品質の全体的なスコア。 PronScore は、ProsodyScore が使用可能な場合に、重み付けを使用して AccuracyScoreFluencyScoreProsodyScore から計算されます。 ProsodyScore が使用できない場合、PronScore はそのスコアを考慮しません。 全文レベル
ErrorType 単語が不適切に発音されたり、不適切に区切りが挿入されたり、句読点による区切りが足りなかったりしています。 また、発話において、発音が単調に上昇、下降、または平坦になっているかを示します。 指定できる値は、この単語にエラーがない場合の NoneMispronunciationUnexpectedBreakMissingBreakMonotone です。 単語レベル

次の表は、韻律評価の結果について詳しく説明したものです。

フィールド 説明
ProsodyScore 発話全体の韻律スコア。
Feedback BreakIntonation など、単語レベルに関するフィードバック。
Break
ErrorTypes 区切りに関連するエラーの種類 (UnexpectedBreakMissingBreak など)。 現在のバージョンでは、区切りエラーの種類は提供されていません。 単語の前に想定外の区切りがある、または区切りが欠落しているかどうかを判定するには、フィールド UnexpectedBreak – Confidence とフィールド MissingBreak – confidence にしきい値を設定する必要があります。
UnexpectedBreak 単語の前に予期しない区切りがあることを示します。
MissingBreak 単語の前に区切りが欠落していることを示します。
Thresholds 両方の信頼度スコアの推奨しきい値は 0.75 です。 つまり、UnexpectedBreak – Confidence の値が 0.75 より大きい場合は、想定外の区切りがあるということです。 MissingBreak – confidence の値が 0.75 より大きい場合は、区切りが欠落しています。 0.75 は推奨される値ですが、お客様のシナリオに基づいてしきい値を調整することをお勧めします。 これら 2 つの区切りについて検出感度を可変にする場合は、UnexpectedBreak - Confidence フィールドと MissingBreak - Confidence フィールドに異なるしきい値を割り当てることができます。
Intonation 音声のイントネーションを示します。
ErrorTypes イントネーションに関連するエラーの種類。現在は Monotone のみをサポートしています。 ErrorTypes フィールドに Monotone が存在する場合、発話は単調であると検出されます。 Monotone は発話全体で検出されますが、タグはすべての単語に割り当てられます。 同じ発話内のすべての単語は、同じ単調検出情報を共有します。
Monotone 単調な音声を示します。
Thresholds (Monotone Confidence) フィールド Monotone - SyllablePitchDeltaConfidence は、ユーザー カスタマイズによる単調性検出用に予約されています。 提供された単調判定に不満がある場合は、これらのフィールドのしきい値を調整して、好みに応じて検出をカスタマイズします。

JSON の結果の例

次の例では、発音された単語 "hello" のスクリプトあり発音評価結果が JSON 文字列として表示されます。

  • 音素のアルファベットは IPA です。
  • 音節は、同じ単語の音素と共に返されます。
  • この OffsetDuration の値を使用して、音節を対応する音素に合わせることができます。 たとえば、2 番目の音節 loʊ の開始オフセット (11700000) は、3 番目の音素 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
                        }
                    ]
                }
            ]
        }
    ]
}

次の発音評価スコアを取得できます。

  • 全文
  • Words
  • 音節グループ
  • 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-US および zh-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

発音スコアの計算

発音スコアは、読み取りと読み上げのシナリオに関する特定の数式に基づいて、正確性、韻律、流暢さ、完全性のスコアに重みを付けることで、計算されます。

正確性、韻律、流暢さ、完全性のスコアを低から高の順に並べ替え (各スコアが使用可能な場合)、最低スコアから最高スコアを s0 から s3 と表すと、発音スコアは次のように計算されます。

読み取りシナリオの場合:

  • 韻律スコアあり: PronScore = 0.4 * s0 + 0.2 * s1 + 0.2 * s2 + 0.2 * s3
  • 韻律スコアなし: PronScore = 0.6 * s0 + 0.2 * s1 + 0.2 * s2

読み上げシナリオの場合 (完全性スコアは適用されません):

  • 韻律スコアあり: PronScore = 0.6 * s0 + 0.2 * s1 + 0.2 * s2
  • 韻律スコアなし: PronScore = 0.6 * s0 + 0.4 * s1

この数式により、各スコアの重要度に基づく加重計算が提供されて、発音の包括的な評価が保証されます。