Azure Speech to Text已配置时间戳但无报错未返回结果怎么办?
Azure Speech 转文本已配置但无法返回词级时间戳的解决方法
核心排查项
- 先核对配置的执行顺序:所有时间戳相关的配置必须在创建
SpeechRecognizer实例之前写完,SDK只会读取识别器初始化那一刻的配置值,后续再改任何参数都不会同步给服务端。很多人写代码图顺手,先把识别器对象建出来,回头再设置输出格式、调用时间戳请求方法,这种操作压根不会把时间戳请求发到服务端,自然拿不到结果。 - 找对时间戳的存放位置:就算所有配置都生效了,时间戳也不会塞在最外层的识别结果文本里——顶层的
result.Text永远只有纯文本内容。词级时间戳是放在Detailed格式返回的NBest列表项的Words属性里,每个词条对应一条记录,包含单词内容、音频起始偏移量、单条识别时长三个字段。直接盯着顶层字段找时间戳,找破头也找不到。 - 确认你读的是哪次的识别结果:识别过程中持续触发的
Recognizing回调,返回的都是临时中间结果,这类结果只带当前阶段的识别文本,不会附带时间戳、置信度这类详细字段。时间戳只会在最终状态的Recognized回调返回的稳定结果里存在。 - 确认当前用的服务端模型支持时间戳能力:如果调用的是轻量快速识别模型、或者还在预览阶段的方言/小语种模型,部分节点的服务默认没开词级时间戳返回能力。换成正式发布的通用标准模型(比如正式上线的zh-CN、en-US模型),选已经支持全量详细输出的服务区域,就能拿到对应字段。
- 排除SDK版本的已知bug:1.20版本之前的Azure Speech SDK有过配置不生效的问题,哪怕代码逻辑全对,调用
RequestWordLevelTimestamps()也不会把请求传给服务端。把SDK升级到当前最新的稳定版,这类配置传递失效的问题基本都能解决。
正确的配置与取数流程参考(Python SDK):
# 1. 初始化基础配置 speech_config = SpeechConfig(subscription=密钥, region=服务区域) # 2. 切换为详细输出格式 speech_config.output_format = OutputFormat.Detailed # 3. 发起词级时间戳请求 speech_config.request_word_level_timestamps() # 4. 所有配置写完再初始化识别器 speech_recognizer = SpeechRecognizer(speech_config=speech_config, audio_config=音频输入配置) # 5. 在最终识别事件中提取时间戳 def get_final_result(evt): if evt.result.reason == ResultReason.RecognizedSpeech: # 从NBest列表中遍历取词级数据 for item in evt.result.json["NBest"]: word_list = item["Words"] # word_list中每个元素包含Word文本、Offset起始偏移、Duration持续时长
内容的提问来源于stack exchange,提问作者Michael Schwartz
相关产品推荐
相关产品推荐

