58同城流式语音识别引擎实践

如果无法正常显示,请先停止浏览器的去广告插件。
分享至:
1.
2. 58同城流式语音识别引擎实践 王焱 58同城 欢迎关注58技术公众号 欢迎关注 58AILab 公众号
3. 目录 • 背景 • 流式识别引擎的总体架构 • 流式识别服务 • 优化实践
4. 58同城生活服务平台 浏览帖子 C端用户 58平 台 发布帖子 (房源、职位…) 人工销售、客服 B端商家 机器人销售、客服 客户 房产中介 企业 二手车商 搬家公司 …
5. 流式语音识别引擎背景
6. 应用场景举例 招聘机器人 用户 你好,请问你叫什么名字 你好,我叫张三 有没有做过xxx的职位? 之前做过 请问做了多久呢? 外呼机器人 用户 你好,能为您做个问卷回访吗? 可以 您对我们提供的xxx服务满意吗? 还可以 您认为我们有什么需要改进的? 已经很好了 感谢您的回答,祝您生活愉快 再见 有2年的经验 流式语音识别
7. 语音识别技术概览 • 声音的处理流程 发声 声音采集 模拟信号 数字信号 100101 音频文件
8. 语音识别技术概览 • 语音识别的总体流程
9. 语音识别技术概览 • 训练过程 字: 发音词典 你 好 哪 位 语言模型: f(音素) = 字 音素: ei4 声学特征 (按帧): 音频: n i3 h ao2 n a3 w 声学模型: f(帧特征) = 音素状态
10. 语音识别技术概览 l 预测(识别)过程 识别结果: 你 好 哪 语音解码器 语言模型: f(音素) = 字 声学模型: 声学特征 (按帧): 音频: f(帧特征) = 音素状态 位 发音词典
11. 流式语音识别引擎整体架构 IOS/Android/Java SDK 接入层 实时语音服务 逻辑层 语 音 标 注 系 统 语音接入服务 ABTest 服务 静音检测服务 实时语音解码服务 WPAI 人工 智能 平台 Kaldi 数据层 Hive Mysql WTable WOS Redis
12. 流式语音识别整体流程 • 实时语音识别 鉴权 语音数据流 实时语音解码 限流 解码器 VAD 人声检测 你好 你好请问 中间 结果 你好请问房子租出去了吗 后处理 你好,请问房子租出去了吗? 你好请问房子 最终 结果 你好请问房子租出去了吗
13. 流式语音识别请求过程 0 SDK 1 … 语音接入服务 语音接入服务 5 ABTest 2 3 … ABTest 静音 检测 4 … 静音 检测 实时 解码 … 实时 解码 后处理 服务 … 后处理 服务
14. 流式语音识别sdk和服务的交互 Client Server 握手鉴权 鉴权请求 鉴权成功 握手 连接建立 识别开始 识别开始 OnStarted 识别中 音频流 OnChanged 音频流 OnChanged 识别结束 音频发送结束 OnComplete d 连接关闭 你好,请问房子租出去了吗? 识别结束 最终 结果
15. 客户端SDK • websocket连接 • 处理事件、回调 connect NioSocketChannel connect reactor connect rea d rea d rea d 事件 状态 识别开始 (OnStarted) 0 识别中间结果 (OnChaned) 1 识别结束 (OnCompleted) 2 识别失败 (OnFailed) -1 回调函数 write write write 数据发送
16. 语音接入服务 • 鉴权 • 限流 client • 事件生成 Sub Reactor Main Reactor client • 数据流交互 client Acceptor rea d rea d rea d write write write 事件 状态 识别开始 (OnStarted) 0 识别中间结果 (OnChaned) 1 识别结束 (OnCompleted) 2 识别失败 (OnFailed) -1 负载 均衡 转写回送 音频流解码 实时解码服务 服务地 址池
17. 实时解码器 • 处理音频(流)块数据 • 获取部分转写结果 模型初始化 声学模型 解码器 HCLG解码图 chunk1 实时解码 二进制转换音频特征 chunk2 输入到网络 Decoder 搜索当前最佳路径 转为文字输出 chunk1 -> text1 text1 chunk2 -> text2 text2
18. 实时语音解码服务的设计 实时语音解码服务 加载模型 加载配置 音频流 语 言 模 型 声 学 模 型 模 型 配 置 服 务 配 置 加载解码器 decoder 解码 器同 步队 列 音频 特征 转换 实 时 解 码 转写 结果 线上 Kaldi格式 数据处理 标注 数据 Kaldi C++库 扩展库 训练 数据 模型训练 声学模型 模型文件 语言模型 配置文件 离线 环境 HMM OpenFST GMM Decoder BLAS Matrix Utils CUDA
19. 系统的高可用 0 SDK 1 … 语音接入服务 语音接入服务 1. 2. 3. 4. 5. 6. 水平层次上无状态、水平扩容 服务限流 业务隔离、资源隔离 故障检测、流量切换 超时降级、失败重试 多方位监控和告警 5 ABTest 2 3 … ABTest 静音 检测 4 … 静音 检测 实时 解码 … 实时 解码 后处理 服务 … 后处理 服务
20. 解码并发数与耗时优化 问题:解码并发数增加,耗时线性增加 解决方案: 优化beam参数 优化内存 并发数与耗时的关系 效果: 解码并发数和耗时解耦 并发数与耗时的关系
21. 解码中间转写结果耗时优化 问题:开启获取中间结果开关后,导致下一帧解码耗时累积增加 解决方案: 优化从Lattice选取路径的逻辑 效果: 一次发送时长与耗时的关系 • 打开获取中间结果的开关,不影响下一帧的解码耗时 • 每次发送100ms音频,平均耗时104ms->18ms 一次发送时长与耗时的关系
22. 服务和客户端优化 • 优化客户端sdk耗时 l 优化服务端GC,降低耗时 问题:客户端平均耗时比服务端耗时高300ms+ 问题:服务端TP99耗时较高 解决方案: 解决方案: l 线程阻塞,去除SDK中的不必要的日志打印 效果: l l 优雅的关闭连接,消除异常 FIN FIN_WAIT1 ACK 效果: 正常四次挥手结束 解决服务丢包、延迟包问题 ESTABLISHED 解决方案: l nginx收发包问题,临时使用VIP直连后端集群方案 FIN ACK TIME_WAIT (2MSL) CLOSED GC优化前后耗时对比 问题:服务端收不到、延迟收到调用方发送的数据帧 ESTABLISHED FIN_WAIT2 服务端TP99耗时降低300ms+ 被动 CLOSE_WAIT l 调整jvm参数 l 主动 发送FIN帧关闭连接 l l 问题:客户端close后,服务端出现异常 l 优化数据库取数逻辑,降低引用的回收数目 效果: 客户端平均耗时接近服务端平均耗时 解决方案: l LAST_ACK CLOSED 效果: l 问题解决,无异常
23. 欢迎关注58AILab 开源项目: Ø 《开源 | qa_match:一款基于深度学习的问答匹配工具》 https://github.com/wuba/qa_match Ø 《开源|dl_inference:通用深度学习推理服务》 https://github.com/wuba/dl_inference 相关文章: 58AILab 公众号 Ø Ø Ø Ø Ø 《58同城语音识别技术探索和实践》 《深度学习在单声道录音中的说话人角色识别优化实践》 《人机语音对话技术在58同城的应用实践》 《语音识别中Chain Model的原理和实践》 《智能语音机器人中VAD语音端点检测算法优化实践》 招聘后端、算法人才 欢迎投递:zhankunlin@58.com 微信号:WubaAILab 58技术公众号
24.

Home - Wiki
Copyright © 2011-2024 iteam. Current version is 2.139.0. UTC+08:00, 2024-12-26 13:53
浙ICP备14020137号-1 $Map of visitor$