本文介绍语音识别的功能、性能、识别效果、SDK 使用和计费常见问题。
功能与模型
语音识别支持哪些模型?
模型按采样率分为 8 kHz 和 16 kHz,各采样率下有不同领域的模型。可以在智能语音交互控制台的项目功能配置中查看和选择模型。选择时需要使模型采样率与输入音频一致,并匹配语种和业务场景。
语音识别支持哪些语种和方言?
完整的语种、方言和采样率支持情况,请参见语音识别语种模型。
录音文件识别各模型对标点、逆文本规整(ITN)、顺滑、语义断句及声音和文本对齐的支持情况,请参见录音文件识别接口说明中的语种和方言模型表。项目当前可选模型可在控制台的项目功能配置中查看。
电话场景支持哪些语种?
电话录音通常使用 8 kHz 采样率。选择模型时查看语音识别语种模型中的 8 kHz 支持范围。
中文模型可以识别夹杂的英文单词和字母吗?
可以。中文普通话模型支持识别夹杂少量英文单词和字母的音频。根据音频的主要语言和业务场景选择相应模型。
语音识别支持本地离线使用吗?
本文介绍的云端语音识别服务不支持本地离线识别,需要将音频发送到服务端。录音文件识别中的“离线”是指对已有录音进行异步转写,不表示识别过程在本地完成。
说话有停顿,实时语音识别为什么不断句?
VAD 断句根据音频中的静音判断停顿。如果采集端在静音时停止发送数据,服务端就无法根据这段静音断句。应在说话停顿期间继续发送采集到的静音音频,而不是停止推流。
可以对比识别结果中的音频时间戳与实际音频时长。服务端收到的音频时长明显偏短时,检查采集端是否过滤了静音。开启语义断句后,断句还受后处理模型影响。
语音识别能自动分成多句话吗?
实时语音识别可以在一个任务中返回多个句子的结果。一句话识别的每个请求只对应一句话,不会拆分为多个句子结果。
开启 ITN 后,为什么不是所有中文数字都转为阿拉伯数字?
ITN 模型根据书面文本的常用写法决定数字形式,并不是将所有中文数字统一替换为阿拉伯数字。
一句话识别如何判断逗号和句号?
标点处理结合音频的声学特征和识别文本的语义分析结果。
enable_sample_rate_adaptive 和极速版的 sample_rate 有什么区别?
sample_rate 用于指定极速版输入音频的采样率,默认值为 16000。enable_sample_rate_adaptive 是录音文件识别的自动降采样开关,用于将高于 16 kHz 的音频降采样为 16 kHz,两者不能互换。极速版不使用该开关。
录音转文本能区分坐席和客户吗?
说话人分离可以区分不同说话人,但不能确定其业务身份是坐席还是客户。业务身份需要根据录音采集方式或业务信息确定,建议录音时按角色分轨存储。录音文件识别的说话人分离配置请参见录音文件识别接口说明中的 auto_split、supervise_type 和 speaker_num 参数。
录音文件识别如何区分左右声道?
多声道识别结果通过音轨 ID 标识对应声道,并不直接标注“左声道”或“右声道”。采集顺序固定时,可以根据音轨 ID 确定声道。录音文件识别 4.0 返回结果中的字段为 ChannelId,具体结构请参见录音文件识别接口说明。
实时语音识别会返回音轨 ID 吗?
不会。实时语音识别接收单声道音频,不使用录音文件识别的音轨 ID 区分多个声道。
一次识别可以使用多个热词表吗?
一次请求只能传入一个 vocabulary_id,使用一个热词表。如果热词表不能满足需求,可以考虑定制语言模型。热词表的管理方式请参见使用 POP API 创建业务专属热词。
录音文件识别的 4.0 和 2.0 有什么区别?
2.0 中,回调和轮询返回的 JSON 字段及命名风格不同。4.0 统一了两种方式的结果结构,均使用驼峰命名。当前接口的 version 默认值为 4.0。参数和历史版本差异请参见录音文件识别接口说明。
可以提交音频文件 URL 获取转写文本吗?
可以使用录音文件识别:通过 file_link 提交服务端可访问的音频 URL,再轮询获取结果或接收回调。完整流程请参见录音文件识别接口说明。
录音文件识别可以生成 SRT 字幕文件吗?
接口不直接返回 SRT 文件,需要根据识别文本及起止时间生成字幕。句子信息使用 Sentences 中的 Text、BeginTime 和 EndTime。需要词级时间时,将 version 设为 4.0 并开启 enable_words,读取 Words 中的 Word、BeginTime 和 EndTime。时间字段单位为毫秒。
语音识别支持哪些音频编码格式?
不同服务支持的编码格式不同。实时语音识别的格式、采样率和声道要求请参见实时语音识别接口说明。可以用 Audacity 等音频工具查看文件的实际编码,不要只根据文件扩展名判断。
语音识别支持哪些采样率?
实时语音识别通常使用 8000 Hz 或 16000 Hz。电话客服场景通常为 8000 Hz,手机 App、PC 或网页采集通常使用 16000 Hz。采集到其他采样率的音频时,需要先转换为服务支持的采样率,并使请求参数和模型配置保持一致。
录音文件识别还支持 32 kHz、44 kHz 等采样率的音频,具体要求请参见录音文件识别接口说明。
如何查看音频的采样率?
可以使用 Audacity 或 FFmpeg 查看音频文件的采样率。
实时语音识别与录音文件识别的音频要求有什么区别?
实时语音识别使用单声道、16 bit 音频,采样率为 8 kHz 或 16 kHz。录音文件识别支持单声道和双声道,编码格式与采样率要求也不同。接入时分别查看实时语音识别接口说明和录音文件识别接口说明。
EmotionValue 表示情感分类吗?
不是。录音文件识别结果中的 EmotionValue 是情绪能量值,按音量分贝值除以 10 计算,取值范围为 [1, 10]。它不是积极、消极等情感类别。
性能与时延
如何计算识别准确率?
识别效果通常用错误率衡量,中文常用字错误率(CER),英文常用词错误率(WER)。错误率为插入、删除和替换的字数或词数之和除以参考文本的总字数或总词数。以下结果以词为单位统计:
%WER 15.07 [ 2165 / 14365, 74 ins, 385 del, 1706 sub ]
%SER 67.75 [ 645 / 952 ]
Scored 952 sentences, 0 not present in hyp.按 1 - WER 计算,这批数据的准确率为 (14365 - 74 - 385 - 1706) / 14365 = 84.93%,即 100% - 15.07%。
语音识别模型的字准率能达到多少?
在国家软件测试中心的语音识别准确度评测中,测试条件为:低于 60 分贝的降噪环境,耳麦距嘴部 1 厘米,以每分钟 240 字的匀速朗读 1207 字普通话样本。5 轮测试的识别准确率均超过 98%,该准确度通过了国家软件测试中心的标准认证。
实际准确率受耳麦质量、背景噪声和口音等影响。对于 8 kHz、16 bit、用户与客服双通道分轨的 PCM 或 WAV 音频,在信噪比高于 20 dB 的条件下,绝大部分商用场景可保障 85% 的准确度。
录音文件识别极速版的延迟是多少?
极速版承诺在 10 秒内完成 30 分钟音频的识别,计时从服务端收到全部音频开始,不包含上传时间。上传时间受客户端带宽等因素影响。返回结果中的 latency 字段记录服务端处理时长。
8 kHz 模型可以识别 16 kHz 音频吗?
不可以直接使用。8 kHz 和 16 kHz 模型分别对应相应采样率的音频。需要更换匹配的模型或先转换音频采样率,并同步调整请求参数。
极速版限制调用频率吗?
极速版不限制调用频率,但限制并发数。可以在控制台查看并发额度。
粤语的识别准确率是多少?
粤语 8 kHz、16 kHz 模型的识别准确率约为 80%~95%,受语料和发音标准程度影响。不同服务的准确率可能存在约 5% 的相对差异,整体表现为录音文件识别高于一句话识别,一句话识别高于实时语音识别。
15 秒左右的录音文件需要多久才能完成识别?
录音文件识别是异步服务。免费用户的任务在 24 小时内完成,付费用户的任务在 3 小时内完成;一次性上传大规模数据(半小时内上传超过 500 小时时长的录音)的情况除外。具体时效条件请参见录音文件识别接口说明。对于 60 秒以内且要求及时返回结果的短音频,建议使用一句话识别。
可以调整录音文件识别任务的优先级吗?
暂不支持调整任务处理优先级,不能将紧急任务插入正在处理的任务之前。
电话对话场景推荐使用哪个模型?
建议使用端到端“识音石”模型,并确保音频采样率与模型匹配。
一次请求可以识别多长的音频?
一句话识别支持 60 秒以内的短音频。实时语音识别不限制音频总时长,但需要按照接口要求持续发送音频并正确结束任务。
流式与非流式识别有什么区别?
非流式识别在一句话结束后返回一次结果。流式识别可以在说话过程中返回多个中间结果,再返回句子最终结果。中间结果可能修正,业务应使用最终结果更新对应句子的中间文本。
什么是 ASR 尾点延迟?
尾点延迟是调用端发送音频结束到识别完成的时间。一句话识别和实时语音识别的尾点延迟约为 300 毫秒,具体受模型和音频影响。
一句话识别 RESTful 接口批量接收音频,处理时长与音频时长相关。不计网络开销时,可按音频时长的 0.2 倍估算,例如 1 分钟音频约需 12 秒。实际处理时长随模型和服务器负载变化。
实时语音识别延迟较高怎么办?
检查是否设置了 enable_semantic_sentence_detection=true。语义断句可以提升识别准确率,但会小幅增加延迟。如果对时延要求较高,可以将该参数设为 false。
识别效果与排查
如何优化识别不准的词?
先使用不需要音频标注的优化方式:
使用业务关键词、句子和篇章定制语言模型。训练语料应覆盖关键词的不同表达,例如“银税e贷是什么”“如何办理银税e贷”。
对仍然识别不准的关键词,通过增加相关语料行或提高模型权重加强训练。
对个别问题词使用热词优化。
如果口音等因素造成整体效果较差,且上述方式不能满足需求,可以考虑声学模型优化。该方式需要标注音频;标注文本也可以加入语言模型的训练语料。
为什么单字难以识别?
单字发音短,缺少上下文,是较难识别的情况。添加热词不一定能改善效果,可以考虑定制模型。
可以调整热词权重吗?
人名、地名类热词不支持设置权重;业务专属热词支持权重。控制台创建业务专属热词时不支持设置权重,需要通过 API 调整。具体请参见使用 POP API 创建业务专属热词。
录音文件识别时间戳不准怎么办?
对于支持时间戳校准的模型,可以设置 enable_timestamp_alignment=true。模型支持范围和参数说明请参见录音文件识别接口说明。
噪声被识别为文字怎么办?
可以调整 speech_noise_threshold,取值范围为 [-1, 1]。值越小越灵敏,也越容易将噪声识别为语音;值越大,越可能过滤掉有效语音。例如从 0.6 调到 0.7 可以降低灵敏度;出现漏字时应调小,例如改为 0.5、0.2 或 -0.2。
Java
transcriber.addCustomedParam("speech_noise_threshold", -0.1);C++
request->setPayloadParam("speech_noise_threshold", -0.1);远场识别经常丢字怎么办?
远场和近场适用的 VAD 阈值不同,可以适当调小 speech_noise_threshold 提高灵敏度,例如从 -0.2 调到 -0.3 或 -0.4。如果噪声误识别增多,则适当调大,例如改为 -0.1 或 0。参数范围为 [-1, 1]。
大量识别结果不准确时先检查什么?
先检查实际音频、请求参数和模型配置是否匹配。在线识别使用 8 kHz、16 bit 或 16 kHz、16 bit 音频,请求中的采样率应分别为 8000 或 16000,模型也应为相应采样率。
公共云环境在控制台查看 Appkey 对应项目的模型;专有云环境检查 service/resource/asr/default/models/readme.txt 中定义的采样率。
特定业务词持续识别错误怎么办?
例如“银税e贷”持续识别不准,可以通过以下方式优化:
在定制语言模型语料中加入“银税e贷是什么”“如何办理银税e贷”等不同上下文。
将“银税e贷”配置为业务专属热词,并调整权重。
专有云环境可在
service/resource/asr/default/models/nn_itn/correct.list配置纠错。第一列为误识别文本,例如“银税一袋”;第二列为正确文本,例如“银税e贷”。修改后需要重启 ASR 才能生效。
如何改善标点和断句效果?
默认使用 VAD 断句。对于支持语义断句的模型,可以设置 enable_semantic_sentence_detection=true。实时语音识别使用语义断句时,还应开启 enable_intermediate_result 返回中间结果。
为什么录音文件识别返回两份相同内容?
检查音频是否为双声道,且两个声道内容相同。如果是,可以设置 first_channel_only=true,只识别第一个声道。
实时语音识别慢或超时,如何排查?
使用 SDK 示例与业务程序对比,记录日志和请求的
task_id。使用 tcpdump(Linux)或 Wireshark(Windows)检查网络连接和数据发送情况。
区分建连超时与识别期间无音频超时。建连超时应检查网络及客户端超时配置;任务启动后应按接口要求持续发送音频。
建连超时可通过所用 SDK 的超时参数配置。该设置不改变服务端的无音频超时限制。
为什么有时只能识别出几个字?
检查音频采样率是否与模型一致,以及输入是否为服务要求的单声道音频。不要将双声道录音直接用于实时语音识别。
需要处理双声道录音时,可以使用录音文件识别。
调用配置正确,仍需要提高准确率怎么办?
SDK 与任务处理
一句话识别 SDK 示例使用什么协议?
一句话识别 SDK 示例使用 WebSocket。RESTful API 使用 HTTP,两者的交互方式不同。
实时语音识别有 Python SDK 吗?
有。Python SDK 提供 NlsSpeechTranscriber,可以启动识别、发送音频并处理识别结果和任务完成回调。
安装与调用示例请参见实时语音识别 Python SDK。
识别结果中的 endtime=-1 是什么意思?
对于使用 endtime 字段的流式返回格式,endtime=-1 表示当前句子尚未结束,对应中间结果。
HarmonyOS NEXT SDK 如何切换 8000 Hz 和 16000 Hz?
示例默认以 16000 Hz 录音和识别。切换到 8000 Hz 时,需要同时修改录音和识别配置:
在
AudioCapture.ets中,将samplingRate:audio.AudioSamplingRate.SAMPLE_RATE_16000改为samplingRate:audio.AudioSamplingRate.SAMPLE_RATE_8000。在对应识别示例的
.ets文件中,为genInitParams()增加object.set("sample_rate", "8000"),其他位置无需修改。
如何正确结束并重新开始实时识别任务?
先停止发送音频,再调用 SDK 的停止方法或发送 StopTranscription,等待 TranscriptionCompleted。下一次识别需要重新启动任务;连接已断开时,先重新建立连接,再启动任务。
没有有效语音时,任务仍会结束,但可能不返回句子结果事件 SentenceEnd。
计费
录音文件识别极速版支持免费试用吗?
不支持,需要付费使用。