Udostępnij za pośrednictwem


Korzystanie z oceny wymowy

Z tego artykułu dowiesz się, jak ocenić wymowę za pomocą mowy na tekst za pomocą zestawu SPEECH SDK. Funkcja oceny wymowy ocenia wymowę i przekazuje mówiącym osobom opinie na temat dokładności i płynności mowy.

Uwaga

Ocena wymowy używa określonej wersji modelu zamiany mowy na tekst, innej niż standardowy model mowy na tekst, w celu zapewnienia spójnej i dokładnej oceny wymowy.

Używanie oceny wymowy w trybie przesyłania strumieniowego

Ocena wymowy wspiera nieprzerwany tryb przesyłania strumieniowego. Czas nagrywania może być nieograniczony za pośrednictwem zestawu SPEECH SDK. Tak długo, jak nie zatrzymasz rejestrowania, proces oceny nie zostanie zakończony i można wstrzymywać i wznawiać ocenę wygodnie.

Aby uzyskać informacje na temat dostępności oceny wymowy, zobacz obsługiwane języki i dostępne regiony.

W ramach planu bazowego użycie oceny wymowy kosztuje tyle samo, co konwersja mowy na tekst w modelu opłaty za rzeczywiste zużycie lub w ramach zobowiązania cenowego pricing. Jeśli zakupisz poziom zobowiązania dla przekształcania mowy na tekst, wydatki na ocenę wymowy przeznaczone są na spełnienie zobowiązania. Aby uzyskać więcej informacji, zobacz Cennik.

Aby dowiedzieć się, jak używać oceny wymowy w trybie przesyłania strumieniowego we własnej aplikacji, zobacz przykładowy kod.

Aby dowiedzieć się, jak używać oceny wymowy w trybie przesyłania strumieniowego we własnej aplikacji, zobacz przykładowy kod.

Aby dowiedzieć się, jak używać oceny wymowy w trybie przesyłania strumieniowego we własnej aplikacji, zobacz przykładowy kod.

Aby dowiedzieć się, jak używać oceny wymowy w trybie przesyłania strumieniowego we własnej aplikacji, zobacz przykładowy kod.

Aby dowiedzieć się, jak używać oceny wymowy w trybie przesyłania strumieniowego we własnej aplikacji, zobacz przykładowy kod.

Aby dowiedzieć się, jak używać oceny wymowy w trybie przesyłania strumieniowego we własnej aplikacji, zobacz przykładowy kod.

Aby dowiedzieć się, jak używać oceny wymowy w trybie przesyłania strumieniowego we własnej aplikacji, zobacz przykładowy kod.

Ciągłe rozpoznawanie

Jeśli plik audio przekracza 30 sekund, użyj trybu ciągłego do przetwarzania. Przykładowy kod trybu ciągłego można znaleźć w usłudze GitHub w obszarze funkcji PronunciationAssessmentContinuousWithFile.

Jeśli plik audio przekracza 30 sekund, użyj trybu ciągłego do przetwarzania.

Jeśli plik audio przekracza 30 sekund, użyj trybu ciągłego do przetwarzania. Przykładowy kod trybu ciągłego można znaleźć w usłudze GitHub w obszarze funkcji pronunciationAssessmentContinuousWithFile.

Jeśli plik audio przekracza 30 sekund, użyj trybu ciągłego do przetwarzania. Przykładowy kod trybu ciągłego można znaleźć w usłudze GitHub w obszarze funkcji pronunciation_assessment_continuous_from_file.

Jeśli plik audio przekracza 30 sekund, użyj trybu ciągłego do przetwarzania. Przykładowy kod trybu ciągłego można znaleźć w witrynie GitHub.

Jeśli plik audio przekracza 30 sekund, użyj trybu ciągłego do przetwarzania. Przykładowy kod trybu ciągłego można znaleźć w usłudze GitHub w obszarze funkcji pronunciationAssessFromFile.

Jeśli plik audio przekracza 30 sekund, użyj trybu ciągłego do przetwarzania. Przykładowy kod trybu ciągłego można znaleźć w usłudze GitHub w obszarze funkcji continuousPronunciationAssessment.

Ustawianie parametrów konfiguracji

Uwaga

Ocena wymowy nie jest dostępna w zestawie SPEECH SDK dla języka Go. Zapoznaj się z pojęciami w tym przewodniku. Wybierz inny język programowania dla swojego rozwiązania.

W pliku SpeechRecognizermożna określić język, aby nauczyć się lub ćwiczyć poprawianie wymowy. Domyślne ustawienia regionalne to en-US. Aby dowiedzieć się, jak określić język uczenia na potrzeby oceny wymowy we własnej aplikacji, możesz użyć następującego przykładowego kodu.

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)

Napiwek

Jeśli nie masz pewności, które ustawienia regionalne mają być ustawione dla języka z wieloma ustawieniami regionalnymi, wypróbuj poszczególne ustawienia regionalne oddzielnie. Na przykład w przypadku języka hiszpańskiego spróbuj użyć polecenia es-ES i es-MX. Określ, które ustawienia regionalne wypadają lepiej w Twoim scenariuszu.

Należy utworzyć PronunciationAssessmentConfig obiekt. Możesz ustawić opcję EnableProsodyAssessment włączenia oceny prosody. Aby uzyskać więcej informacji, zobacz metody konfiguracji.

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

W tej tabeli wymieniono niektóre kluczowe parametry konfiguracji oceny wymowy.

Parametr Opis
ReferenceText Tekst, względem którego jest obliczana wymowa.

Parametr ReferenceText jest opcjonalny. Ustaw tekst referencyjny, jeśli chcesz uruchomić ocenę za pomocą skryptu dla scenariusza uczenia się języka do czytania. Nie ustawiaj tekstu odwołania, jeśli chcesz uruchomić nieskryptowaną ocenę.

Aby poznać różnice cenowe między oceną scenariuszową a oceny bez scenariusza, prosimy o zapoznanie się z Cennikiem.
GradingSystem System punktów do kalibracji wyników. FivePoint przyznaje zmiennoprzecinkową ocenę w skali 0-5. HundredMark daje wynik w postaci liczby zmiennoprzecinkowej z zakresu 0-100. Wartość domyślna: FivePoint.
Granularity Określa najniższy poziom szczegółowości oceny. Zwraca wyniki dla poziomów większych lub równych minimalnej wartości. Akceptowane wartości to Phoneme, które pokazują wynik na poziomie pełnotekstowym, wyrazu, sylaby i fonemu, Word, który pokazuje wynik na poziomie pełnego tekstu i wyrazu, lub FullText, który pokazuje wynik tylko na poziomie pełnotekstowym. Podany pełny tekst referencyjny może być wyrazem, zdaniem lub akapitem. Zależy to od tekstu referencyjnego wejściowego. Wartość domyślna: Phoneme.
EnableMiscue Umożliwia obliczanie błędów, gdy wyrazy wymawiane są porównywane z tekstem wzorcowym. Włączenie błędu jest opcjonalne. Jeśli ta wartość to True, ErrorType wartość wyniku można ustawić na Omission lub Insertion na podstawie porównania. Wartości to False i True. Wartość domyślna: False. Aby włączyć obliczanie niezgodności, ustaw EnableMiscue na True. Możesz odwołać się do fragmentu kodu powyżej tabeli.
ScenarioId GUID dla dostosowanego systemu punktów.

Metody konfiguracji

W tej tabeli wymieniono niektóre metody opcjonalne, które można ustawić dla PronunciationAssessmentConfig obiektu.

Uwaga

Ocena prosody jest dostępna tylko w ustawieniach regionalnychen-US .

Aby zbadać ocenę prozodii, zaktualizuj zestaw SDK do wersji 1.35.0 lub nowszej.

Metoda Opis
EnableProsodyAssessment Umożliwia ocenę prosody na potrzeby oceny wymowy. Ta funkcja ocenia aspekty, takie jak stres, intonacja, szybkość mówienia i rytm. Ta funkcja zapewnia wgląd w naturalność i wyrazistość mowy.

Włączenie oceny prosodyji jest opcjonalne. Jeśli ta metoda jest wywoływana, zwracana jest wartość wyniku ProsodyScore.

Uzyskiwanie wyników oceny wymowy

Po rozpoznaniu mowy możesz zażądać wyników oceny wymowy jako obiektów zestawu SDK lub ciągu 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);
}

Wyniki wyrazu, sylab i fonemów nie są dostępne przy użyciu obiektów Speech SDK dla C++. Wyniki wyrazów, sylaby i fonemu są dostępne tylko w łańcuchu 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);

Aby dowiedzieć się, jak określić język uczenia na potrzeby oceny wymowy we własnej aplikacji, zobacz przykładowy kod.

W przypadku tworzenia aplikacji dla systemu Android wyniki wyrazów, sylaby i fonemy są dostępne przy użyciu obiektów Speech SDK dla języka Java. Wyniki są również dostępne w formacie JSON. W przypadku tworzenia aplikacji w środowisku Java Runtime (JRE), wyniki dla wyrazów, sylab i fonemów są dostępne tylko w postaci ciągu 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);
},
{});

Aby dowiedzieć się, jak określić język uczenia na potrzeby oceny wymowy we własnej aplikacji, zobacz przykładowy kod.

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)

Aby dowiedzieć się, jak określić język uczenia na potrzeby oceny wymowy we własnej aplikacji, zobacz przykładowy kod.

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

Aby dowiedzieć się, jak określić język uczenia na potrzeby oceny wymowy we własnej aplikacji, zobacz przykładowy kod.

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)

Parametry wyniku

W zależności od tego, czy używasz oceny skryptowej , czy nieskrypcyjnej , możesz uzyskać różne wyniki oceny wymowy. Ocena skryptowa jest przeznaczony dla scenariusza uczenia się języka do czytania. Ocena nieskryptowana dotyczy scenariusza uczenia się języka mówionego.

Uwaga

Aby uzyskać informacje o różnicach cen między oceną skryptów i nieskryptowaną, zobacz Cennik.

Wyniki oceny skryptowej

W tej tabeli wymieniono niektóre kluczowe wyniki oceny wymowy dla scenariusza oceny skryptowej lub scenariusza czytania.

Parametr Opis Poziom szczegółowości
AccuracyScore Dokładność wymowy mowy. Dokładność wskazuje, jak blisko fonezy pasują do wymowy osoby mówiącej natywnej. Wyniki dokładności wyrazów, wyrazów i pełnego tekstu są agregowane na podstawie wyniku dokładności na poziomie phoneme i uściślić z celami oceny. poziom fonemów
Poziom sylalny (tylko stany USA),
Poziom programu Word,
Poziom pełnotekstowy
FluencyScore Płynność danej mowy. Płynność wskazuje, jak ściśle mowa pasuje do użycia przez osoby mówiące w trybie dyskretnym przerw między wyrazami. Poziom pełnotekstowy
CompletenessScore Kompletność mowy obliczana przez stosunek wymawianych wyrazów do wejściowego tekstu referencyjnego. Poziom pełnotekstowy
ProsodyScore Prosody danej mowy. Prosody wskazuje, jak naturalna jest dana mowa, w tym stres, intonacja, szybkość mówienia i rytm. Poziom pełnotekstowy
PronScore Ogólny wynik jakości wymowy danej mowy. PronScore jest obliczany z AccuracyScore, FluencyScore, CompletenessScore, i ProsodyScore przy użyciu wagi, pod warunkiem że ProsodyScore i CompletenessScore są dostępne. Jeśli którykolwiek z nich nie jest dostępny, PronScore nie weźmie pod uwagę tego wyniku. Poziom pełnotekstowy
ErrorType Ta wartość wskazuje typ błędu w porównaniu z tekstem odwołania. Opcje obejmują, czy wyraz zostanie pominięty, wstawiony lub nieprawidłowo wstawiony z podziałem. Wskazuje również brak odstępu w interpunkcji. Wskazuje również, czy słowo jest źle wymawiane, czy monotonicznie rosnące, spadające lub płaskie w wypowiedzi. Możliwe wartości to None dla braku błędu w tym słowie, Omission, Insertion, Mispronunciation, UnexpectedBreak, MissingBreak i Monotone. Typ błędu może być Mispronunciation wtedy, gdy wymowa AccuracyScore słowa jest niższa niż 60. Poziom programu Word

Nieskrypowane wyniki oceny

W tej tabeli wymieniono niektóre kluczowe wyniki oceny wymowy dla nieskryptowanej oceny lub scenariusza mówienia.

Uwaga

Ocena prosody jest dostępna tylko w ustawieniach regionalnychen-US .

Parametr odpowiedzi Opis Poziom szczegółowości
AccuracyScore Dokładność wymowy mowy. Dokładność wskazuje, jak blisko fonemy pasują do wymowy rodzimego użytkownika języka. Wyniki dokładności sylabowej, wyrazowej i pełnego tekstu są agregowane na podstawie wyniku dokładności na poziomie fonemu i dopracowywane z celami oceny. Poziom Phoneme,
Poziom sylabowy (tylko en-US)
Poziom słowa
Poziom pełnotekstowy
FluencyScore Płynność danej mowy. Płynność wskazuje, jak ściśle mowa pasuje do użycia przez rodzimych użytkowników języka pauz między wyrazami. Poziom pełnotekstowy
ProsodyScore Intonacja danej mowy. Prosodia wskazuje, jak naturalna jest dana mowa, w tym akcent, intonacja, szybkość mówienia i rytm. Poziom pełnotekstowy
PronScore Ogólny wynik jakości wymowy danej mowy. PronScore jest obliczany z AccuracyScore, FluencyScore i ProsodyScore z wagą, pod warunkiem, że ProsodyScore jest dostępny. Jeśli ProsodyScore nie jest dostępny, PronScore nie weźmie pod uwagę tego wyniku. Poziom pełnotekstowy
ErrorType Słowo jest źle wymawiane, nieprawidłowo wstawione z przerwą lub brakuje przerwy w interpunkcji. Wskazuje również, czy wymowa jest monotonicznie rosnąca, spadająca lub płaska w wypowiedzi. Możliwe wartości to None dla oznaczenia braku błędu w tym słowie, Mispronunciation, UnexpectedBreak, MissingBreak i Monotone. Poziom słów

W poniższej tabeli opisano bardziej szczegółowe wyniki oceny prozodii.

Pole Opis
ProsodyScore Wynik prozodii całej wypowiedzi.
Feedback Opinie na temat poziomu słów, w tym Break i Intonation.
Break
ErrorTypes Typy błędów związane z podziałami, w tym UnexpectedBreak i MissingBreak. Bieżąca wersja nie udostępnia typu błędu przerwania. Należy ustawić progi w polach UnexpectedBreak – Confidence i MissingBreak – confidence zdecydować, czy istnieje nieoczekiwana przerwa, czy brak przerwania przed słowem.
UnexpectedBreak Wskazuje na nieoczekiwaną przerwę przed wyrazem.
MissingBreak Wskazuje brakujący podział przed wyrazem.
Thresholds Sugerowane progi dla obu współczynników ufności to 0,75. Oznacza to, że jeśli wartość UnexpectedBreak – Confidence jest większa niż 0,75, ma nieoczekiwaną przerwę. Jeśli wartość MissingBreak – confidence jest większa niż 0,75, brakuje mu przerwy. Chociaż wartość 0,75 jest zalecana, lepiej dostosować progi na podstawie własnego scenariusza. Jeśli chcesz mieć zmienną czułość wykrywania dla tych dwóch podziałów, możesz przypisać różne progi do pól UnexpectedBreak - Confidence i MissingBreak - Confidence.
Intonation Wskazuje intonację w mowie.
ErrorTypes Typy błędów związanych z intonacją, obecnie obsługiwane są tylko w trybie monotonicznym. Jeśli element Monotone istnieje w polu ErrorTypes, wypowiedź zostanie wykryta jako monotoniczna. Monotonność jest wykrywana w całej wypowiedzi, ale tag jest przypisywany do wszystkich słów. Wszystkie słowa w tej samej wypowiedzi dzielą te same informacje dotyczące wykrywania monotonii.
Monotone Wskazuje mowę monotoniczną.
Thresholds (Monotone Confidence) Pola Monotone - SyllablePitchDeltaConfidence są zarezerwowane do wykrywania monotonii dostosowanej przez użytkownika. Jeśli nie jesteś zadowolony z podanej decyzji monotonicznej, zmień progi dla tych pól, aby dostroić wykrywanie zgodnie z preferencjami.

Przykład wyników JSON

Wyniki oceny wymowy skryptu dla słowa mówionego "hello" są wyświetlane jako ciąg JSON w poniższym przykładzie.

  • Fonem alfabet to IPA.
  • Sylaby są zwracane obok fonezy dla tego samego słowa.
  • Możesz użyć wartości Offset i Duration, aby wyrównać sylaby z odpowiadającymi im fonemami. Na przykład offset początkowy (11700000) drugiej sylaby loʊ zgadza się z trzecim fonem, l. Przesunięcie reprezentuje czas, w którym rozpoznana mowa rozpoczyna się w strumieniu audio. Wartość jest mierzona w jednostkach 100-nanosekundowych. Aby dowiedzieć się więcej o Offset i Duration, zajrzyj do właściwości związanych z odpowiedzią.
  • Istnieje pięć NBestPhonemes odpowiadających liczbie fonemów mówionych żądanych.
  • W Phonemes najbardziej prawdopodobnym mówionym fonemem był ə zamiast oczekiwanego fonemu ɛ. Oczekiwany phoneme ɛ otrzymał tylko wynik ufności 47. Inne potencjalne dopasowania otrzymały wskaźniki pewności 52, 17 i 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
                        }
                    ]
                }
            ]
        }
    ]
}

Oceny wymowy można uzyskać dla:

Obsługiwane funkcje dla każdego lokalnego ustawienia

Poniższa tabela zawiera podsumowanie funkcji obsługiwanych przez ustawienia regionalne. Aby uzyskać więcej informacji, zobacz następujące sekcje. Jeśli wymagane ustawienia regionalne nie są wymienione w poniższej tabeli dla obsługiwanej funkcji, wypełnij ten formularz do wprowadzania, aby uzyskać dalszą pomoc.

Alfabet phoneme IPA SAPI
Nazwa fonemu en-US en-US, zh-CN
Grupa sylabowa en-US en-US
Fonem mówiony en-US en-US

Grupy sylalne

Ocena wymowy może zapewnić wyniki oceny na poziomie sylabowym. Słowo jest zwykle wymawiane sylaba po sylabie, a nie fonem po fonemie. Grupowanie w sylabach jest bardziej czytelne i dostosowane do nawyków mówienia.

Ocena wymowy obsługuje jedynie grupy sylab z IPA i SAPI.

W poniższej tabeli porównaliśmy przykładowe fonezy z odpowiednimi sylabami.

Przykładowy wyraz Fonemy Sylaby
technologiczny teknolodżikal tek·nə·lɑ·dʒɪkl
hello hɛloʊ hɛ·loʊ
szczęście lʌk lʌk
fotosynteza fotosynteza foʊ·t· sɪn·θ · sɪs

Aby zażądać wyników na poziomie sylalnej wraz z phonemes, ustaw parametr konfiguracji szczegółowości na Phonemewartość .

Format alfabetu Phoneme

Ocena wymowy obsługuje nazwę fonemu w en-US z IPA oraz w en-US i zh-CN z SAPI.

Dla lokalizacji, które obsługują nazwę fonemu, nazwa fonemu jest dostarczana wraz z oceną. Nazwy fonemu pomagają zidentyfikować, które fonezy zostały dokładnie lub niedokładnie wymawiane. W przypadku innych ustawień regionalnych dostępny jest tylko wynik fonemowy.

W poniższej tabeli porównaliśmy przykładowe fonemy SAPI z odpowiednimi phonemami IPA.

Przykładowy wyraz SAPI Phonemes Fonemy IPA
hello h eh l ow h ɛ l oʊ
szczęście l ah k l ʌ k
fotosynteza f ow t ax s ih n th ax s ih s f oʊ t ɪ s ɪ n θ ɪ s

Aby zażądać fonemów IPA, ustaw alfabet fonemów na IPA. Jeśli nie określisz alfabetu, fonemy domyślnie są w formacie 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"

Ocenianie rozmów telefonicznych

Dzięki mówionym fonemom można uzyskać wyniki ufności, które wskazują, jak prawdopodobne jest, że mówione fonemy pasują do oczekiwanych fonemów.

Ocena wymowy obsługuje telefony mówione w usłudze en-US IPA i SAPI.

Na przykład, aby uzyskać pełny dźwięk wymówiony dla słowa Hello, można połączyć pierwszy wymówiony fonem każdego oczekiwanego fonemu z najwyższym współczynnikiem ufności. W poniższym wyniku oceny, gdy mówisz słowo hello, oczekiwane fonezy IPA to h ɛ l oʊ. Jednak rzeczywiste fonezy mówione są h ə l oʊ. W tym przykładzie masz pięciu kandydatów do każdego oczekiwanego fonemu. Wynik oceny pokazuje, że najbardziej prawdopodobnym fonemem było ə, zamiast oczekiwanego fonemu ɛ. Oczekiwany fonem ɛ otrzymał tylko poziom pewności 47. Inne potencjalne dopasowania otrzymały wyniki ufności 52, 17 i 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
                        }
                    ]
                }
            ]
        }
    ]
}

Aby wskazać, czy i ile potencjalnych fonemów mówionych ma otrzymać oceny swojskości, ustaw parametr NBestPhonemeCount na wartość całkowitą, taką jak 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

Obliczanie wyniku wymowy

Wyniki wymowy są obliczane przez dokładność wagi, prosody, płynność i wyniki kompletności na podstawie określonych formuł dla scenariuszy czytania i mówienia.

Podczas sortowania wyników dokładności, prosody, biegłości i kompletności z niskiej do wysokiej (jeśli każdy wynik jest dostępny) i reprezentując najniższy wynik do najwyższego wyniku od s0 do s3, wynik wymowy jest obliczany w następujący sposób:

Dla scenariuszy odczytu:

  • Z wynikiem prosody: PronScore = 0,4 * s0 + 0,2 * s1 + 0,2 * s2 + 0,2 * s3
  • Bez wyniku prosody: PronScore = 0,6 * s0 + 0,2 * s1 + 0,2 * s2

W przypadku scenariusza dotyczącego mówienia (wynik kompletności nie ma zastosowania):

  • Z wynikiem prosody: PronScore = 0,6 * s0 + 0,2 * s1 + 0,2 * s2
  • Bez wyniku prosody: PronScore = 0,6 * s0 + 0,4 * s1

Ta formuła zapewnia obliczanie ważone na podstawie znaczenia każdego wyniku, zapewniając kompleksową ocenę wymowy.

Ocena zawartości

Ważne

Ocena zawartości (wersja zapoznawcza) za pośrednictwem zestawu SPEECH SDK zostanie wycofana w lipcu 2025 r. Zamiast tego możesz użyć usługi Azure OpenAI, aby uzyskać wyniki oceny zawartości zgodnie z opisem w tej sekcji.

W przypadku niektórych rozpoznanych mowy możesz również uzyskać wyniki oceny zawartości dla słownictwa, gramatyki i istotności tematu. Aby uzyskać wyniki oceny zawartości, możesz użyć modelu czatu, takiego jak Azure OpenAI gpt-4o . Aby uzyskać więcej informacji na temat korzystania z modeli czatów, zobacz dokumentację modeli usługi Azure OpenAI oraz dokumentację referencyjną Uzupełnień czatów API wnioskowania Azure AI.

Komunikaty użytkownika i systemu służą do ustawiania kontekstu modelu czatu. W poniższym przykładzie komunikat użytkownika zawiera esej do oceny, a komunikat systemowy zawiera instrukcje dotyczące oceny eseju.

{
  "messages": [
    {
      "role": "system",
      "content": "You are an English teacher and please help to grade a student's essay from vocabulary and grammar and topic relevance on how well the essay aligns with the title, and output format as: {\"vocabulary\": *.*(0-100), \"grammar\": *.*(0-100), \"topic\": *.*(0-100)}."
    },
    {
      "role": "user",
      "content": "Example1: this essay: \"sampleSentence1\" has vocabulary and grammar scores of ** and **, respectively. Example2: this essay: \"sampleSentence2\" has vocabulary and grammar scores of ** and **, respectively. Example3: this essay: \"sampleSentence3\" has vocabulary and grammar scores of ** and **, respectively. The essay for you to score is \"sendText\", and the title is \"topic\". The transcript is from speech recognition so that please first add punctuations when needed, remove duplicates and unnecessary un uh from oral speech, then find all the misuse of words and grammar errors in this essay, find advanced words and grammar usages, and finally give scores based on this information. Please only respond as this format {\"vocabulary\": *.*(0-100), \"grammar\": *.*(0-100)}, \"topic\": *.*(0-100)}. [THE TRANSCRIPT FROM SPEECH RECOGNITION IS REDACTED FOR BREVITY]"
    }
  ]
}