密级 | 公开 |
---|---|
版本 | 10D.2 |
AICP ASR MRCP开发手册
#
1. 概述#
1.1 功能介绍在电话呼叫等系统中一般使用MRCP接口同客户端的ivr系统进行语音识别交互,在AICP10.x平台的基础上增加对MRCP接口访问ASR能力的支持。
#
1.2 术语定义#
1.2.1 MRCPv2 协议媒体资源控制协议(Media Resource Control Protocol, MRCP)是一种通讯协议,用于媒体资源服务器向客户端提供各种语音服务,目前已定义的媒体资源服务有语音识别(Speech Recognition)、语音合成(Speech Synthesis)、录音(Recording)、说话人鉴别和确认(Speaker Verification and Identifi-cation)。 MRCP并不定义会话连接,不关心服务器与客户端是如何连接的, MRCP消息使用RTSP、SIP等作为控制协议,目前最新的 MRCPv2 版本使用SIP控制协议。(本文使用的是MRCPv2)
#
1.2.2 MRCP相关协议- SIP(Session Initiation Protocol) 会话初始化协议,用于创建、修改、终止一个或多个参与者的会话。这些会议包括互联网电话,多媒体分发和多媒体会议。
- SDP(Session Description Protocol) 会话描述协议,传递媒体流信息,允许会话描述的接收者去参与会话。定义了会话描述的统一格式,与SIP配合使用在MRCP中达到创建一个Media Control Channel的目的。
- RTP(Real-Time Transport Protocol)
实时传输协议,适用于传输实时数据的应用程序,如音频、视频或模拟数据,可通过RTP的子协议
RTCP(RTP Control Protocol)
保证服务质量。在MRCP中负责对媒体资源进行传输。
#
1.3 参考资料UniMRCP官网
W3C语法文件规范
UniMRCP设计文档
UniMRCP服务配置
#
1.4 逻辑架构#
1.4.1 交互流程#
2. 识别模式#
2.1 识别模式MRCP接口服务通过调用ASR能力的Freetalk引擎,进行语音识别,输出结果以句子为单位。根据业务场景不同细化为:
- 导航识别模式(voice-guide)
导航识别模式下,可通过语法文件参数选择是否使用语义打断识别逻辑,默认采用语音打断逻辑。检测到一句话完成后上报识别结果完成事件(
RECOGNITION-COMPLETE
),并退出识别过程。 - 实时转写模式(speech-to-text)
实时转写模式下,MRCP接口服务端持续识别并上报识别结果中间事件(
INTERMEDIATE-RESULT
),正常识别中不会主动退出识别过程。
#
2.2 识别参数控制通过语法文件中参数节点,可动态调节每个会话的识别参数,可调内容包括:
- 是否启动no-input计时器(
start-input-timers
) - 静音头部超时时间(
no-input-timeout
) - 识别内容超时时间(
recognition-timeout
) - 语音检测灵敏度(
sensitivity-level
) - 静音尾部检测时间(
speech-complete-timeout
) - 识别领域属性(
property
)
#
3. 对接说明AICP平台MRCP对接方式,采用传入语法文件的方法,可控制识别参数、识别语言领域、热词优化功能、语义打断功能、broker接口调用功能。 语法文件总览: 使用时请按需要进行裁剪避
注:xml各个节点的内容保持在一行书写,避免解析xml出现异常
#
3.1 识别模式设置通过以下配置格式配置该节点内容,可控制识别模式
当配置了具体识别模式后,需要创建对应的实际节点参数,参考以上voice-guide
模式的格式即可。支持的识别模式有:
voice-guide
speech-to-text
voice-guide
单句交互模式#
3.1.1 - 应用场景
- 应用在需要多轮对话的场景,如导航、外呼等。
- ASR模式
- 内部使用ASR引擎的continue模式,携带本次识别的第一句识别结果,通过MRCP识别完成事件
RECOGNITION-COMPLETE
返回给调用者。
- 内部使用ASR引擎的continue模式,携带本次识别的第一句识别结果,通过MRCP识别完成事件
- 工作时序图
speech-to-text
连续转写模式#
3.1.2 - 应用场景
- 应用在只进行连续实时转写的场景。如通话内容全文录音记录等。
- ASR模式
- 内部使用ASR引擎的continue模式,以句子为单位,通过MRCP事件连续输出给调用者每一句的识别结果。连续转写模式流程中引入了中间识别事件,在原有识别事件
中新扩展了INTERMEDIATE-RESULT
事件,使其能携带结果信息。因为是实时转写,MRCP接口服务一般不会主动上报RECOGNITION-COMPLETE
,除非MRCP Server遇到识别不可继续下去的严重错误,才会上报。 - 注1:该识别事件是非标准mrcp协议规定,固使用前需定提客户端已经实现对
INTERMEDIATE-RESULT
事件的解析及处理 - 注2:连续转写该模式下,超时时间相关逻辑无效
- 工作时序图
#
3.2 识别领域及语言设置配置格式如下:
根据实际场景配置正确参数,如节点不存在,缺省默认为cn_8k_common 例如:
配置串 | 说明 |
---|---|
cn_8k_common | 8K 人机 |
cn_8k_zhijian | 8K 人人 |
#
3.3 识别参数设置配置格式如下:
参数含义如下:
字段名 | 含义 | 范围 | 说明 |
---|---|---|---|
no-input-timeout | 未检测到输入时超时门限 | [0,30000];单位ms;默认:10000 | 当开始识别后,未检测到语音(即开始讲话)的时间片累计超过此设定阈值后, MRCP接口发送识别完成事件 RECOGNITION-COMPLETE 给客户端,事件原因填充为no-input-timeout ,同时终止本次识别。 |
start-input-timers | 是否启动no-input定时器 | {true,false},默认false | 当值为false是,虽然开始识别,但是不启用no-input内部计时,也即不做no-input-timeout 的时间片累计。 |
recognition-timeout | 识别时语音超时门限 | [0,60000];单位ms;默认:30000 | 当识别开始(检测到语音)时,超过该阈值依然没有匹配到识别结果, MRCP接口发送识别完成时间 RECOGNITION-COMPLETE 给客户端,有识别结果时事件原因填充为recognition-timeout |
speech-complete-timeout | 识别完成后需要接收的静音时长 | [0,30000];单位ms;默认:500 | 输出结果前留给尾部检测所需静音时长,原理等同于静音尾断点检测时长。 |
sensitivity-level | 语音检测灵敏度 | [0,1.0];默认0.15 | 语音检测过程中低于该门限的语音将被当做静音数据,同VAD断点检测阈值 |
sa-output-speed | 语速检测开关 | [0,1];无设置时,以本地配置文件为准 | 识别完成后输出对应脚本可编程项,配合结果脚本可返回给用户 |
sa-output-volume | 音量检测开关 | [0,1];无设置时,以本地配置文件为准 | 识别完成后输出对应脚本可编程项,配合结果脚本可返回给用户 |
sa-output-emotion | 情绪检测开关 | [0,1];无设置时,以本地配置文件为准 | 识别完成后输出对应脚本可编程项,配合结果脚本可返回给用户 |
#
3.4 语义打断参数设置配置格式如下:
#
3.4.1 功能概述在mrcp接口中增加对识别结果的判断来返回打断TTS播报的interrupt标识。在使用语义打断的情况下,服务端判断如果语法文件中有语义打断的语法文件,则服务端asr识别采用continue-rt模式,语音流实时传输, mrcp接口层根据rt模式下返回的分片结果来判断是否进行打断。mrcp结果返回仍为一次整句的识别结果, asr有识别结果但是并未有打断的时候,识别结果不通过mrcp对外返回,如“嗯”、“好的”等未触发语义打断逻辑的识别内容。
#
3.4.2 打断逻辑流程#
3.4.2.1 打断逻辑流程描述判断是否进行打断的逻辑原则和优先级顺序如下:
- 在识别时间小于“不允许打断时间阈值”的情况下,无论如何都不进行打断;
- 当识别结果超过“直接打断阈值”时,发送打断标识并打断,返回识别结果;
- 当时别结果未超过“直接打断阈值”:
- 检测到白名单,则进行打断,返回识别结果;
- 识别结果未超过“黑名单生效阈值”、未检测到白名单且识别结束,不进行打断;
- 识别结果超过“黑名单生效阈值”、检测到黑名单则不打断;
- 识别结果超过“黑名单生效阈值”、未检测到黑名单且识别结束,发送打断标识并打断,返回识别结果。
#
3.4.2.2 打断逻辑流程图语义匹配逻辑仅在 start-input-timers
定时器未开启时生效
伪码术语:
recog_duration
:已识别时间片(单位ms)recog_word_count
:已识别字符个数allow_interrupt_duration
:开始允许打断时间门限(单位ms),首次识别打断事件延迟生成时间,即保护TTS播报的最少时间whitelist
:白名单blacklist
:黑名单allow_match_blacklist_count
;黑名单生效字数阈值force_interrupt_word_count
: 强制打断阈值门限start_of_input
:返回给ivr用于打断的事件recog_text
:识别结果interrupt_flag
:打断标记默认0
#
3.4.3 打断逻辑约束条件- 强制打断阈值门限要根据实测效果合理选取,不宜过短,否则可能出现误打断情况较多
- 黑名单生效字数阈值要小于强制打断门限,不宜过长,否则黑名单处理逻辑将可能不会执行
- 开始允许打断时间门限时间,不宜过长,否则打断产生时间过于滞后,影响用户体验
- 黑名单构造时单词长度不应该超过,强制打断阈值,否则该单词也不会生效
- 语义打断语法文件中节点内容没有传输有效的内容时将会返错,中断识别
- 语义打断的黑白名单匹配逻辑仅在
start-input-timers:false
时进行(防止TTS播报之后正常识别内容落在名单逻辑中而被忽略的情况)
#
3.4.4 语义打断黑白名单节点参数语义打断节点参数包括:
- 是否启动语义打断
enable
(0:不启用,1:启用) - 强制打断时字符阈值
force_interrupt_word_count
(单位:字符个数) - 开始允许打断时间门限
allow_interrupt_duration
(单位:ms) - 黑名单内容
blacklist
- 白名单内容
whitelist
#
3.4.4.1 黑名单节点说明黑名单节点参数包括:
- 是否启用黑名单功能(0:不启用,1:启用)
- 黑名单生效字数阈值(单位:字符个数)
- 黑名单词表内容(每个词使用 “|” 分割开)
#
3.4.4.2 白名单节点说明白名单节点参数包括:
- 是否启用白名单功能(0:不启用,1:启用)
- 白名单词表内容(每个词使用 “|” 分割开)
#
3.4.5 识别结果处理说明- 当识别了多句话之后才触发了白名单打断逻辑,从触发打断那一句话起向后拼接所有识别结果,触发打断之前的独立语句将会被忽略。如果此时前一句话识别完成,后一句话未完成,未完成句子的直接丢弃。
- 当识别过程中触发了黑名单的语句将会被忽略掉。
- 识别结果存在标点符号的将会过滤掉标点符号后再比对。
#
3.5 访问Broker问答接口配置格式如下:
- 其中address为broker问答接口地址
- 其中userId为用户标识,当该参数不为空时,请求broker接口时在qa节点下会带回该字段内容,否则会填入channelid作为userId标识给broker接口。
- 其中qa为需要透传的相关参数,mrcp接口会在该根下拼接
"query":"识别内容"
等字段。例如访问broker时的包体为:
mrcp接口不再校验qa节点下json字段及内容,可方便方案层透传自己的定制化参数
#
3.6 热词节点的使用配置格式1如下:
- 其中
#wordlist
为定义热词标签的引用 <rule id="wordlist">
为实际定义的热词标签,每一个<item>
表示一个热词
配置格式2如下:
- 其中
abcdefg
应该通过平台HTTP接口预先创建,确保mrcp调用前已经存在 userwordid
的优先级高于配置1中的userword
词表
#
3.7 识别结果回调配置识别结果回调
- 其中
tag
标签用于区分不同厂家的post格式 - 节点内容为回调接口地址
- 配置文件
aicp_asr_mrcp.toml
中设置对应生成格式脚本例如:intermediate_result_post_process=../script/guangda_result_post_process.lua
#
4. 版本记录接口版本 | 平台支持版本 | 组件及支持版本 | 修改内容 |
---|---|---|---|
10.0.0 | 10C.1 | aicp_asr_mrcp 10.6.0 | 适配中兴ivr识别流程 |
10.0.0 | 10C.0 | aicp_asr_mrcp 10.5.0 | 监控接口修改 |
10.0.0 | 10B.3 | aicp_asr_mrcp 10.4.0 | 放开对broker的json格式限制 |
10.0.0 | 10B.2 | aicp_asr_mrcp 10.3.0 | 新增tag标签适配网关查找 redis支持哨兵密码 |
10.0.0 | 10B.1 | aicp_asr_mrcp 10.2.0 | 支持toml配置 |
10.0.0 | 10A.2 | aicp_asr_mrcp 10.0.0 | 初始版本 |