全部产品

常见问题FAQ汇总

本文整理了智能语音交互服务使用中的常见问题,分为功能类、SDK使用类、性能类、效果类等类别,以便您查找。

功能类

如何开通服务?

关于开通智能语音服务,请参见开通服务

找不到AccessKey ID和AccessKey Secret在哪里?

请参见开通服务,获取AccessKey ID和AccessKey Secret。

如何查看UID?

  1. 登录阿里云控制台

  2. 将鼠标悬浮在右上角用户头像上,弹出的面板信息中的账号ID即为UID。

    查看UID

如何提工单?

为了更好的提供服务端排查支持,请您登录阿里云工单系统提交排查工单,推荐提供以下信息:

  1. 全部的log信息 ,包含报错部分。

  2. 相关taskid、appkey等信息(不含账号密码信息),处理工单的同学将发送授权同意请求给您,以便您勾选同意。

SDK使用类

是否有Android和iOS的SDK,能否用在专有云下?

有SDK,在专有云安装包里默认不提供,可以通过阿里云帮助中心对应的服务文档中下载,如实时语音识别的Android SDKiOS SDK。移动端SDK可以调用公共云ASR、TTS服务,也可以用在专有云环境下。

一句话识别、实时语音识别SDK中,send接口参数含义及使用方式?

以Java为例。java SDK中,一句话识别和实时语音识别分别提供了三个重载的send()接口。如下:

public void send(InputStream ins);
public void send(InputStream ins, int batchSize, int sleepInterval);
public void send(byte[] data);

三个接口使用时要保证持续、实时地向服务端发送语音数据。

demo是用语音文件模拟实时语音流的速度发送语音,通常一次发送间隔时间为100ms或200ms(sleepInterval)的语音数据,数据量(batchSize)和采样率有关:发送间隔过大,会导致延迟较大,容易断连;发送间隔过小,会消耗服务端和网络资源。可以适当实验调整到合适数值。

第2个接口中ins为模拟语音流,需要控制发送速率。ins中的数据每间隔100ms,发送3200字节(16000采样率)。调用示例:

public void send(ins, 3200, 100); // 16khz语音

第3个接口中data为一次性发送的数据,控制循环调用的间隔,调用示例:

recognizer.send(data); // 100ms语音数据
try {
 Thread.sleep(100);
} catch (InterruptedException e) {
 e.printStackTrace();
}

智能语音交互是否有供参考的教程?

以下是相关的功能的视频介绍:

如何结合SDK日志,分析延迟问题?

以Java SDK日志为例。

  • 一句话识别的延迟为一句话说完开始,到收到最终识别结果为止,消耗的时间。

    在日志中搜索关键字StopRecognition以及RecognitionCompleted,分别找到语音发送完毕时的日志,以及一句话识别结束的日志。记录的时间差即为SDK端记录的一句话延时,如下日志延迟为:984-844=140(ms)。

    14:24:44.844 DEBUG [           main] [c.a.n.c.transport.netty4.NettyConnection] thread:1,send:{"header":{"namespace":"SpeechRecognizer","name":"StopRecognition","message_id":"bccac69b505f4e2897d12940e5b38953","appkey":"FWpPCaVYDRp6J1rO","task_id":"8c5c28d9a40c4a229a5345c09bc9c968"}}
    14:24:44.984 DEBUG [ntLoopGroup-2-1] [  c.a.n.c.p.asr.SpeechRecognizerListener] on message:{"header":{"namespace":"SpeechRecognizer","name":"RecognitionCompleted","status":20000000,"message_id":"2869e93427b9429190206123b7a3d397","task_id":"8c5c28d9a40c4a229a5345c09bc9c968","status_text":"Gateway:SUCCESS:Success."},"payload":{"result":"北京的天气。","duration":2959}}
  • 语音合成关注首包延迟,即从发送合成请求开始,到收到第一个语音包为止,消耗的时间。

    日志中搜索关键字 send,找到这条日志和紧随其后的一条收到语音包的日志。记录的时间差即为SDK端记录的首包延时。如下日志延时为1035-813=222(ms)。
    14:32:13.813 DEBUG [           main] [c.a.n.c.transport.netty4.NettyConnection] thread:1,send:{"payload":{"volume":50,"voice":"Ruoxi","sample_rate":8000,"format":"wav","text":"国家是由领土、人民、文化和政府四个要素组成的,国家也是政治地理学名词。从广义的角度,国家是指拥有共同的语言、文化、种族、血统、领土、政府或者历史的社会群体。从狭义的角度,国家是一定范围内的人群所形成的共同体形式。"},"context":{"sdk":{"name":"nls-sdk-java","version":"2.1.0"},"network":{"upgrade_cost":160,"connect_cost":212}},"header":{"namespace":"SpeechSynthesizer","name":"StartSynthesis","message_id":"6bf2a84444434c0299974d8242380d6c","appkey":"FWpPCaVYDRp6J1rO","task_id":"affa5c90986e4378907fbf49eddd283a"}}
    14:32:14.035  INFO [ntLoopGroup-2-1] [  c.a.n.c.protocol.tts.SpeechSynthesizer] write array:6896
  • 实时语音识别SDK日志类似一句话识别,可以从日志中计算语音末尾处延迟(关键字:StopTranscriptionTranscriptionCompleted)。

  • RESTful形式访问,客户端自带日志中没有体现延迟。需要用户自己编写代码,或者查看服务端日志。

Token如何使用?

公共云Token在不同项目间、不同进程间、不同线程间都可以共用,同时一定要注意在Token过期前提前重新获取Token;出于安全考虑,建议您在服务端集成token SDK,客户端在服务端获取Token。详情请参见获取Token

专有云Token目前默认都是default,暂时无需修改。

Token重新获取会不会导致已获取的Token失效?

Token重新获取不会影响已获取Token的有效性,有效性只与时间有关。Token的有效期通过服务端响应消息的ExpireTime参数获取。更多信息,请参见获取Token协议说明

是否可以提供服务的IP白名单?

服务器的IP比较多,且会随着扩容、机器故障置换等原因动态变化,当前的IP列表不代表后续都可以使用。建议增加以下两个域名的访问规则:nls-meta.cn-shanghai.aliyuncs.com、nls-gateway.cn-shanghai.aliyuncs.com,开通80、443端口,HTTP和websocket协议。

性能类

什么是ASR尾点延迟?

尾点延迟的定义是调用端发送音频结束到完成识别的时间。

目前语音实时识别,如一句话识别、实时转写接口的延迟在100~200ms左右,视模型、音频差异而略有不同。

一句话识别RESTful接口因为批量接收音频,识别时长和音频时长相关。不考虑网络开销,一句话识别RESTful接口处理时长和音频时长近似线性关系,简单计算可以认为:接口处理时长=音频时长*0.2。例如,1分钟音频处理时长约为12秒。实际线上性能会随模型的不同和服务器负载略有差异。

并发数是如何计算的?

并发数指同一个账号(阿里云UID)同时在处理的请求数。

一般语音请求的处理都会延续一段时间,例如用户新建一个语音识别请求,持续发送语音数据给服务端,这时并发数就是1;在这个请求处理的同时,同一用户又新建了另一个请求,开始发送语音数据,这时服务端同时在处理这个账号的两个请求,并发数就变成2。

效果类

语音识别服务支持哪些采样率?

一般支持8000Hz、16000Hz的采样率。 电话客服场景往往是8000采样率,如果是手机APP、PC端工具、网页H5类场景,往往是16000Hz采样率(可能会有32、44.1k采样率,但开发时需要调用方将采样率调整为16k)。其他采样率的录音数据需要预先自行转码。

录音文件转写可以支持其他采样率,例如32k、44k等等。

如何查看音频文件的采样率?

可以使用常见音频编辑软件如Audacity查看音频文件的采样率,也可以使用开源命令行工具FFmpeg查看。

语音识别服务支持的方言模型和语种都有哪些?

语音识别目前支持的方言模型和语种如下:

16k: 中文、英文、四川方言、湖北方言、日语、西班牙语、粤语等。

8k:中文普通话、中文粤语、中文地方口音、英语、四川方言等。

最新的模型支持情况可以登录智能语音交互控制台,在项目配置中查看。图片 1图片2图片 3

语音识别太灵敏、无效声音(噪音等)被识别出了文字怎么办?

可以通过设定参数speech_noise_threshold的值来修改VAD噪声阈值。

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_thresholdspeech_noise_threshold参数区间是[-1,1],取值越小越灵敏,可能会有更多噪音被当成语音被误识别;取值越大,可能更多语音段会被当成噪音而没有被识别。例如设为-0.2,如果丢字现象仍然比较严重,可以继续调小至如-0.3、-0.4;如果发现较多噪声被误识别了,也可以适当调大,例如-0.1、0等。

ASR识别很离谱,不准确怎么办?

一般来说,ASR模型识别率均有一定的保证。如果在所有情况下语音识别都不准确,或者识别率很低,往往需要整体考虑是否有什么地方配置错误,例如实际语音的采样率(在线识别场景ASR只支持8k 16bit或者16k 16bit)、调用时设置的采样率参数(8000或者16000)、ASR服务端模型(8k或者16k),这三者需要保持一致。

注意

如果是公共云ASR调用,需要确认阿里云控制台上该appkey所选择的模型采样率;如果是专有云ASR环境,则需要确认service/resource/asr/default/models/readme.txt 文件中所定义的采样率。

有些词汇总是识别不准怎么办?

在某些情况下,确实存在某些词汇识别不准的情况,如特定名词。针对此现象(下面以词汇“银税e贷”为例),我们建议有:

  • 通过自学习平台的定制语言模型训练优化,例如把“银税e贷是什么”、“如何办理银税e贷”等等相关话术加入到文本语料中进行训练。

  • 通过自学习平台的热词优化,例如把“银税e贷”作为热词进行训练,设置相应权重。

  • 专有云可通过ASR的白名单优化,例如“银税e贷”更容易为误识别为“银税一袋”,则可以在service/resource/asr/default/models/nn_itn/correct.list中按预定格式进行设置,第一列是误识别的文本,第二列是正确文本,注意该操作要求重启ASR生效。

如何提高标点断句的效果?

默认VAD断句,可以添加参数enable_semantic_sentence_detection使用语义断句。如果是实时识别,请确认中间结果(参数enable_intermediate_result)也是开启的。

实时场景中,已经开启了标点断句,为什么效果还是不理想?

可以确认下是否开启中间结果,实时场景的语义断句需要配合中间结果使用。

录音文件识别存在一次请求后返回两次相同的结果的情况吗?

此类现象大部分是由于用户提交的语音文件是双声道,且两个声道语音内容相同造成的。如果是这种情况,属正常现象,可以用ffmpeg把双声道转成单声道即可解决。

实时识别和录音文件转写分别支持哪些语音格式?

p278359