Использование оценки произношения

Из этой статьи вы узнаете, как оценить произношение речи пользователя с помощью преобразования речи в текст в Speech SDK. Оценка произношения напоминает говорящим о точности и беглости звучания речи.

Примечание

Оценка произношения использует специальную версию модели преобразования речи в текст, отличающуюся от стандартной модели, чтобы гарантировать согласованную и точную оценку произношения.

Доступность и цены

Сведения о доступности оценки произношения см. в поддерживаемых языках и доступных регионах.

В качестве основы, использование оценки произношения стоит так же, как распознавание речи для уровня "Стандартный" или уровня обязательств ценообразования. Если вы приобретаете уровень обязательств для преобразования речи в текст, расходы на оценку произношения засчитываются в выполнение обязательства. Дополнительные сведения см. в разделе "Цены".

Потоковая передача и непрерывный режим

Оценка произношения поддерживает непрерывный режим потоковой передачи. Время записи может быть неограниченно через SDK распознавания речи. Пока вы не останавливаете запись, процесс оценки не завершается, и вы можете приостановить и возобновить оценку удобно.

Сведения об использовании оценки произношения в режиме потоковой передачи в собственном приложении см. в сample code.

Сведения об использовании оценки произношения в режиме потоковой передачи в собственном приложении см. в сample code.

Сведения об использовании оценки произношения в режиме потоковой передачи в собственном приложении см. в сample code.

Сведения об использовании оценки произношения в режиме потоковой передачи в собственном приложении см. в разделе sample code или попробуйте использовать Azure Speech in Foundry Tools Toolkit.

Сведения об использовании оценки произношения в режиме потоковой передачи в собственном приложении см. в сample code.

Сведения об использовании оценки произношения в режиме потоковой передачи в собственном приложении см. в сample code.

Сведения об использовании оценки произношения в режиме потоковой передачи в собственном приложении см. в сample code.

Если звуковой файл превышает 30 секунд, используйте непрерывный режим обработки. В непрерывном режиме EnableMiscue параметр не поддерживается. Чтобы получить Omission и Insertion теги, необходимо сравнить распознанные результаты с текстом ссылки. Пример реализации для непрерывного режима можно найти в GitHub в разделе функции PronunciationAssessmentContinuousWithFile.

Если звуковой файл превышает 30 секунд, используйте непрерывный режим обработки. В непрерывном режиме EnableMiscue параметр не поддерживается. Чтобы получить Omission и Insertion теги, необходимо сравнить распознанные результаты с текстом ссылки.

Если звуковой файл превышает 30 секунд, используйте непрерывный режим обработки. В непрерывном режиме EnableMiscue параметр не поддерживается. Чтобы получить Omission и Insertion теги, необходимо сравнить распознанные результаты с текстом ссылки. Пример реализации для непрерывного режима можно найти в GitHub в разделе функции pronunciationAssessmentContinuousWithFile.

Если звуковой файл превышает 30 секунд, используйте непрерывный режим обработки. В непрерывном режиме EnableMiscue параметр не поддерживается. Чтобы получить Omission и Insertion теги, необходимо сравнить распознанные результаты с текстом ссылки. Пример реализации для непрерывного режима можно найти на GitHub в функции pronunciation_assessment_continuous_from_file, или попробуйте Azure Speech Toolkit.

Если звуковой файл превышает 30 секунд, используйте непрерывный режим обработки. В непрерывном режиме EnableMiscue параметр не поддерживается. Чтобы получить Omission и Insertion теги, необходимо сравнить распознанные результаты с текстом ссылки. Пример реализации для непрерывного режима можно найти в GitHub.

Если звуковой файл превышает 30 секунд, используйте непрерывный режим обработки. В непрерывном режиме EnableMiscue параметр не поддерживается. Чтобы получить Omission и Insertion теги, необходимо сравнить распознанные результаты с текстом ссылки. Пример реализации для непрерывного режима можно найти в GitHub в разделе функции pronunciationAssessFromFile.

Если звуковой файл превышает 30 секунд, используйте непрерывный режим обработки. В непрерывном режиме EnableMiscue параметр не поддерживается. Чтобы получить Omission и Insertion теги, необходимо сравнить распознанные результаты с текстом ссылки. Пример реализации для непрерывного режима можно найти в GitHub в разделе функции continuousPronunciationAssessment.

Если звуковой файл превышает 30 секунд, используйте непрерывный режим обработки. Обратите внимание, что оценка произношения не поддерживается в Speech SDK для Go. Чтобы включить эту функцию, выберите другой язык программирования для решения.

Настройка параметров конфигурации

Примечание

Оценка произношения недоступна в Speech SDK для Go. Вы можете ознакомиться с основными понятиями в этом руководстве. Выберите другой язык программирования для решения.

В этом SpeechRecognizerразделе можно указать язык для изучения или практики улучшения произношения. Языковой стандарт по умолчанию en-US. Чтобы узнать, как указать язык обучения для оценки произношения в собственном приложении, можно использовать следующий пример кода.

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

Совет

Если вы не уверены, какой языковой стандарт следует задать для языка с несколькими языковыми стандартами, попробуйте использовать каждый языковой стандарт отдельно. Например, для испанского языка попробуйте es-ES и es-MX. Определите, какие оценки для локали выше для вашего сценария.

Необходимо создать PronunciationAssessmentConfig объект. Можно задать EnableProsodyAssessment для включения оценки просодии. Дополнительные сведения см. в разделе "Методы конфигурации".

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

В этой таблице перечислены некоторые ключевые параметры конфигурации для оценки произношения.

Параметр Описание
ReferenceText Текст, по которому оценивается произношение.

Параметр ReferenceText является необязательным. Задайте справочный текст, если требуется выполнить скриптовую оценку для сценария изучения языка чтения. Не устанавливайте текст ссылки, если вы хотите выполнить нескрипированную оценку.

Различия в ценах между скриптовыми и не скриптовыми оценками см. в разделе Цены.
GradingSystem Система точек для калибровки показателей. FivePoint дает оценку с плавающей запятой от 0 до 5. HundredMark дает оценку с плавающей запятой от 0 до 100. По умолчанию: FivePoint.
Granularity Определяет самый низкий уровень детализации оценки. Возвращает оценки для уровней, превышающих или равных минимальному значению. Допустимые значения: Phoneme, в котором отображается оценка по полному тексту, уровню слов, слогов и фонем, Word, которая показывает оценку на полном текстовом уровне и уровне слов, или FullText, которая показывает оценку только на полном текстовом уровне. Предоставленный полный текст ссылки может быть словом, предложением или абзацем. Он зависит от текста вводимых ссылок. По умолчанию: Phoneme.
EnableMiscue Позволяет вычислить ошибки произношения при сравнении произнесённых слов с эталонным текстом. Включение неправильного действия является необязательным. Если это значение True, значение ErrorType может быть установлено на Omission или Insertion на основе сравнения. Значения: False и True. По умолчанию: False. Чтобы включить расчет ошибок, установите EnableMiscue в True. Вы можете ссылаться на фрагмент кода над таблицей.
ScenarioId GUID для настраиваемой системы точек.

Методы конфигурации

В этой таблице перечислены некоторые необязательные методы, которые можно задать для PronunciationAssessmentConfig объекта.

Примечание

Оценка просодии доступна только в локали en-US.

Чтобы изучить оценку просодии, обновите пакет SDK до версии не ниже 1.35.0.

Метод Описание
EnableProsodyAssessment Обеспечивает оценку просодии для анализа вашего произношения. Эта функция оценивает такие аспекты, как стресс, интонация, скорость речи и ритм. Эта функция предоставляет аналитические сведения о естественности и экспрессивности вашей речи.

Включение оценки просодии не является обязательной. Если этот метод вызывается, возвращается значение ProsodyScore результата.

Получение результатов оценки произношения

При распознавании речи можно запросить результаты оценки произношения в виде объектов ПАКЕТА SDK или строки JSON.

using (var speechRecognizer = new SpeechRecognizer(
    speechConfig,
    audioConfig))
{
    // (Optional) get the session ID
    speechRecognizer.SessionStarted += (s, e) => {
        Console.WriteLine($"SESSION ID: {e.SessionId}");
    };
    pronunciationAssessmentConfig.ApplyTo(speechRecognizer);
    var speechRecognitionResult = await speechRecognizer.RecognizeOnceAsync();

    // The pronunciation assessment result as a Speech SDK object
    var pronunciationAssessmentResult =
        PronunciationAssessmentResult.FromResult(speechRecognitionResult);

    // The pronunciation assessment result as a JSON string
    var pronunciationAssessmentResultJson = speechRecognitionResult.Properties.GetProperty(PropertyId.SpeechServiceResponse_JsonResult);
}

Результаты для слов, слогов и фонем недоступны при использовании объектов SDK с пакетом для C++. Результаты слова, слога и фонемы доступны только в строке 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);

Сведения о том, как указать язык обучения для оценки произношения в собственном приложении, см. в разделе sample code.

Для разработки приложений Android результаты слов, слогов и фонем доступны, используя объекты Speech SDK для Java. Результаты также доступны в строке JSON. Для разработки приложений среды выполнения Java (JRE), слово, слог и результаты phoneme доступны только в строке 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);
},
{});

Сведения о том, как указать язык обучения для оценки произношения в собственном приложении, см. в разделе sample code.

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)

Сведения о том, как указать язык обучения для оценки произношения в собственном приложении, см. в разделе sample code.

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

Сведения о том, как указать язык обучения для оценки произношения в собственном приложении, см. в разделе sample code.

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)

Параметры результата

В зависимости от того, используете ли вы скрипт или неписаную оценку, вы можете получить различные результаты оценки произношения. Оценка с использованием сценариев предназначена для сценария обучения языку через чтение. Незапланированная оценка предназначена для сценария обучения языку, ориентированного на разговорные навыки.

Примечание

Различия в ценах между скриптовыми и не скриптовыми оценками см. в разделе Цены.

Результаты оценки с помощью скриптов

В этой таблице перечислены некоторые ключевые результаты оценки произношения в сценарном задании, или сценарии чтения.

Параметр Описание Гранулярность
AccuracyScore Точность произношения речи. Точность показывает, насколько близко фонемы соответствуют произношению носителя языка. Слоговые, словарные и полнотекстовые оценки точности агрегируются из оценок точности на уровне фонем и уточняются в соответствии с целями оценки. Уровень фонем.
Уровень слога (толькоen-US),
уровень Microsoft Word
Уровень полнотекстового текста
FluencyScore Беглость заданной речи. Fluency указывает, насколько тесно речь соответствует использованию носителями языка пауз между словами. Уровень полнотекстового текста
CompletenessScore Полнота речи, вычисляемая по соотношению произнесемых слов к входной ссылке. Уровень полнотекстового текста
ProsodyScore Просодия данной речи. Просодия определяет, насколько естественной является данная речь, включая ударение, интонацию, скорость речи и ритм. Уровень полнотекстового текста
PronScore Общая оценка качества произношения данной речи. PronScore вычисляется из AccuracyScore, FluencyScore, CompletenessScore и ProsodyScore с учетом веса, при условии, что ProsodyScore и CompletenessScore доступны. Если один из них недоступен, PronScore не будет рассматривать этот показатель. Уровень полнотекстового текста
ErrorType Это значение указывает тип ошибки по сравнению с ссылочным текстом. Варианты включают, если слово опущено, вставлено или неправильно вставлено с разрывом. Он также указывает на отсутствие перерыва при препинаниях. Он также указывает, произносится ли слово плохо, или монотонно растет, падает или ровная во высказывании. Возможные значения: None, Omission, Insertion, Mispronunciation, UnexpectedBreak, MissingBreak, и Monotone. Тип ошибки может быть Mispronunciation , если произношение AccuracyScore слова ниже 60. уровень слова

Незаписанные результаты оценки

В этой таблице перечислены некоторые ключевые результаты оценки произношения для неписаной оценки или сценария речи.

Примечание

Оценка просодии доступна только в локали en-US. Для несценарной оценки используется модель преобразования речи в текст (STT), которая отличается от модели Azure STT. Если требуется оценка на основе высокоточного распознаваемого текста, рекомендуется сначала вызвать Azure STT, чтобы получить эталонный текст, а затем выполнить скриптовую оценку.

Параметр ответа Описание Гранулярность
AccuracyScore Точность произношения речи. Точность показывает, насколько близко фонемы соответствуют произношению носителя языка. Слоги, слова и оценки точности полного текста агрегируются из оценки точности на уровне фонем и уточняются в соответствии с целями оценки. Уровень фонем.
Уровень слога (толькоen-US),
уровень Microsoft Word
Уровень полнотекстового текста
FluencyScore Беглость заданной речи. Fluency указывает, насколько тесно речь соответствует использованию носителями языка пауз между словами. Уровень полнотекстового текста
ProsodyScore Просодия данной речи. Просодия определяет, насколько естественной является данная речь, включая ударение, интонацию, скорость речи и ритм. Уровень полнотекстового текста
PronScore Общая оценка качества произношения данной речи. PronScore вычисляется на основе AccuracyScore, FluencyScore, и ProsodyScore с учетом веса, при условии, что ProsodyScore доступен. Если ProsodyScore недоступен, PronScore не будет рассматривать этот показатель. Уровень полнотекстового текста
ErrorType Слово плохо произносится, неправильно вставлено с перерывом или отсутствует разрыв при препинаниях. Он также указывает, является ли произношение монотонно возрастающим, падающим или ровным в произношении. Возможные значения: None для обозначения отсутствия ошибки в этом слове, Mispronunciation, UnexpectedBreak, MissingBreak, и Monotone. уровень слова

В следующей таблице более подробно описаны результаты оценки просодии.

Поле Описание
ProsodyScore Просодический балл всего высказывания.
Feedback Отзывы на уровне слов, включая Break и Intonation.
Break
ErrorTypes Типы ошибок, связанные с разрывами, включая UnexpectedBreak и MissingBreak. Текущая версия не предоставляет тип ошибки останова. Необходимо задать пороговые значения в полях UnexpectedBreak – Confidence и MissingBreak – confidence, чтобы решить, есть ли непредвиденный разрыв или отсутствие разрыва перед словом.
UnexpectedBreak Указывает непредвиденный разрыв перед словом.
MissingBreak Указывает отсутствующий разрыв перед словом.
Thresholds Предлагаемые пороговые значения для обоих показателей достоверности — 0,75. Это означает, что если значение UnexpectedBreak – Confidence больше 0,75, он имеет непредвиденный разрыв. Если значение MissingBreak – confidence больше 0,75, у него отсутствует разрыв. Хотя 0.75 — это значение, которое мы рекомендуем, лучше настроить пороговые значения на основе собственного сценария. Если вы хотите иметь переменную чувствительность обнаружения для этих двух разрывов, можно назначить разные пороговые значения для полей UnexpectedBreak - Confidence и MissingBreak - Confidence.
Intonation Указывает интонацию в речи.
ErrorTypes Типы ошибок, связанные с интонацией, в настоящее время поддерживаются только для Monotone. Если Monotone существует в поле ErrorTypes, высказывание считается монотонным. Монотонность обнаруживается во всем высказывании, но тег присваивается каждому слову. Все слова в одном высказывании имеют одинаковую информацию о монотонном распознавании.
Monotone Указывает монотонную речь.
Thresholds (Monotone Confidence) Поля Monotone - SyllablePitchDeltaConfidence зарезервированы для пользовательской настройки обнаружения монотонности. Если вы не удовлетворены предоставленным монотонным решением, настройте пороговые значения для этих полей, чтобы настроить обнаружение в соответствии с вашими предпочтениями.

Пример результата JSON

Результаты оценки произношения по заданному сценарию для произнесённого слова «здравствуйте» показаны в виде строки JSON в следующем примере.

  • Алфавит фонемы — IPA.
  • Слоги возвращаются вместе с фонемами для того же слова.
  • Вы можете использовать значения Offset и Duration для выравнивания слогов с соответствующими фонемами. Например, начальное смещение (117000000) второго слога loʊ соответствует третьему фонему. l Смещение указывает на время, когда в звуковом потоке начинается распознанная речь. Значение измеряется в 100 единицах наносекунда. Чтобы узнать больше о Offset и Duration, см. свойства ответа.
  • Существует пять элементов, которые соответствуют количеству NBestPhonemesзапрашиваемых фонем.
  • В пределах Phonemes наиболее вероятно, что произнесенные фонемы были ə вместо ожидаемой фонемы ɛ. Ожидаемая фонема ɛ получила только оценку достоверности 47%. Другие потенциальные матчи получили оценки достоверности 52, 17 и 2.
{
    "Id": "bbb42ea51bdb46d19a1d685e635fe173",
    "RecognitionStatus": 0,
    "Offset": 7500000,
    "Duration": 13800000,
    "DisplayText": "Hello.",
    "NBest": [
        {
            "Confidence": 0.975003,
            "Lexical": "hello",
            "ITN": "hello",
            "MaskedITN": "hello",
            "Display": "Hello.",
            "PronunciationAssessment": {
                "AccuracyScore": 100,
                "FluencyScore": 100,
                "CompletenessScore": 100,
                "PronScore": 100
            },
            "Words": [
                {
                    "Word": "hello",
                    "Offset": 7500000,
                    "Duration": 13800000,
                    "PronunciationAssessment": {
                        "AccuracyScore": 99.0,
                        "ErrorType": "None"
                    },
                    "Syllables": [
                        {
                            "Syllable": "hɛ",
                            "PronunciationAssessment": {
                                "AccuracyScore": 91.0
                            },
                            "Offset": 7500000,
                            "Duration": 4100000
                        },
                        {
                            "Syllable": "loʊ",
                            "PronunciationAssessment": {
                                "AccuracyScore": 100.0
                            },
                            "Offset": 11700000,
                            "Duration": 9600000
                        }
                    ],
                    "Phonemes": [
                        {
                            "Phoneme": "h",
                            "PronunciationAssessment": {
                                "AccuracyScore": 98.0,
                                "NBestPhonemes": [
                                    {
                                        "Phoneme": "h",
                                        "Score": 100.0
                                    },
                                    {
                                        "Phoneme": "oʊ",
                                        "Score": 52.0
                                    },
                                    {
                                        "Phoneme": "ə",
                                        "Score": 35.0
                                    },
                                    {
                                        "Phoneme": "k",
                                        "Score": 23.0
                                    },
                                    {
                                        "Phoneme": "æ",
                                        "Score": 20.0
                                    }
                                ]
                            },
                            "Offset": 7500000,
                            "Duration": 3500000
                        },
                        {
                            "Phoneme": "ɛ",
                            "PronunciationAssessment": {
                                "AccuracyScore": 47.0,
                                "NBestPhonemes": [
                                    {
                                        "Phoneme": "ə",
                                        "Score": 100.0
                                    },
                                    {
                                        "Phoneme": "l",
                                        "Score": 52.0
                                    },
                                    {
                                        "Phoneme": "ɛ",
                                        "Score": 47.0
                                    },
                                    {
                                        "Phoneme": "h",
                                        "Score": 17.0
                                    },
                                    {
                                        "Phoneme": "æ",
                                        "Score": 2.0
                                    }
                                ]
                            },
                            "Offset": 11100000,
                            "Duration": 500000
                        },
                        {
                            "Phoneme": "l",
                            "PronunciationAssessment": {
                                "AccuracyScore": 100.0,
                                "NBestPhonemes": [
                                    {
                                        "Phoneme": "l",
                                        "Score": 100.0
                                    },
                                    {
                                        "Phoneme": "oʊ",
                                        "Score": 46.0
                                    },
                                    {
                                        "Phoneme": "ə",
                                        "Score": 5.0
                                    },
                                    {
                                        "Phoneme": "ɛ",
                                        "Score": 3.0
                                    },
                                    {
                                        "Phoneme": "u",
                                        "Score": 1.0
                                    }
                                ]
                            },
                            "Offset": 11700000,
                            "Duration": 1100000
                        },
                        {
                            "Phoneme": "oʊ",
                            "PronunciationAssessment": {
                                "AccuracyScore": 100.0,
                                "NBestPhonemes": [
                                    {
                                        "Phoneme": "oʊ",
                                        "Score": 100.0
                                    },
                                    {
                                        "Phoneme": "d",
                                        "Score": 29.0
                                    },
                                    {
                                        "Phoneme": "t",
                                        "Score": 24.0
                                    },
                                    {
                                        "Phoneme": "n",
                                        "Score": 22.0
                                    },
                                    {
                                        "Phoneme": "l",
                                        "Score": 18.0
                                    }
                                ]
                            },
                            "Offset": 12900000,
                            "Duration": 8400000
                        }
                    ]
                }
            ]
        }
    ]
}

Оценки произношения можно получить для:

  • Полный текст
  • Слова
  • Группы слогов
  • Фонемы в формате SAPI или IPA

Поддерживаемые функции для каждой локали

В следующей таблице приведены сведения о функциях, которые поддерживают локали. Дополнительные сведения см. в следующих разделах.

Алфавит фонем IPA SAPI
Имя фонемы en-US en-US, zh-CN
Слоговая группа en-US en-US
Произнесенный фонем en-US en-US

Группы слогов

Оценка произношения может предоставлять результаты оценки на уровне слогов. Слово обычно произносится по слогам, а не по фонемам. Группировка по слогам более читаема и соответствует привычкам речи.

Оценка произношения поддерживает группы слогов только в en-US с IPA и SAPI.

В следующей таблице сравниваются примеры фонем с соответствующими слогами.

Пример слова Фонемы Слоги
Технологический технологический тек·но·ло·д͡жикал
Привет хэлоу hɛ·loʊ
Удачи lʌk lʌk
Фотосинтеза фотосинтез фото·син·тез

Чтобы запросить результаты на уровне слога вместе с фонемами, задайте параметр конфигурации детализации значением .

Формат алфавита фонем

Оценка произношения поддерживает названия фонем в en-US с использованием МФА и в en-US, zh-CN с SAPI.

Для языков, поддерживающих имя фонемы, имя фонемы предоставляется вместе с оценкой. Названия фонем помогают определить, какие фонемы были произнесены правильно или неправильно. Для других языковых стандартов можно получить только оценку фонем.

В следующей таблице сравниваются примеры фонем SAPI с соответствующими фонемами IPA.

Пример слова Фонемы SAPI Фонемы МФА
Привет h eh l ow х э л оʊ
Удачи l ah k l ʌ k
Фотосинтеза fow t ax s ih n th ax s ih s ih f oʊ t ə s ɪ n θ ə s ɪ s

Чтобы запросить фонемы IPA, задайте для алфавита фонем [PH] значение IPA. Если вы не указываете алфавит, то по умолчанию фонемы находятся в формате SAPI.

pronunciationAssessmentConfig.PhonemeAlphabet = "IPA";
auto pronunciationAssessmentConfig = PronunciationAssessmentConfig::CreateFromJson("{\"referenceText\":\"good morning\",\"gradingSystem\":\"HundredMark\",\"granularity\":\"Phoneme\",\"phonemeAlphabet\":\"IPA\"}");
PronunciationAssessmentConfig pronunciationAssessmentConfig = PronunciationAssessmentConfig.fromJson("{\"referenceText\":\"good morning\",\"gradingSystem\":\"HundredMark\",\"granularity\":\"Phoneme\",\"phonemeAlphabet\":\"IPA\"}");
pronunciation_assessment_config = speechsdk.PronunciationAssessmentConfig(json_string="{\"referenceText\":\"good morning\",\"gradingSystem\":\"HundredMark\",\"granularity\":\"Phoneme\",\"phonemeAlphabet\":\"IPA\"}")
var pronunciationAssessmentConfig = SpeechSDK.PronunciationAssessmentConfig.fromJSON("{\"referenceText\":\"good morning\",\"gradingSystem\":\"HundredMark\",\"granularity\":\"Phoneme\",\"phonemeAlphabet\":\"IPA\"}");
pronunciationAssessmentConfig.phonemeAlphabet = @"IPA";
pronunciationAssessmentConfig?.phonemeAlphabet = "IPA"

Оценка произнесённых фонем

С помощью разговорных фонем вы можете получить оценки уверенности, которые указывают, насколько вероятно, что произнесенные фонемы соответствовали ожидаемым фонемам.

Оценка произношения поддерживает произносимые фонемы в en-US с IPA и SAPI.

Например, чтобы получить полный произнесённый звук для слова Hello, можно сцепить первую произнесённую фонему для каждого ожидаемого фонема с наивысшей оценкой достоверности. В следующем результате оценки, когда вы говорите слово hello, ожидаемые фонемы по IPA — h ɛ l oʊ. Тем не менее, фактические разговорные фонемы: h ə l oʊ. В этом примере у вас есть пять возможных кандидатов для каждого ожидаемого фонема. Результат оценки показывает, что вместо ожидаемой фонемы ə чаще всего произносилась фонема ɛ. Ожидаемая фонема ɛ получила только оценку достоверности 47%. Другие потенциальные матчи получили оценки достоверности 52, 17 и 2.

{
    "Id": "bbb42ea51bdb46d19a1d685e635fe173",
    "RecognitionStatus": 0,
    "Offset": 7500000,
    "Duration": 13800000,
    "DisplayText": "Hello.",
    "NBest": [
        {
            "Confidence": 0.975003,
            "Lexical": "hello",
            "ITN": "hello",
            "MaskedITN": "hello",
            "Display": "Hello.",
            "PronunciationAssessment": {
                "AccuracyScore": 100,
                "FluencyScore": 100,
                "CompletenessScore": 100,
                "PronScore": 100
            },
            "Words": [
                {
                    "Word": "hello",
                    "Offset": 7500000,
                    "Duration": 13800000,
                    "PronunciationAssessment": {
                        "AccuracyScore": 99.0,
                        "ErrorType": "None"
                    },
                    "Syllables": [
                        {
                            "Syllable": "hɛ",
                            "PronunciationAssessment": {
                                "AccuracyScore": 91.0
                            },
                            "Offset": 7500000,
                            "Duration": 4100000
                        },
                        {
                            "Syllable": "loʊ",
                            "PronunciationAssessment": {
                                "AccuracyScore": 100.0
                            },
                            "Offset": 11700000,
                            "Duration": 9600000
                        }
                    ],
                    "Phonemes": [
                        {
                            "Phoneme": "h",
                            "PronunciationAssessment": {
                                "AccuracyScore": 98.0,
                                "NBestPhonemes": [
                                    {
                                        "Phoneme": "h",
                                        "Score": 100.0
                                    },
                                    {
                                        "Phoneme": "oʊ",
                                        "Score": 52.0
                                    },
                                    {
                                        "Phoneme": "ə",
                                        "Score": 35.0
                                    },
                                    {
                                        "Phoneme": "k",
                                        "Score": 23.0
                                    },
                                    {
                                        "Phoneme": "æ",
                                        "Score": 20.0
                                    }
                                ]
                            },
                            "Offset": 7500000,
                            "Duration": 3500000
                        },
                        {
                            "Phoneme": "ɛ",
                            "PronunciationAssessment": {
                                "AccuracyScore": 47.0,
                                "NBestPhonemes": [
                                    {
                                        "Phoneme": "ə",
                                        "Score": 100.0
                                    },
                                    {
                                        "Phoneme": "l",
                                        "Score": 52.0
                                    },
                                    {
                                        "Phoneme": "ɛ",
                                        "Score": 47.0
                                    },
                                    {
                                        "Phoneme": "h",
                                        "Score": 17.0
                                    },
                                    {
                                        "Phoneme": "æ",
                                        "Score": 2.0
                                    }
                                ]
                            },
                            "Offset": 11100000,
                            "Duration": 500000
                        },
                        {
                            "Phoneme": "l",
                            "PronunciationAssessment": {
                                "AccuracyScore": 100.0,
                                "NBestPhonemes": [
                                    {
                                        "Phoneme": "l",
                                        "Score": 100.0
                                    },
                                    {
                                        "Phoneme": "oʊ",
                                        "Score": 46.0
                                    },
                                    {
                                        "Phoneme": "ə",
                                        "Score": 5.0
                                    },
                                    {
                                        "Phoneme": "ɛ",
                                        "Score": 3.0
                                    },
                                    {
                                        "Phoneme": "u",
                                        "Score": 1.0
                                    }
                                ]
                            },
                            "Offset": 11700000,
                            "Duration": 1100000
                        },
                        {
                            "Phoneme": "oʊ",
                            "PronunciationAssessment": {
                                "AccuracyScore": 100.0,
                                "NBestPhonemes": [
                                    {
                                        "Phoneme": "oʊ",
                                        "Score": 100.0
                                    },
                                    {
                                        "Phoneme": "d",
                                        "Score": 29.0
                                    },
                                    {
                                        "Phoneme": "t",
                                        "Score": 24.0
                                    },
                                    {
                                        "Phoneme": "n",
                                        "Score": 22.0
                                    },
                                    {
                                        "Phoneme": "l",
                                        "Score": 18.0
                                    }
                                ]
                            },
                            "Offset": 12900000,
                            "Duration": 8400000
                        }
                    ]
                }
            ]
        }
    ]
}

Чтобы указать, следует ли, и сколько потенциальных устных фонем требуется для получения оценок достоверности, задайте параметру NBestPhonemeCount целочисленное значение, например 5.

pronunciationAssessmentConfig.NBestPhonemeCount = 5;
auto pronunciationAssessmentConfig = PronunciationAssessmentConfig::CreateFromJson("{\"referenceText\":\"good morning\",\"gradingSystem\":\"HundredMark\",\"granularity\":\"Phoneme\",\"phonemeAlphabet\":\"IPA\",\"nBestPhonemeCount\":5}");
PronunciationAssessmentConfig pronunciationAssessmentConfig = PronunciationAssessmentConfig.fromJson("{\"referenceText\":\"good morning\",\"gradingSystem\":\"HundredMark\",\"granularity\":\"Phoneme\",\"phonemeAlphabet\":\"IPA\",\"nBestPhonemeCount\":5}");
pronunciation_assessment_config = speechsdk.PronunciationAssessmentConfig(json_string="{\"referenceText\":\"good morning\",\"gradingSystem\":\"HundredMark\",\"granularity\":\"Phoneme\",\"phonemeAlphabet\":\"IPA\",\"nBestPhonemeCount\":5}")
var pronunciationAssessmentConfig = SpeechSDK.PronunciationAssessmentConfig.fromJSON("{\"referenceText\":\"good morning\",\"gradingSystem\":\"HundredMark\",\"granularity\":\"Phoneme\",\"phonemeAlphabet\":\"IPA\",\"nBestPhonemeCount\":5}");
pronunciationAssessmentConfig.nbestPhonemeCount = 5;
pronunciationAssessmentConfig?.nbestPhonemeCount = 5

Вычисление оценки произношения

Оценки произношения вычисляются с учетом точности, просодии, беглости и полноты на основе конкретных формул для сценариев чтения и устной речи.

При сортировке показателей точности, просодии, беглости и полноты от низкого до высокого (если каждая оценка доступна) и представления наименьшей оценки до самой высокой оценки как s0 до s3, оценка произношения вычисляется следующим образом:

Для чтения сценария:

  • С оценкой просодии: PronScore = 0,4 * s0 + 0,2 * s1 + 0,2 * s2 + 0,2 * s3
  • Без оценки просодии: PronScore = 0,6 * s0 + 0,2 * s1 + 0,2 * s2

Для сценария речи (оценка полноты не применима):

  • С оценкой просодии: PronScore = 0,6 * s0 + 0,2 * s1 + 0,2 * s2
  • Без оценки просодии: PronScore = 0,6 * s0 + 0,4 * s1

Эта формула предоставляет взвешемое вычисление на основе важности каждой оценки, обеспечивая комплексную оценку произношения.

Оценка содержимого

Важно

Оценка содержимого (предварительная версия) прекращена в SDK 'Речь' начиная с версии 1.46.0 и выше. В качестве альтернативы, вы можете использовать Azure OpenAI в Microsoft Foundry Models, чтобы получить оценку содержимого, как описано в этом разделе.

Для некоторых распознанных речи также может потребоваться получить результаты оценки содержимого для словаря, грамматики и релевантности темы. Для получения результатов оценки содержимого можно использовать модель чата, например Azure OpenAI gpt-4o. Дополнительные сведения об использовании моделей чата см. в документации по моделям Azure OpenAI и API вывода моделей Azure AI по справочной документации завершения чатов.

Сообщения пользователя и системы используются для задания контекста для модели чата. В следующем примере сообщение пользователя содержит эссе для оценки, а системное сообщение содержит инструкции по оценке эссе.

{
  "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]"
    }
  ]
}