- 快召唤伙伴们来围观吧
- 微博 QQ QQ空间 贴吧
- 视频嵌入链接 文档嵌入链接
- 复制
- 微信扫一扫分享
- 已成功复制到剪贴板
语音识别引擎后端架构设计
- 背景
- 语音识别引擎整体架构
- 语音文件转写服务
- 实时语音识别服务
- 问题及优化实践
展开查看详情
1 . 社 cn 区 能 g. 智 cu 工 i .a 语音识别引擎后端架构设计 G人ww 王焱 CU w 58同城-TEG-AI Lab AI 欢迎关注AICUG人工智能技术社区 欢迎关注 58AILab 公众号 欢迎关注58技术公众号 (www.aicug.cn)
2 .个人简介 社 cn 区 l 王焱,58同城AI Lab后端架构师,2017年2月加入58同城,目前主要负责 能 g. 语音识别引擎后端架构设计和开发工作,曾先后负责过推荐系统、智能语音 智 cu 机器人系统的后端架构与开发工作。2012年硕士毕业于华北计算机系统工程 工 i 研究所,曾就职于Thomson Reuters、H3C等。 .a G人ww CU w l 联系方式:wangyan45@58.com AI
3 .目录 社 cn 区 l 背景 能 g. 智 cu l 语音识别引擎整体架构 工 i .a l 语音文件转写服务G人ww l 实时语音识别服务 CU w l 问题及优化实践 AI
4 . 58同城生活服务平台 社 cn 区 能 g. 发布帖子 销售 浏览帖子 (房源、职位…) (电销、直销) 客户 智 cu 房产中介 C端用户 58平台 B端商家 企业 二手车商 工 i 客服 搬家公司 .a … G人ww CU w AI
5 .语音沟通场景 社 cn 区 • 58同城呼叫中心 能 g. • 电话销售 智 cu • 电话客服 呼叫中心 工 i • 支撑数千名销售、客服人员工作 .a • 年通话数 1亿+,通话时长数百万小时 G人ww CU w AI
6 .语音沟通场景 社 cn 区 l C端用户和B端用户 能 g. 隐私通话 智 cu l 工 i 微聊语音 .a l l VR带看 G人ww CU w AI
7 .AI CU w G人ww .a 语音识别引擎背景 工 i 智 cu 能 g. 社 cn 区
8 .AI CU w G人ww .a 语音识别引擎背景 工 i 智 cu 能 g. 社 cn 区
9 .语音识别技术概览 社 cn 区 l 声音的处理流程 能 g. 智 cu 工 i 发声 声音采集 模拟信号 数字信号 音频文件 .a G人ww 100101 CU w AI
10 . l AI CU w G人ww 语音识别的总体流程 .a 语音识别技术概览 工 i 智 cu 能 g. 社 cn 区
11 .语音识别技术概览 社 cn 训练过程 发音词典 区 l 能 g. 字: 你 好 哪 位 智 cu 语言模型: f(音素) = 字 工 i 音素: n i3 h ao2 n a3 w ei4 .a 声学模型: f(帧特征) = 音素状态 G人ww 声学特征 CU w (按帧): 音频: AI
12 .语音识别技术概览 社 cn 预测(识别)过程 区 l 识别结果: 你 好 哪 位 能 g. 智 cu 语音解码器 发音词典 工 i .a 语言模型: f(音素) = 字 声学模型: G人ww f(帧特征) = 音素状态 CU w 声学特征 (按帧): AI 音频:
13 .语音识别引擎整体架构 社 cn 区 HTTP API RPC SDK 能 g. 接入层 智 cu 语音文件转写服务 实时语音服务 语 工 i 音 WPAI 预处理服务 .a ABTest 语音接入服务 标 人工 逻辑层 服务 语音解析服务 注 智能 G人ww 语音解码服务 实时语音解码服务 系 平台 统 CU w Kaldi WTable WOS Redis AI 数据层 Hive Mysql
14 .语音标注系统 社 cn Tornado +wavsufer.js实现 区 l 能 g. l 功能:语音标注、质检、权限管理、数据统计 智 cu 工 i .a 语音数据 抽取下载 处理导入 标注质检 G人ww CU w 声学模型 语言模型 AI 词典挖掘
15 .语音文件转写服务的接入形式 社 cn 区 l 回调 能 g. 智 cu 异步提交(回调地址) HTTP 语音识别引擎 工 i Server 转写结果 .a G人ww CU w l 轮询 提交任务 任务ID Client 获取转写结果 语音识别引擎 AI 获取转写结果 拿到结果了
16 .语音文件转写整体流程 社 cn 录音文件识别 区 l 能 g. 预处理 音频处理 智 cu 检查 音频转换 左右声道 VAD 分离 人声检测 语音片段1 工 i 采样率 .a 录音文件 监控 转换 双声道 语音片段2 备份 G人ww声道判断 说话人分离 单声道 CU w 语音解码 啊你好那个我… NLP 后处理 AI 请问租出去了吗 解码器
17 . 语音文件转写服务调用关系 社 cn 语音文件转写服务 区 能 g. RPC调用 预处理服务 ABTest Client 智 cu 提交结果返回 服务 工 i 分布式消息队列 .a Client G人ww 返回转写结果 语音解析服务 WPAI HTTP Server 服务 CU w 静音检 批量解码 测、说 话人分 l 同步 vs 异步 语音解码服务 离服务 AI l 消息队列
18 .预处理服务 社 cn 区 能 g. 智 cu 检查 工 i 时长监控 备份 分发 .a 合法性检查 G人ww 音频时长 备份散列队列 消息队列 音频有效性检查 滑动监控 CU w 回调有效性检查 AI
19 . 音频处理服务的设计 社 cn 招聘 队列1 区 销售 能 g. 队列2 消息拉取 智 cu 黄页 客服 规则 片段1 文本1 工 i …… .a 队列N 租房隐 音频下载 片段2 解码服务 文本2 私通话 G人ww …… …… CU w 音频转换 文本N 片段N 双声道? 声道分离 音频:文本 AI 说话人 VAD人声 HTTP Server 分离 检测
20 .预处理和音频处理服务特点 社 cn 消息可靠性 消息备份散列队列,防止 l 并行处理降低耗时 区 l 消息丢失 能 g. 请求 原方案: 生成唯一id • 音频处理串行处理 音频下载 智 cu 队 队 队 备份 列 列 列 新方案: 备份散列队 散列 1 2 9 • 音频处理多个环节改为并行处理 音频转换 工 i 列 …… .a 带时间戳的消息 • 音频处理耗时降低到原耗时的5% VAD人声检测 G人ww 根据时间戳清空队列 CU w l 系统可用性 各个业务线音频时长实时 l 业务隔离 请求 监控和限流 WMB消息队列区分不同业务 音频时长 初始化 场景 招聘 时长监控 销售 当前时间更新 • 避免相互影响 AI 音频时长 本地缓存 Redis • 灵活配置 黄页 滑动监控 缓存1440个kv值 消息分发 客服 获取最近10个kv 每小时刷新一次 值 …… 房产 时长是否超限 销售
21 .语音解码流程 社 cn l 解码:输入音频,在训练好的模型中生成最优序列的过程 区 能 g. l 语音解码流程 智 cu 特征提取 (MFCC/FBank) 工 i .a 声学模型 (P(W|X)) G人ww 语音片段 识别结果 语言模型 CU w (P(W)) 发音词典 AI Lattice
22 . 语音解码器的选型 社 cn 选择的解码器 区 l 能 g. l CPU解码器:nnet3-latgen-faster-parallel nnet3支持多gpu训练和更多的网络扩展,并行处理,解码效率较好 智 cu l l GPU解码器: batched-wav-nnet3-cuda 工 i 基于nnet3,NVIDIA cuda支持,解码效率较好 .a l nnet3-latgen-faster-parallel G人ww 支持cpu并行处理 CPU解码 CU w online2-wav-nnet3-latgen-faster nnet3 支持cpu并行处理,在线解 (在nnet2上支持更多网络模型) 码 gmm nnet3-latgen-faster-batch (传统的实现方式) GPU/CUDA 解码效率不高,特征和网络计 AI 解码 算在cpu上进行 nnet1 (仅支持gpu单卡训练) batched-wav-nnet3-cuda nnet2 解码效率较好,特征和网络计 算在gpu上进行 (支持gpu多卡,cpu多线程)
23 . 语音转写解码服务的设计 社 cn 区 模型初始化 能 g. l 解码器吞吐量 vs 解码耗时 声学模型 资源负载情况 vs 资源利用率 智 cu 解码器 l HCLG解码图 工 i .a 解码 G人ww CPU计算 CPU计算 初始化状态,找到解码图起点 CU w 音频 输出 转换特征 音频转换 特征帧,搜索到下一跳的全部路径 输入网络 GPU 计算 结束解码,保留几条最优路径 AI • 待解码音频数目 • 最大解码等待时长 CPU 选最优路径,输出文字 计算
24 .实时语音转写整体流程 社 cn 实时语音识别 区 l 能 g. 语音数据流 鉴权 实时语音解码 智 cu 限流 解码器 工 i .a VAD 人声检测 G人ww CU w 你好 你好请问 中间 结果 你好请问房子 AI 你好请问房子租出去了吗 后处理 最终 你好请问房子租出去了吗 你好,请问房子租出去了吗? 结果
25 .实时语音识别服务调用关系 社 cn 语音文件转写服务 区 握手和鉴权 能 g. 握手成功 ABTest Client 音频流 智 cu 服务 (SDK) 实时转写结果 语音接入服务 音频流 工 i 实时转写结果 .a WPAI 服务 G人ww 流式RPC调用 CU w 后处理 服务 实时语音解码服务 AI
26 .实时语音识别交互过程 社 cn Client Server 区 能 g. 握手鉴权 鉴权请求 智 cu 鉴权成功 握手 工 i 连接建立 .a 识别开始 G人ww 识别开始 OnStarted CU w 识别中 音频流 OnChanged 音频流 OnChanged AI 识别结束 音频发送结束 OnCompleted 连接关闭 识别结束
27 .客户端SDK(Java) 社 cn websocket连接 区 l 能 g. l 处理事件、回调 NioSocketChannel connect 智 cu connect reactor 工 i connect .a read write G人ww read write CU w read write 事件 状态 识别开始 (OnStarted) 0 识别中间结果 (OnChaned) 1 回调函数 数据发送 AI 识别结束 (OnCompleted) 2 识别失败 (OnFailed) -1
28 . 语音接入服务 社 cn 区 l 鉴权 能 g. client l 限流 Main Sub 智 cu client l 事件生成 Reactor Reactor 工 i client .a l 数据流交互 Acceptor write read G人ww write read read CU w write 事件 状态 负载 识别开始 (OnStarted) 0 均衡 服务地 转写回送 音频流解码 识别中间结果 (OnChaned) 1 址池 识别结束 (OnCompleted) 2 AI 识别失败 (OnFailed) -1 实时解码服务
29 .实时解码器 社 cn 处理音频(流)块数据 区 l 能 g. l 获取部分转写结果 智 cu chunk1 chunk1 -> text1 实时解码 工 i 二进制转换音频特征 text1 .a chunk2 G人ww 输入到网络 chunk2 -> text2 Decoder text2 搜索当前最佳路径 CU w 转为文字输出 AI