Usar a avaliação de pronúncia

Neste artigo, você aprenderá a avaliar a pronúncia com a funcionalidade de conversão de fala em texto por meio do SDK de Fala. A avaliação de pronúncia avalia a pronúncia da fala e fornece comentários aos locutores sobre a precisão e a fluência do áudio falado.

Usar a avaliação de pronúncia no modo de streaming

A avaliação de pronúncia dá suporte ao modo de streaming ininterrupto. O tempo de gravação pode ser ilimitado por meio do SDK de Fala. Desde que você não interrompa a gravação, o processo de avaliação não será concluído e você poderá pausar e retomar a avaliação convenientemente.

Para obter informações sobre a disponibilidade da avaliação de pronúncia, consulte idiomas com suporte e regiões disponíveis.

Como linha de base, o uso da avaliação de pronúncia custa o mesmo preço que o pagamento conforme o uso da conversão de fala em texto para o nível pago conforme o uso ou o nível de compromisso. Se você comprar um nível de compromisso para conversão de fala em texto, o gasto pela avaliação de pronúncia servirá para atender ao compromisso. Para saber mais, consulte Preços.

Para saber como usar a Avaliação de Pronúncia no modo de streaming em seu próprio aplicativo, consulte código de exemplo.

Para saber como usar a Avaliação de Pronúncia no modo de streaming em seu próprio aplicativo, consulte código de exemplo.

Para saber como usar a Avaliação de Pronúncia no modo de streaming em seu próprio aplicativo, consulte código de exemplo.

Para saber como usar a Avaliação de Pronúncia no modo de streaming em seu próprio aplicativo, consulte código de exemplo.

Para saber como usar a Avaliação de Pronúncia no modo de streaming em seu próprio aplicativo, consulte código de exemplo.

Para saber como usar a Avaliação de Pronúncia no modo de streaming em seu próprio aplicativo, consulte código de exemplo.

Para saber como usar a Avaliação de Pronúncia no modo de streaming em seu próprio aplicativo, consulte código de exemplo.

Definir os parâmetros de configuração

Observação

A avaliação de pronúncia não está disponível com o SDK de Fala para Go. Você pode ler sobre os conceitos neste guia. Selecione outra linguagem de programação para a solução.

Em SpeechRecognizer, você pode especificar o idioma que quer aprender ou praticar para melhorar sua pronúncia. A localidade padrão é en-US. Para saber como especificar o idioma sendo aprendido para avaliação da pronúncia no seu próprio aplicativo, confira essa amostra de código.

Dica

Se não tiver certeza de qual localidade definir quando um idioma tiver várias, tente cada uma separadamente. Por exemplo, no caso do espanhol, tente es-ES e es-MX. Determine qual localidade tem a pontuação mais alta para o seu cenário.

Você deve criar um objeto PronunciationAssessmentConfig. Você pode definir EnableProsodyAssessment e EnableContentAssessmentWithTopic para habilitar a avaliação de conteúdo e prosódia. Para obter mais informações, confira métodos de configuração.

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")

Esta tabela lista alguns dos principais parâmetros de configuração para a avaliação de pronúncia.

Parâmetro Descrição
ReferenceText O texto com relação ao qual a pronúncia será avaliada.

O ReferenceText é opcional. Defina o texto de referência se você quiser executar uma avaliação com script para o cenário de aprendizado de idioma de leitura. Para executar uma avaliação sem script, não defina o texto de referência.

Confira as diferenças de preços entre as avaliações com e sem script em Preços.
GradingSystem O sistema de pontos para calibragem da pontuação. FivePoint dá uma pontuação de ponto flutuante de 0 a 5. HundredMark dá uma pontuação de ponto flutuante de 0 a 100. Padrão: FivePoint.
Granularity Determina o nível mais baixo de granularidade de avaliação. Retorna pontuações para níveis maiores ou iguais ao valor mínimo. Os valores aceitos são Phoneme, que mostra a pontuação no nível do texto completo, da palavra, da sílaba e do fonema, Word, que mostra a pontuação no nível do texto completo e da palavra ou FullText, que mostra a pontuação somente no nível do texto completo. O texto de referência completo fornecido pode ser uma palavra, uma frase ou um parágrafo. Ele dependerá do texto de referência de entrada. Padrão: Phoneme.
EnableMiscue Habilita o cálculo de erros quando as palavras pronunciadas são comparadas ao texto de referência. Habilitar o erro de execução (miscue) é opcional. Se esse valor for True, o valor do resultado ErrorType poderá ser definido como Omission ou Insertion com base na comparação. Os valores são False e True. Padrão: False. Para habilitar o cálculo de erro, defina EnableMiscue como True. Você pode consultar o trecho de código abaixo da tabela.
ScenarioId Um GUID que indica um sistema de pontos personalizado.

Métodos de configuração

Esta tabela lista alguns dos métodos opcionais que você pode definir para o objeto PronunciationAssessmentConfig.

Observação

As avaliações de conteúdo e prosódia só estão disponíveis na localidade en-US.

Para explorar o conteúdo e as avaliações do prosody, atualize para o SDK versão 1.35.0 ou posterior.

Método Descrição
EnableProsodyAssessment Habilita a avaliação da prosódia para sua avaliação de pronúncia. Esse recurso avalia aspectos como estresse, entonação, velocidade de fala e ritmo. Esse recurso fornece insights sobre a naturalidade e a expressividade da fala.

A habilitação da avaliação da prosódia é opcional. Se esse método for chamado, o valor do resultado ProsodyScore será retornado.
EnableContentAssessmentWithTopic Habilita a avaliação de conteúdo. Uma avaliação de conteúdo faz parte da avaliação sem script para o cenário de aprendizado do idioma falado. Ao fornecer uma descrição, você pode aprimorar o reconhecimento da avaliação do tópico específico que está sendo falado. Um exemplo seria a chamada em C# pronunciationAssessmentConfig.EnableContentAssessmentWithTopic("greeting");. Nela, você pode substituir a “saudação” pelo texto desejado para descrever um tópico. A descrição não tem limite de comprimento e só dá suporte à en-US no momento.

Obtenha os resultados da avaliação de pronúncia

Quando a fala é reconhecida, você pode solicitar os resultados da avaliação de pronúncia como objetos SDK ou uma cadeia de caracteres 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);
}

Os resultados de palavras, sílabas e fonemas não estão disponíveis ao usar objetos de SDK com o SDK do Serviço Cognitivo do Azure Fala para C++. Os resultados de word, sílaba e fonemas só estão disponíveis na cadeia de caracteres 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);

Para saber como especificar o idioma sendo aprendido para avaliação da pronúncia no seu próprio aplicativo, confira essa amostra de código.

No caso do desenvolvimento de aplicativos Android, os resultados de palavras, sílabas e fonemas estão disponíveis ao usar objetos de SDK com o SDK do Serviço Cognitivo do Azure para Fala para Java. Os resultados também estão disponíveis na cadeia de caracteres JSON. Para o desenvolvimento de aplicativos JRE (Java Runtime), os resultados de palavras, sílabas e fonemas estão só estão disponíveis na cadeia de caracteres 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);
},
{});

Para saber como especificar o idioma sendo aprendido para avaliação da pronúncia no seu próprio aplicativo, confira essa amostra de código.

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)

Para saber como especificar o idioma sendo aprendido para avaliação da pronúncia no seu próprio aplicativo, confira essa amostra de código.

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];

Para saber como especificar o idioma sendo aprendido para avaliação da pronúncia no seu próprio aplicativo, confira essa amostra de código.

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)

Parâmetros de resultado

Dependendo de você estar usando uma avaliação com script ou sem script, você poderá obter resultados diferentes da avaliação de pronúncia. A avaliação com script é destinada ao cenário de aprendizado de um idioma pela leitura. A avaliação sem script é destinada ao cenário de aprendizado de um idioma pela fala.

Observação

Confira as diferenças de preços entre as avaliações com e sem script em Preços.

Resultados da avaliação com script

Esta tabela lista alguns dos principais resultados da avaliação de pronúncia para a avaliação com script, ou seja, o cenário de leitura.

Parâmetro Descrição Granularidade
AccuracyScore Precisão da pronúncia da fala. A precisão indica o quanto os fonemas correspondem à pronúncia de um locutor nativo. As pontuações de precisão de sílaba, palavra e texto completo são agregadas com base na pontuação de precisão no nível de fonema e refinadas com os objetivos de avaliação. Nível de fonema,
Nível de sílaba (somente en-US),
Nível de palavra,
Nível de texto completo
FluencyScore Fluência da fala fornecida. A fluência indica o quanto a fala corresponde ao uso que um locutor nativo faria de pausas silenciosas entre as palavras. Nível de texto completo
CompletenessScore Integridade da fala, calculada pela proporção entre as palavras pronunciadas e o texto de referência de entrada. Nível de texto completo
ProsodyScore Prosódia do discurso dado. Prosódia indica o quão natural é a fala fornecida, incluindo acento tônico, entonação, velocidade de fala e ritmo. Nível de texto completo
PronScore Pontuação geral que indica a qualidade da pronúncia da fala em questão. PronScore é agregado de AccuracyScore, FluencyScore, e com peso CompletenessScore. Nível de texto completo
ErrorType Esse valor indica o tipo de erro em comparação com o texto de referência. As opções incluem a omissão, a inserção ou a inclusão incorreta de uma palavra com uma pausa. Ele também indica uma pausa que não tem uma pontuação correspondente. Também indica se uma palavra é mal pronunciada, ou está subindo monotonicamente, caindo ou está plana na fala. Os valores possíveis são None, que indica que não há erros na palavra, além de Omission, Insertion, Mispronunciation, UnexpectedBreak, MissingBreak e Monotone. O tipo de erro poderá ser Mispronunciation quando o AccuracyScore da pronúncia de uma palavra estiver abaixo de 60. Nível de palavra

Resultados da avaliação sem script

Esta tabela lista alguns dos principais resultados da avaliação de pronúncia para a avaliação sem script, ou seja, o cenário de fala.

Os parâmetros VocabularyScore, GrammarScore e TopicScore são acumulados para a avaliação de conteúdo combinada.

Observação

As avaliações de conteúdo e prosódia só estão disponíveis na localidade en-US.

Parâmetro de resposta Descrição Granularidade
AccuracyScore Precisão da pronúncia da fala. A precisão indica o quanto os fonemas correspondem à pronúncia de um locutor nativo. As pontuações de precisão de sílaba, palavra e texto completo são agregadas a partir da pontuação de precisão em nível de fonema e refinadas com os objetivos de avaliação. Nível de fonema,
Nível de sílaba (somente en-US),
Nível de palavra,
Nível de texto completo
FluencyScore Fluência da fala fornecida. A fluência indica o quanto a fala corresponde ao uso que um locutor nativo faria de pausas silenciosas entre as palavras. Nível de texto completo
ProsodyScore Prosódia do discurso dado. Prosódia indica o quão natural é a fala fornecida, incluindo acento tônico, entonação, velocidade de fala e ritmo. Nível de texto completo
VocabularyScore Proficiência no uso léxico. Ele avalia o uso efetivo de palavras do orador e sua adequação dentro do contexto fornecido para expressar ideias com precisão e o nível de complexidade lexical. Nível de texto completo
GrammarScore Correção no uso de gramática e variedade de padrões de frase. O número de erros gramaticais aumenta de acordo com a combinação de precisão léxica, precisão gramatical e diversidade de estruturas de frases. Nível de texto completo
TopicScore Nível de compreensão e envolvimento com o tópico, que fornece insights sobre a capacidade do orador de expressar seus pensamentos e ideias de forma eficaz e a capacidade de se envolver com o tópico. Nível de texto completo
PronScore Pontuação geral que indica a qualidade da pronúncia da fala em questão. Esse valor é agregado com base em AccuracyScore, FluencyScore e CompletenessScore e inclui peso. Nível de texto completo
ErrorType Ele indica uma palavra mal pronunciada, a inserção incorreta de uma palavra com uma pausa ou uma pausa que não tem uma pontuação correspondente. Também indica se a pronúncia está subindo, descendo ou estabilizada monotonicamente na fala. Os valores possíveis são None, que indica que não há erros na palavra, além de Mispronunciation, UnexpectedBreak, MissingBreak e Monotone. Nível de palavra

A tabela a seguir descreve os resultados da avaliação de prosódia em mais detalhes:

Campo Descrição
ProsodyScore Pontuação de prosódia de todo o enunciado.
Feedback Comentários sobre o nível da palavra, incluindo Break e Intonation.
Break
ErrorTypes Tipos de erro relacionados a quebras, incluindo UnexpectedBreak e MissingBreak. A versão atual não conta com o tipo de erro de pausa. Você precisa definir limites nos campos UnexpectedBreak – Confidence e MissingBreak – confidence para decidir se há uma pausa inesperada ou ausente antes da palavra.
UnexpectedBreak Indica uma interrupção inesperada antes da palavra.
MissingBreak Indica uma quebra ausente antes da palavra.
Thresholds Os limites sugeridos em ambas as pontuações de confiança são 0,75. Isso significa que, se o valor de UnexpectedBreak – Confidence for maior que 0,75, haverá uma pausa inesperada. Se o valor de MissingBreak – confidence for maior que 0,75, haverá uma pausa ausente. Embora 0,75 seja um valor que recomendamos, é melhor ajustar os limites com base em seu próprio cenário. Para ter sensibilidade de detecção variável nas duas pausas, atribua limites diferentes aos campos UnexpectedBreak - Confidence e MissingBreak - Confidence.
Intonation Indica a entonação na fala.
ErrorTypes Tipos de erro relacionados à entonação, que atualmente dá suporte apenas a fala monotônica. Se houver Monotone no campo ErrorTypes, o enunciado será detectado como monotônico. A fala monotônica é detectada em todo o enunciado, mas a marca é atribuída a todas as palavras. Todas as palavras no mesmo enunciado compartilham as mesmas informações de detecção de fala monotônica.
Monotone Indica fala monotônica.
Thresholds (Monotone Confidence) Os campos Monotone - SyllablePitchDeltaConfidence são reservados para a detecção monotônica personalizada pelo usuário. Se você não estiver satisfeito com a decisão de fala monotônica fornecida, ajuste os limites nesses campos para personalizar a detecção de acordo com suas preferências.

Exemplo de resultado JSON

Os resultados da avaliação de pronúncia com script para a palavra falada "olá" são mostrados como uma cadeia de caracteres JSON no exemplo a seguir.

  • O alfabeto fonema é IPA.
  • As sílabas são retornadas junto com fonemas para a mesma palavra.
  • Você pode usar os valores Offset e Durationpara alinhar sílabas com sues fonemas correspondentes. Por exemplo, o deslocamento inicial (11700000) da segunda sílaba, loʊ, alinha-se ao terceiro fonema, l. O deslocamento representa o momento em que a fala reconhecida começa no fluxo de áudio. O valor é medido em unidades de 100 nanossegundos. Para saber mais sobre Offset e Duration, confira as propriedades da resposta.
  • Há cinco NBestPhonemes correspondentes ao número de fonemas falados solicitados.
  • Dentro Phonemes, os fonemas falados mais prováveis eram ə, ao invés do fonema ɛ esperado. O fonema ɛ esperado recebeu apenas uma pontuação de confiança de 47. Outras possíveis partidas receberam pontuações de confiança de 52, 17 e 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
                        }
                    ]
                }
            ]
        }
    ]
}

Você pode obter pontuações de avaliação de pronúncia para:

  • Texto completo
  • Palavras
  • Grupos de sílabas
  • Fonemas no formato SAPI ou IPA

Recursos com suporte por localidade

A tabela a seguir resume qual recurso tem suporte por localidade. Confira as seções a seguir para obter mais detalhes.

Alfabeto do fonema IPA SAPI
Nome do fonema en-US en-US, zh-CN
Grupo de sílabas en-US en-US
Fonema falado en-US en-US

Grupos de sílabas

A avaliação de pronúncia pode fornecer resultados de avaliação em nível sílaba. Uma palavra normalmente é pronunciada sílaba por sílaba, em vez de fonema por fonema. O agrupamento em sílabas é mais legível e alinhado aos hábitos de fala.

A avaliação de pronúncia dá suporte a grupos de sílabas somente em en-US com IPA e com SAPI.

A tabela a seguir compara fonemas de exemplo com as sílabas correspondentes.

Palavras de exemplo Fonemas Sílabas
tecnologia teknələdʒɪkl tek·nə·lɑ·dʒɪkl
hello hɛloʊ hɛ·loʊ
Sorte lʌk lʌk
Fotossíntese foʊtəsɪnθəsɪs foʊ·tə·sɪn·θə·sɪs

Para solicitar resultados de nível de sílaba junto com fonemas, defina o parâmetro de configuração de granularidade como Phoneme.

Formato do alfabeto do fonema

A avaliação de pronúncia dá suporte a nome de fonema em en-US com IPA e em en-US e zh-CN com SAPI.

No caso das localidades que dão suporte ao nome do fonema, ele é fornecido com a pontuação. Os nomes de fonemas ajudam a identificar quais fonemas foram pronunciados com precisão ou imprecisão. Para outras localidades, será possível apenas obter a pontuação de fonema.

A tabela a seguir compara fonemas do SAPI de exemplo com os fonemas do IPA correspondentes.

Palavras de exemplo Fonemas SAPI Fonemas IPA
hello h eh l ow h ɛ l oʊ
Sorte l ah k l ʌ k
Fotossíntese f ow t ax s ih n th ax s ih s f oʊ t ɪ n θ ɪ s ɪ s

Para solicitar fonemas do IPA, defina o alfabeto do fonema como IPA. Se você não especificar o alfabeto, os fonemas estarão no formato SAPI por padrão.

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"

Avaliar os fonemas falados

No caso dos fonemas falados, você pode obter pontuações de confiança que indicam a probabilidade de eles corresponderem aos fonemas esperados.

A avaliação de pronúncia dá suporte a fonemas falados em en-US com IPA e com SAPI.

Por exemplo, para obter o som falado completo da palavra Hello, você pode concatenar o primeiro fonema falado para cada fonema esperado com a pontuação de confiança mais alta. No resultado da avaliação a seguir, quando você fala a palavra hello, os fonemas do IPA esperados são h ɛ l oʊ. No entanto, os fonemas realmente falados são h ə l oʊ. Você tem cinco possíveis candidatos para cada fonema esperado neste exemplo. O resultado da avaliação mostra que o fonema falado mais provável foi ə ao invés do fonema ɛ esperado. O fonema ɛ esperado recebeu apenas uma pontuação de confiança de 47. Outras possíveis partidas receberam pontuações de confiança de 52, 17 e 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
                        }
                    ]
                }
            ]
        }
    ]
}

Para indicar se, e quantos fonemas falados potenciais para obter pontuações de confiança, defina o parâmetro NBestPhonemeCount como um valor inteiro, como 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