Usar avaliação de pronúncia

Neste artigo, você aprenderá a avaliar a pronúncia com fala para texto por meio do SDK de fala. A avaliação da pronúncia avalia a pronúncia da voz e dá aos oradores feedback sobre a precisão e a fluência do áudio falado.

Nota

A avaliação da pronúncia usa uma versão específica do modelo de fala para texto, diferente do modelo padrão de fala para texto, para garantir uma avaliação de pronúncia consistente e precisa.

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

A avaliação de pronúncia suporta o modo de streaming ininterrupto. O tempo de gravação pode ser ilimitado através do Speech SDK. Contanto que você não pare de gravar, o processo de avaliação não termina e você pode pausar e retomar a avaliação convenientemente.

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

Como linha de base, o uso da avaliação de pronúncia custa o mesmo que fala para texto para preços pré-pagos ou de nível de compromisso. Se você comprar uma camada de compromisso para fala para texto, o gasto para avaliação de pronúncia vai para cumprir o compromisso. Para obter mais informações, veja os Preços.

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

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

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

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

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

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

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

Reconhecimento contínuo

Se o arquivo de áudio exceder 30 segundos, use o modo contínuo para processamento. O código de exemplo para o modo contínuo pode ser encontrado no GitHub sob a função PronunciationAssessmentContinuousWithFile.

Se o arquivo de áudio exceder 30 segundos, use o modo contínuo para processamento.

Se o arquivo de áudio exceder 30 segundos, use o modo contínuo para processamento. O código de exemplo para o modo contínuo pode ser encontrado no GitHub sob a função pronunciationAssessmentContinuousWithFile.

Se o arquivo de áudio exceder 30 segundos, use o modo contínuo para processamento. O código de exemplo para o modo contínuo pode ser encontrado no GitHub sob a função pronunciation_assessment_continuous_from_file.

Se o arquivo de áudio exceder 30 segundos, use o modo contínuo para processamento. O código de exemplo para o modo contínuo pode ser encontrado no GitHub.

Se o arquivo de áudio exceder 30 segundos, use o modo contínuo para processamento. O código de exemplo para o modo contínuo pode ser encontrado no GitHub sob a função pronunciationAssessFromFile.

Se o arquivo de áudio exceder 30 segundos, use o modo contínuo para processamento. O código de exemplo para o modo contínuo pode ser encontrado no GitHub sob a função continuousPronunciationAssessment.

Definir parâmetros de configuração

Nota

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

No , você pode especificar o idioma para aprender ou praticar a melhoria da SpeechRecognizerpronúncia. A localidade padrão é en-US. Para saber como especificar o idioma de aprendizagem para avaliação de pronúncia em seu próprio aplicativo, você pode usar o código de exemplo a seguir.

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)

Gorjeta

Se você não tiver certeza de qual localidade definir para um idioma que tenha várias localidades, tente cada localidade separadamente. Por exemplo, para o espanhol, tente es-ES e es-MX. Determine qual localidade obtém pontuações mais altas para o seu cenário.

Você deve criar um PronunciationAssessmentConfig objeto. Você pode definir EnableProsodyAssessment e EnableContentAssessmentWithTopic habilitar a prosódia e a avaliação de conteúdo. Para obter mais informações, consulte 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 avaliação de pronúncia.

Parâmetro Description
ReferenceText O texto contra o qual a pronúncia é avaliada.

O ReferenceText parâmetro é opcional. Defina o texto de referência se quiser executar uma avaliação com script para o cenário de aprendizagem de linguagem de leitura. Não defina o texto de referência se quiser executar uma avaliação sem script.

Para conhecer as diferenças de preços entre avaliação com e sem script, consulte Preços.
GradingSystem O sistema de pontos para calibração da pontuação. FivePoint dá uma pontuação de 0-5 pontos flutuantes. HundredMark dá uma pontuação de 0-100 pontos flutuantes. Padrão: FivePoint.
Granularity Determina o nível mais baixo de granularidade da 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 de texto completo, palavra, sílaba e fonema, Word, que mostra a pontuação no nível de texto completo e palavra, ou FullText, que mostra a pontuação apenas no nível de texto completo. O texto de referência completo fornecido pode ser uma palavra, frase ou parágrafo. Depende do texto de referência da sua entrada. Padrão: Phoneme.
EnableMiscue Permite o cálculo incorreto quando as palavras pronunciadas são comparadas com o texto de referência. Ativar o miscue é opcional. Se esse valor for True, o valor do ErrorType resultado pode 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 incorreto, defina como EnableMiscue True. Você pode consultar o trecho de código acima da tabela.
ScenarioId Um GUID para um sistema de pontos personalizado.

Métodos de configuração

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

Nota

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 de prosódia, atualize para o SDK versão 1.35.0 ou posterior.

Não há limite de comprimento para o parâmetro topic.

Método Description
EnableProsodyAssessment Permite a avaliação da prosódia para a sua avaliação de pronúncia. Esse recurso avalia aspetos como estresse, entonação, velocidade de fala e ritmo. Este recurso fornece informações sobre a naturalidade e expressividade do seu discurso.

A habilitação da avaliação da prosódia é opcional. Se esse método for chamado, o valor do ProsodyScore resultado será retornado.
EnableContentAssessmentWithTopic Permite a avaliação de conteúdo. Uma avaliação de conteúdo faz parte da avaliação sem script para o cenário de aprendizagem da língua falada. Ao fornecer uma descrição, você pode melhorar a compreensão da avaliação sobre o tópico específico que está sendo falado. Por exemplo, em C#, chame pronunciationAssessmentConfig.EnableContentAssessmentWithTopic("greeting");. Você pode substituir "saudação" pelo texto desejado para descrever um tópico. A descrição não tem limite de comprimento e, atualmente, suporta apenas a en-US localidade.

Obter 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))
{
    // (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);
}

Os resultados do Word, sílaba e fonema não estão disponíveis usando objetos SDK com o SDK de fala para C++. Os resultados de Word, sílaba e fonema só estão disponíveis na cadeia de caracteres 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);

Para saber como especificar o idioma de aprendizagem para avaliação de pronúncia em seu próprio aplicativo, consulte Código de exemplo.

Para o desenvolvimento de aplicativos Android, os resultados de palavra, sílaba e fonema estão disponíveis usando objetos SDK com o SDK de fala para Java. Os resultados também estão disponíveis na cadeia de caracteres JSON. Para o desenvolvimento de aplicativos Java Runtime (JRE), os resultados de palavra, sílaba e fonema só estão disponíveis na cadeia de caracteres 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);
},
{});

Para saber como especificar o idioma de aprendizagem para avaliação de pronúncia em seu próprio aplicativo, consulte Código de exemplo.

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)

Para saber como especificar o idioma de aprendizagem para avaliação de pronúncia em seu próprio aplicativo, consulte Código de exemplo.

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

Para saber como especificar o idioma de aprendizagem para avaliação de pronúncia em seu próprio aplicativo, consulte Código de exemplo.

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)

Parâmetros de resultado

Dependendo se você estiver usando uma avaliação com ou sem script, você pode obter resultados de avaliação de pronúncia diferentes. A avaliação por script é para o cenário de aprendizagem da linguagem de leitura. A avaliação sem script destina-se ao cenário de aprendizagem da língua falante.

Nota

Para conhecer as diferenças de preços entre avaliação com e sem script, consulte 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 cenário de leitura.

Parâmetro Description Granularidade
AccuracyScore Precisão da pronúncia da fala. A precisão indica quão próximos os fonemas correspondem à pronúncia de um falante 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 no nível do fonema e refinadas com os objetivos da avaliação. Nível de fonema,
Nível de sílaba (apenas en-US),
Nível de palavras,
Nível de texto completo
FluencyScore Fluência do discurso dado. A fluência indica o quão próximo o discurso corresponde ao uso de intervalos silenciosos entre palavras por um falante nativo. Nível de texto completo
CompletenessScore Completude da fala, calculada pela razão entre palavras pronunciadas e o texto de referência de entrada. Nível de texto completo
ProsodyScore Prosódia do discurso proferido. A prosódia indica o quão natural é a fala dada, incluindo estresse, entonação, velocidade de fala e ritmo. Nível de texto completo
PronScore Pontuação geral da qualidade da pronúncia do discurso dado. PronScore é calculado a partir de AccuracyScore, FluencyScore, CompletenessScore, e ProsodyScore com peso, desde que ProsodyScore e CompletenessScore estejam disponíveis. Se qualquer um deles não estiver disponível, PronScore não considerará essa pontuação. 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 se uma palavra é omitida, inserida ou inserida incorretamente com uma quebra. Também indica uma quebra ausente na pontuação. Também indica se uma palavra está mal pronunciada, ou monotonicamente subindo, caindo ou planando no enunciado. Os valores possíveis são None para nenhum erro nesta palavra, Omission, , InsertionMispronunciation, UnexpectedBreak, MissingBreak, e Monotone. O tipo de erro pode ser Mispronunciation quando a pronúncia AccuracyScore de uma palavra está abaixo de 60. Nível da 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 cenário de fala.

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

Parâmetro de resposta Description Granularidade
AccuracyScore Precisão da pronúncia da fala. A precisão indica quão próximos os fonemas correspondem à pronúncia de um falante 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 no nível de fonema e refinadas com os objetivos da avaliação. Nível de fonema,
Nível de sílaba (apenas en-US),
Nível de palavras,
Nível de texto completo
FluencyScore Fluência do discurso dado. A fluência indica o quão próximo o discurso corresponde ao uso de intervalos silenciosos entre palavras por um falante nativo. Nível de texto completo
ProsodyScore Prosódia do discurso proferido. A prosódia indica o quão natural é a fala dada, incluindo estresse, entonação, velocidade de fala e ritmo. Nível de texto completo
VocabularyScore Proficiência no uso lexical. Ele avalia o uso efetivo das palavras pelo orador e sua adequação dentro do contexto dado para expressar ideias com precisão, e o nível de complexidade lexical. Nível de texto completo
GrammarScore Correção no uso da gramática e variedade de padrões de frases. A precisão lexical, a precisão gramatical e a diversidade de estruturas de frases elevam conjuntamente os erros gramaticais. Nível de texto completo
TopicScore Nível de compreensão e envolvimento com o tópico, que fornece informações 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 da qualidade da pronúncia do discurso dado. PronScore é calculado a partir de AccuracyScore, FluencyScoree ProsodyScore com peso, desde que ProsodyScore disponível. Se ProsodyScore não estiver disponível, PronScore não considerará essa pontuação. Nível de texto completo
ErrorType Uma palavra é mal pronunciada, inserida indevidamente com uma pausa ou falta de uma pausa na pontuação. Também indica se uma pronúncia está monotonicamente subindo, caindo ou plana no enunciado. Os valores possíveis são None para nenhum erro nesta palavra, Mispronunciation, , UnexpectedBreakMissingBreak, e Monotone. Nível da palavra

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

Campo Descrição
ProsodyScore Pontuação de prosódia de todo o enunciado.
Feedback Feedback 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 fornece o tipo de erro de quebra. Você precisa definir limites nos campos UnexpectedBreak – Confidence e MissingBreak – confidence decidir se há uma quebra inesperada ou falta antes da palavra.
UnexpectedBreak Indica uma quebra inesperada antes da palavra.
MissingBreak Indica uma quebra ausente antes da palavra.
Thresholds Os limiares sugeridos em ambos os escores de confiança são 0,75. Isso significa que, se o valor de UnexpectedBreak – Confidence for maior que 0,75, ele terá uma quebra inesperada. Se o valor de MissingBreak – confidence for maior que 0,75, ele tem uma quebra ausente. Embora 0,75 seja um valor que recomendamos, é melhor ajustar os limites com base no seu próprio cenário. Se quiser ter sensibilidade de deteção variável nessas duas quebras, você pode atribuir limites diferentes aos UnexpectedBreak - Confidence campos e MissingBreak - Confidence .
Intonation Indica entonação na fala.
ErrorTypes Tipos de erro relacionados à entonação, atualmente suportando apenas Monotone. Se o Monotone existir no campo ErrorTypes, o enunciado é detetado como monotônico. Monotone é detetado em todo o enunciado, mas a tag é atribuída a todas as palavras. Todas as palavras no mesmo enunciado compartilham as mesmas informações de deteção monótonas.
Monotone Indica fala monotônica.
Thresholds (Monotone Confidence) Os campos Monotone - SyllablePitchDeltaConfidence são reservados para deteção monótona personalizada pelo usuário. Se você não estiver satisfeito com a decisão monótona fornecida, ajuste os limites nesses campos para personalizar a deteçã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 "hello" são mostrados como uma cadeia de caracteres JSON no exemplo a seguir.

  • O alfabeto fonema é IPA.
  • As sílabas são devolvidas ao lado de fonemas para a mesma palavra.
  • Você pode usar os valores e Duration para alinhar as sílabas com seus fonemas Offset correspondentes. Por exemplo, o deslocamento inicial (11700000) da segunda sílaba loʊ se alinha com o 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, consulte Propriedades de resposta.
  • Há cinco NBestPhonemes que correspondem ao número de fonemas falados solicitados.
  • Dentro Phonemesde , os fonemas falados mais provavelmente eram ə em vez do fonema ɛesperado. O fonema ɛ esperado recebeu apenas um índice 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 integral
  • Palavras
  • Grupos de sílabas
  • Fonemas em formato SAPI ou IPA

Recursos suportados por localidade

A tabela a seguir resume quais recursos as localidades suportam. Para obter mais especificações, consulte as seções a seguir. Se as localidades necessárias não estiverem listadas na tabela a seguir para o recurso suportado, preencha este formulário de admissão para obter mais assistência.

Alfabeto 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 da pronúncia pode fornecer resultados de avaliação de nível de sílaba. Uma palavra é tipicamente pronunciada sílaba por sílaba em vez de fonema por fonema. O agrupamento em sílabas é mais legível e alinhado com os hábitos de fala.

A avaliação de pronúncia suporta grupos de sílabas apenas com en-US IPA e com SAPI.

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

Palavra de exemplo Fonemas Sílabas
Tecnológico 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 fonema

A avaliação de pronúncia suporta o nome do fonema no en-US IPA e no en-US zh-CN e com o SAPI.

Para localidades que suportam nome de fonema, o nome do fonema é fornecido junto com a pontuação. Os nomes dos fonemas ajudam a identificar quais fonemas foram pronunciados com precisão ou imprecisão. Para outras localidades, você só pode obter a pontuação do fonema.

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

Palavra 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 ə s ɪ n θ ə s ɪ s

Para solicitar fonemas IPA, defina o alfabeto 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 fonemas falados

Com fonemas falados, você pode obter pontuações de confiança que indicam a probabilidade de os fonemas falados corresponderem aos fonemas esperados.

A avaliação da pronúncia suporta fonemas falados com en-US IPA e com SAPI.

Por exemplo, para obter o som falado completo para a 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 IPA esperados são h ɛ l oʊ. No entanto, os fonemas h ə l oʊfalados são . Você tem cinco candidatos possíveis para cada fonema esperado neste exemplo. O resultado da avaliação mostra que o fonema falado mais provável foi ə em vez do fonema ɛesperado. O fonema ɛ esperado recebeu apenas um índice 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 NBestPhonemeCount parâmetro 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

Cálculo da pontuação de pronúncia

As pontuações de pronúncia são calculadas ponderando as pontuações de precisão, prosódia, fluência e completude com base em fórmulas específicas para cenários de leitura e fala.

Ao classificar os escores de precisão, prosódia, fluência e completude de baixo para alto (se cada pontuação estiver disponível) e representando a pontuação mais baixa para a pontuação mais alta como s0 a s3, a pontuação de pronúncia é calculada da seguinte forma:

Para o cenário de leitura:

  • Com pontuação de prosódia: PronScore = 0,4 * s0 + 0,2 * s1 + 0,2 * s2 + 0,2 * s3
  • Sem pontuação de prosódia: PronScore = 0,6 * s0 + 0,2 * s1 + 0,2 * s2

Para o cenário de expressão oral (a pontuação de completude não é aplicável):

  • Com pontuação de prosódia: PronScore = 0,6 * s0 + 0,2 * s1 + 0,2 * s2
  • Sem pontuação de prosódia: PronScore = 0,6 * s0 + 0,4 * s1

Esta fórmula fornece um cálculo ponderado com base na importância de cada pontuação, garantindo uma avaliação abrangente da pronúncia.