You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Azure Speech SDK的recognize_once()处理超4种语言音频的识别错误问题

Azure Speech SDK 多语言分批检测误判问题解决

问题核心原因

  1. 孟加拉语(bn-IN)与印地语(hi-IN)同属印度-雅利安语系,语音特征高度相似,当两者处于同一检测批次时,模型易出现误判。
  2. 原代码逻辑为只要某一批次返回识别结果就立即终止循环,未验证结果置信度,也未继续验证后续批次,导致错误结果被直接采用。

解决方案

1. 优化批次分组

将语音特征高度相似的语言(如bn-IN和hi-IN)分入不同批次,降低同批次内的语言混淆概率。

2. 收集所有有效结果并按置信度筛选

不再仅取第一个识别结果,而是遍历所有批次,收集所有有效识别结果,从中选取置信度最高的语言作为最终结果。

修改后的代码

import azure.cognitiveservices.speech as speechsdk
import json

subscription_key = "00000000000000000000000000"
service_region = "westus"
audio_file_path = "C:\\yogesh_folder\\speech_bangla.wav"

# 优化分组:将相似语言分入不同批次
languages_batches = [
    ["en-US", "ml-IN", "ta-IN", "te-IN"],
    ["gu-IN", "kn-IN", "mr-IN", "pa-IN"],
    ["bn-IN"],  # 单独批次处理孟加拉语
    ["hi-IN"]   # 单独批次处理印地语
]

speech_config = speechsdk.SpeechConfig(subscription=subscription_key, region=service_region)
audio_config = speechsdk.audio.AudioConfig(filename=audio_file_path)

# 存储所有有效识别结果(语言, 置信度)
candidates = []

for batch in languages_batches:
    print(f"检测语言批次: {batch}")
    auto_detect_config = speechsdk.languageconfig.AutoDetectSourceLanguageConfig(languages=batch)
    speech_recognizer = speechsdk.SpeechRecognizer(
        speech_config=speech_config,
        auto_detect_source_language_config=auto_detect_config,
        audio_config=audio_config
    )
    
    result = speech_recognizer.recognize_once()
    
    if result.reason == speechsdk.ResultReason.RecognizedSpeech:
        # 提取检测到的语言
        detected_lang = result.properties.get(speechsdk.PropertyId.SpeechServiceConnection_AutoDetectSourceLanguageResult)
        # 从JSON结果中提取置信度
        json_result = json.loads(result.properties.get(speechsdk.PropertyId.SpeechServiceResponse_JsonResult))
        confidence = json_result['NBest'][0]['Confidence']
        
        candidates.append((detected_lang, confidence))
        print(f"当前批次识别结果: {detected_lang}, 置信度: {confidence:.2f}")

# 选择置信度最高的结果
if candidates:
    # 按置信度降序排序
    candidates.sort(key=lambda x: x[1], reverse=True)
    detected_language, highest_confidence = candidates[0]
    print(f"\n最终检测语言: {detected_language}, 置信度: {highest_confidence:.2f}")
else:
    print("未检测到任何语言")

代码关键改动说明

  • 批次分组优化:将bn-IN和hi-IN单独分批次,避免同批次内的相似语言干扰。
  • 置信度提取:通过SpeechServiceResponse_JsonResult属性获取完整识别结果,从中提取置信度数值。
  • 结果筛选逻辑:收集所有有效结果后,按置信度排序,选取最可靠的结果作为最终检测语言。

内容的提问来源于stack exchange,提问作者Yogesh Govindan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 15:22:13