Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом руководстве показан единый подход к конфигурации идентификации языка (LID) и диаризации говорящих для преобразования речи в текст в реальном времени, перевода речи, быстрой транскрипции и пакетной транскрипции. В ней основное внимание уделяется двум общим шаблонам сбоев:
- Использование определения языка по умолчанию без ограничения возможных локалей.
- Ожидаются метки говорящих без явного включения функции диаризации.
Свойства запроса и ответа отличаются по рабочей нагрузке. Используйте это руководство вместе со статьями для конкретной рабочей нагрузки, ссылки на которые приведены в разделе Связанные материалы.
| Рабочая нагрузка | Конфигурация идентификации языка | Метка докладчика в ответе |
|---|---|---|
| Преобразование речи в текст или перевод речи в режиме реального времени |
AutoDetectSourceLanguageConfig с возможными локалями или с фиксированной исходной локалью |
SpeakerId при использовании ConversationTranscriber |
| Быстрое транскрибирование |
locales, или многоязычная модель, если поддерживается |
speaker для каждой фразы при включении диаризации |
| Пакетное транскрибирование |
properties.languageIdentification.candidateLocales и корневой уровень locale в качестве запасного варианта |
speaker для каждой распознанной фразы при включении диаризации |
Необходимые условия
- Ресурс Microsoft Foundry для службы "Речь".
- Поддерживаемый регион "Речь".
- Для примеров SDK: одна из поддерживаемых конфигураций SDK:
- Speech SDK для преобразования речи в текст и перевода речи в реальном времени.
- SDK для быстрой транскрипции речи.
- Тестирование звука, представляющего условия рабочей среды, в том числе:
- Короткие речевые фрагменты.
- Фоновый шум.
- Ожидаемое количество докладчиков.
Проверьте поддерживаемые локали, прежде чем настраивать запросы
Используйте эти списки локалей перед тем, как задать candidateLocales, locales или фиксированную исходную локаль:
- Локали определения языка
- Языковые стандарты преобразования речи в текст
- Языковые параметры перевода речи
Многоязычная модель Fast Transcription поддерживает отдельный набор языковых стандартов. Проверьте таблицу языков, поддерживаемых функцией преобразования речи в текст, прежде чем пропустить locales. Если языковой стандарт звука не поддерживается этой моделью, укажите фиксированный поддерживаемый языковой стандарт.
Настройка определения языка для преобразования речи в текст в режиме реального времени или перевода речи (SDK)
Чтобы получить полное представление о возможностях SDK для AutoDetectSourceLanguageConfig преобразования речи в текст и перевода речи в реальном времени, включая все поддерживаемые языки, режимы при запуске и непрерывные режимы, а также сопоставление пользовательских моделей, см. раздел Реализация идентификации языка.
Ключевые моменты при сочетании LID с диаризацией или офлайн-транскрипцией:
- Укажите список возможных языков, если вы знаете, какие языки наиболее вероятны. Более компактный и точный набор кандидатов может улучшить распознавание, особенно для короткого или зашумлённого аудио.
- Не включайте более одной локали для одного базового языка (например, используйте
en-USилиen-GB, но не обе сразу). - Если
AutoDetectSourceLanguageResult.Languageвозвращает пустое или непредвиденное значение, не используйте автоопределение и задайте фиксированное значениеSpeechRecognitionLanguageвместо этого.
Для перевода речи считывает обнаруженный язык из PropertyId.SpeechServiceConnection_AutoDetectSourceLanguageResult результата распознавания, а не из SpeechRecognitionLanguage. Последний является обязательным заполнителем, но в настоящее время игнорируется службой при активном автоматическом обнаружении.
Следующий шаблон позволяет идентификации языка-кандидата для распознавания речи в режиме реального времени в тексте. Используйте тот же шаблон AutoDetectSourceLanguageConfig при переводе речи и считывайте обнаруженный язык из описанного выше свойства конкретного результата.
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;
var speechConfig = SpeechConfig.FromEndpoint(
new Uri("YourSpeechEndpoint"), "YourSpeechKey");
var autoDetectConfig = AutoDetectSourceLanguageConfig.FromLanguages(
new[] { "en-US", "es-ES", "fr-FR" });
using var audioConfig = AudioConfig.FromWavFileInput("sample.wav");
using var recognizer = new SpeechRecognizer(
speechConfig, autoDetectConfig, audioConfig);
var result = await recognizer.RecognizeOnceAsync();
var detectedLanguage = AutoDetectSourceLanguageResult
.FromResult(result).Language;
Console.WriteLine($"Detected language: {detectedLanguage}");
Справочник: AutoDetectSourceLanguageConfig, AutoDetectSourceLanguageResult
Настройка диаризации в режиме реального времени (SDK)
Диаризация динамиков в режиме реального времени не включена по умолчанию. Используйте ConversationTranscriber, включите свойство результата диаризации, если требуются промежуточные метки, и убедитесь, что SpeakerId присутствует в событиях Transcribing или Transcribed. Диаризация в режиме реального времени и автономная диаризация имеют разные свойства запроса и ответа.
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;
using Microsoft.CognitiveServices.Speech.Transcription;
string endpoint = Environment.GetEnvironmentVariable("ENDPOINT");
string key = Environment.GetEnvironmentVariable("SPEECH_KEY");
var speechConfig = SpeechConfig.FromEndpoint(new Uri(endpoint), key);
speechConfig.SpeechRecognitionLanguage = "en-US";
speechConfig.SetProperty(
PropertyId.SpeechServiceResponse_DiarizeIntermediateResults,
"true");
using var audioConfig = AudioConfig.FromWavFileInput("meeting.wav");
using var transcriber = new ConversationTranscriber(speechConfig, audioConfig);
transcriber.Transcribing += (s, e) =>
{
Console.WriteLine($"TRANSCRIBING: SpeakerId={e.Result.SpeakerId} Text={e.Result.Text}");
};
transcriber.Transcribed += (s, e) =>
{
Console.WriteLine($"TRANSCRIBED: SpeakerId={e.Result.SpeakerId} Text={e.Result.Text}");
};
await transcriber.StartTranscribingAsync();
Console.ReadKey();
await transcriber.StopTranscribingAsync();
Справочник: ConversationTranscriber, SpeechServiceResponse_DiarizeIntermediateResults
Настройка быстрого транскрибирования (REST и SDK)
Для быстрой транскрипции явно укажите язык и поведение диаризации.
Пример REST
curl --location "https://YourResourceName.cognitiveservices.azure.com/speechtotext/transcriptions:transcribe?api-version=2025-10-15" \
--header "Ocp-Apim-Subscription-Key: YourSpeechResourceKey" \
--form 'audio=@"call.wav"' \
--form 'definition={
"locales": ["en-US", "es-ES"],
"diarization": {
"enabled": true,
"maxSpeakers": 4
}
}'
Справка: Транскрипции — Транскрибировать
Пример пакета SDK Python
from azure.core.credentials import AzureKeyCredential
from azure.ai.transcription import TranscriptionClient
from azure.ai.transcription.models import (
TranscriptionContent,
TranscriptionOptions,
TranscriptionDiarizationOptions,
)
endpoint = "https://<your-resource>.cognitiveservices.azure.com/"
api_key = "<your-key>"
client = TranscriptionClient(endpoint=endpoint, credential=AzureKeyCredential(api_key))
with open("call.wav", "rb") as audio_file:
options = TranscriptionOptions(
locales=["en-US", "es-ES"],
diarization_options=TranscriptionDiarizationOptions(max_speakers=4),
)
result = client.transcribe(TranscriptionContent(definition=options, audio=audio_file))
for phrase in result.phrases:
print(f"locale={phrase.locale}, speaker={phrase.speaker}, text={phrase.text}")
Справочник: TranscriptionClient, TranscriptionOptions, TranscriptionDiarizationOptions
Настройка пакетного транскрибирования (REST)
Для пакетных заданий задайте все три элемента явным образом:
-
localeв качестве резервного варианта, если язык не определён. -
properties.languageIdentification.candidateLocalesдля области действия LID. -
properties.diarization.enabledиproperties.diarization.maxSpeakersдля меток говорящего.
{
"displayName": "Batch LID + diarization",
"locale": "en-US",
"contentUrls": [
"https://contoso.example/audio1.wav",
"https://contoso.example/audio2.wav"
],
"properties": {
"languageIdentification": {
"candidateLocales": ["en-US", "es-ES", "fr-FR"],
"mode": "Single"
},
"diarization": {
"enabled": true,
"maxSpeakers": 4
},
"timeToLiveHours": 48
}
}
Отправьте эту полезную нагрузку с помощью:
POST /speechtotext/transcriptions:submit?api-version=2025-10-15
Справка: Транскрипции - Отправка
Caution
Пакетное определение языка поддерживает базовые модели. Если указать определение языка вместе с пользовательской моделью, служба будет использовать базовые модели для возможных языковых стандартов, что может привести к неожиданным результатам распознавания.
Для диаризации используйте монофонический аудиосигнал. Диаризация не поддерживается для стереозаписей. Установите для maxSpeakers реалистичный верхний предел для разговора. Если запись содержит больше динамиков, чем настроенное максимальное, служба может объединить динамики.
Запуск контрольного списка предварительной проверки
Используйте этот контрольный список перед включением рабочего трафика:
- Проверьте поддержку локали.
- Убедитесь, что каждая локаль в
candidateLocales(илиlocales) присутствует в списках поддерживаемых локалей.
- Убедитесь, что каждая локаль в
- Проверьте конфигурацию запроса.
- Убедитесь, что в запросе используется
AutoDetectSourceLanguageConfig,localesилиproperties.languageIdentification.candidateLocalesв зависимости от рабочей нагрузки. - Убедитесь, что поддерживается фиксированный
SpeechRecognitionLanguageили резервный вариант корневого уровняlocale.
- Проверьте поля обнаружения языка.
- SDK реального времени: убедитесь, что
AutoDetectSourceLanguageResult(или свойствоSpeechServiceConnection_AutoDetectSourceLanguageResult) заполнено. - Быстрое или пакетное транскрибирование: убедитесь, что каждая фраза содержит ожидаемое
localeзначение.
- SDK реального времени: убедитесь, что
- Проверьте поля маркировки говорящих.
- Диаризация в реальном времени: убедитесь, что
SpeakerIdотображается в событиях транскрибирования или уже транскрибированных событиях. - Быстрая или пакетная транскрипция: убедитесь, что значения
speakerна уровне фраз присутствуют. - Убедитесь, что аудио монофоническое при включённой диаризации.
- Проверьте поведение при коротком или зашумлённом аудио.
- Запустите шумный набор примеров и сравните обнаруженный язык с ожидаемым языком.
- Если определение выполняется нестабильно, повторите запуск с фиксированной локалью источника вместо автоопределения.
- Проверьте настройку количества говорящих.
- Установите
maxSpeakersна реалистичное максимальное число участников.
- Установите
- Сравните возвращаемые метки говорящего с ожидаемым числом участников.