分析Google、讯飞、百度、阿里、QQ、搜狗等大厂的ASR服务,可以罗列出一款ASR服务所需要具备的能力。

产品分类

ASR云服务产品,从用户体验、时效性、音频时长,可以划分为如下几类:

  • 实时短音频转写,可以用于支撑输入法、搜索、导航等场景。
  • 实时长音频转写,可以用于支撑视频字幕、图文直播、会议直播等场景。
  • 文件短音频转写,或者一句话语音识别,可以用于支撑输入法、搜索、导航等场景。
  • 文件长音频转写,或者录音文件转写,可以用于支撑视频字幕、会议记录等场景。

产品特性

从特性上讲,一款ASR产品,在语音识别的过程,可划分为前、中、后,三个阶段,相关的特性可依据不同阶段的特点进行划分,如下是简单的说明。

前处理

在对音频进行识别前,做一些必要的准备工作,增强算法引擎的适应场景,同时减轻算法引擎的负担。

  • 多音频格式的支持

    默认情况下,算法引擎只能处理PCM格式的音频,而前端输入的音频格式多种多样,比如mp3、aac(m4a)、wma、opus等。为了处理多种多样的音频编码,增强算法引擎的适应性,增加使用场景,因此需要将输入的音频数据,转码为算法引擎支持的PCM格式。
  • 重采样

    当前主流的训练数据,采样率以16K、位深以16B居多,因此通过训练得到的引擎,只能处理采样率为前述指标的输入数据。

    输入的音频数据,采样率从8K~48K,位深以8B~24B,范围比较大,不一定能完美匹配算法引擎的要求,因此在将音频数据传递至算法引擎时,需要对音频数据进行重采样,将采样率和位深调整至算法引擎可支持的标准。
  • 多声道的处理

    对于某些特定场景下录制的音频,比如从视频中提取的音频,从会场、公开课等场景收集到的音频数据,由于录制设备存在多个源,因此天然存在多个音频channel。在将数据传递至算法引擎前,需要将多个channel的数据提取出来,分别送给算法引擎,这样才能满足识别的要求。
  • 降噪和去回声

    一般情况下,在录制设备端做这两项工作,效果、效率均有保障。

    在软件层面同样可以实施这项工作,但对处理算法的要求比较高,投入的精力较大,可能影响识别的整体工作投入。

中处理

语音识别的主要工作汇集在本阶段。

  • 语音识别

    对输入的PCM格式的音频进行处理,输出文本。本阶段针对不同的训练算法和推断框架,可能会有不同的划分。对于传统的声学模型和语言模型配合的方案,可能包含:

    • 声学特征提取,从输入的音频中按照一定的算法。
    • 将特征转换为音素的序列。
    • 使用语言发音词典,将音素的序列划分为音素的组合。
    • 语言模型,音素的组合,转换为汉字,并选择最有可能的字的序列。
  • 热词

    在特定场景下,通过使用指定的热词,可以有效的改善识别准确率。难处在于,特定的场景下,热词的数量可能会比较多,而算法引擎未必能支撑那么多。
  • 文本的时间偏移

    输出文本的同时,在字、词、句的粒度,输出开始、结束的时间偏移值。
  • 讲话人识别

    依据音频中不同讲话人的声纹特征,对音频中出现的讲话人,打上不同的标签,便于后处理环境做进一步的分析和处理,以支撑特定业务。

后处理

通常而言,狭义的语音识别不包括本阶段的工作。本阶段的工作,主要目的在于将算法引擎的输出结果,还原为对人而言具备良好可读性的文本。

  • 分词

    对于英语、法语等拉丁语系的拼音类文字,单词之间以空格分隔,这一点和中文(普通话)有非常大的不同。
  • 断句

    多数人在讲话时,不同的句子之间会使用暂停来断句。算法引擎在识别时,可以借助这个特点,对识别结果加上特征标签,便于后续处理。
  • 标点符号

    标点符号的形式和语种存在关联。

    以中文(普通话)为例,书面表达时有逗号(,)、句号(。)、问号(。)、感叹号(!)等标点符号;同样的,英语、法语等拉丁语系的拼音类文字,同样存在类似的标点符号,如逗号(!)、句号(!)、问号(!)、感叹号(!)。因此在输出识别结果时,需要专门做特殊的处理。

    针对本问题,目前了解到的解决方法有:

    • 训练一个语言模型,将标点符号一同作为特征输入到训练算法中,进而得到一个模型,可以针对输入的文本,进行断句和加标点。

      本方法在难点在于需要大量的标记数据用于训练,以及选择恰当的训练算法,进而得到有效的模型。

      另外,训练语言模型时,大量可用的语料基本为书面表达用语,因此训练得到的模型适应书面表达方式。而语音识别的输入为口语,表达方式非常灵活,因此在断句、标点时,实际效果和预期存在一定的差距。
    • 针对不同标点符号,人讲话时的停顿时长存在一定的差异。基于这个假设,可以为不同的标点符号指定停顿时长的范围,同时要求算法引擎在输出识别结果时,同步输出字、词之间的停顿时长,然后依据前述规则,将停顿时长匹配不同的标点符号。

      本方法的问题在于,只能适配简单的标点,比如逗号、句号。此外,不同讲话人的语速不同,而且在同一段录音内,讲话人的语速有可能是变化的。因此本方法的使用场景相对比较受限。但不失为一个简单、可用的方法。
  • 大、小写

    对于英语、法语等拉丁语系的拼音类文字,相同单词、不同大小写,意义可能不同,因此需要基于语言特征,对单词的大小写进行修复。

    这一点和中文(普通话)也不同。

    针对本问题,目前了解到的解决方法有:

    • 训练一个语言模型,用模型来实现大、小写的识别。本方法在难点在于需要大量的标记数据用于训练,以及选择恰当的训练算法,进而得到有效的模型。
    • 基于规则,利用前述断句和标点符号环节提供的信息,方法如下。
      • 对于句首的单词,首字母大写。
      • 利用关键字的信息,针对指定单词的大、小写的处理。

        本方案的问题在于,语言的特殊用法非常多,只能针对给定的业务场景做处理,对于通用场景,则由于投入过大、回报过低。
  • 数字归一

    数字在人类生活中无处不在,应用场景非常多。数字归一的目的是将算法引擎输出的文本中的数字,转换为原始文本中的阿拉伯数字。

    以中文(普通话)为例,假设原始文本为2019年,一般的讲法为二零一九年,算法引擎正常时,识别的原始结果为二零一九年,归一化之后,应当修正为2019年。

    不同语种,在数字的习惯表达法上各有特点。从大类上讲,一般可以划分为如下几类:

    • 连续数字,对应电话号码、社保号码等。
    • 车牌号码、火车车次、飞机航班编号等。
    • 计算机类用语,比如IP地址、邮箱地址、URL地址等。
    • 带有量词的数字。
    • 数学公式、物理公式。
    • 日期、时间。

      不同的语言有各自特殊的表达方式。比如1:58,英语里可以表达为two to two,算法引擎和后处理均需要对这种情况做特殊的处理,否则归一化无法正常工作,得不出正确的结果。
    • 习惯表达法。

      比如2000,一般的读法为两千,少有人会读为二千,但对应的阿拉伯数字均为2000。

      又比如1800,多数人的讲法为一千八,少部分人会读为一千八百,但归一化后的结果都应为1800。
    • 特殊场景。

      以中文为例,成语、诗句、年号、歇后语、俗语等中存在大量的数字,而这部分数字,一般不应转写为阿拉伯数字。
  • 语速检测

    类似于输入法提供的输入速度的检测,输出一段时间内,讲话的平均语速。

    语速和语种、讲话人强相关。比如对于使用中文(普通话)的人群来说,每秒钟一般2~4个字。
  • 情绪检测

    在特定场景下,需要从音频中提取到讲话人的情绪的特征。

    人的情绪,分类方法有很多种,因此这个判定主观性很强,一般从使用场景出发,对识别结果进行判别。

NLP

通常的语音识别产品一般不包含本阶段。

  • 敏感词
  • 基于语义的校正
    • 标点符号
    • 大、小写
    • 数字归一
    • 文本
  • 语义识别

    将人的语音,转换为某种设备的行为,比如智能音箱的开机、关机、播放等。
  • 情绪检测

    结合语言、语速等信息,

评价指标

评价ASR云服务准确率的指标,比如

  • 字错率,WER
  • 句错率,SER

处理时延

  • 对于实时语音识别,可细化为

    • 首字时延。
    • 蹦字时延,包括平均值,最大值,方差等。
    • 尾字时延。
  • 对于文件转写,可细化为实时率,即处理时长/音频时长 * 100%

单路请求场景下的指标,比如

  • 处理时延
  • 硬件资源占用情况,比如
    • CPU占用率
    • 内存占用率

      在一定的并发场景下,考核
  • 处理时延
  • 并发路数
  • 硬件资源占用情况,比如
    • CPU占用率
    • 内存占用率

准确率的指标

本指标通常用于对ASR的模型进行评估。

常用指标为WER,包括插入错误、删除错误、多字错误,指标值的计算方法为三类错误数量总和与字数的比值。从定义可知,本指标可能会超出100%,此时的语音识别系统完全不具备可用性。

业界也有场景可能会使用到SER,原理类似。

WER是一个相对的指标,和测试集强相关。当测试集和训练集同分布,则指标会比较好看;当测试集和训练集的特征有差距时,则指标可能会让人很失望。

在项目实战时,可以依据通用场景、特定领域场景来分别构建测试集合,进而对ASR模型进行打分。

衡量一个语音识别系统是否具备商用的条件,通常可以使用如下指标值来度量:

  • 通用测试集,WER小于10%。
  • 特定领域测试集,WER小于5%。
  • 客户给定的测试集,WER小于2%。

处理时延

对于实时音频识别,目前业界通常基于流式通信协议如websocket来实现客户端和云服务端之间的全双工通信。在客户角度观察,可以计算的指标有首字时延、蹦字时延、尾字时延。

  • 首字时延,计算方法为第一个响应的时间点和第一个数据请求的时间点,二者之间的时间差。
  • 蹦字时延,计算方法为两次响应之间的时间差,求平均值、最大值和方差。
  • 尾字时延,计算方法为最后一个响应的时间点和最后一个数据请求的时间点,二者之间的时间差。

注意:

  • 前述计算方法仅供参考,不同的项目、不同的测试集,可能要求会有不同。
  • 使用流式通信协议传输数据时,不同的数据分片大小,网络RTT时间,均可能对前述指标值产生影响。
  • 为便于分析产品的业务体验,同时制订合理的配置参数,需要在客户端和云服务端同时计算上述指标。

对于音频文件转写的场景,上述指标并不重要,一个名为实时率或者转写比的指标更加重要。

  • 实时率,计算方法为转写音频文件花费的时间和音频文件总时长之间的比值。

并发能力

由于音频数据的识别需要花费时间,因而传统业务的TPS指标并不适合此类场景,因此需要定义单独指标用于说明ASR云服务产品的并发能力,即并发路数,表示同一时间点,允许同时活动的会话的数量。

一般而言,本参数对于给定的单台比较有意义,不同的模型和推断框架,在不同的硬件之上得到的数据,没有可比性。

硬件资源

在给定的硬件设备上,CPU、内存、总线、IO等能力已固化,在给定的压力下,可以验证ASR云服务、推断框架、模型在负载场景下,占用的CPU使用量、内存使用量,进而选取一个合适压力值,构建能力基线值,指导生产环境部署,以及后续的性能优化。

需要说明的是,本分类下的指标,在实际验证时,和测试集也有相关性。因而不同测试集下给出的测试结果,只具有参考意义,没有可比性。

本指标和成本相关,因此在工程实践角度,需要花费大量的时间对云服务、推断框架、模型进行打磨,持续优化,改善硬件的占用规模。

ASR项目实战-产品分析的更多相关文章

  1. Asp.Net Core 项目实战之权限管理系统(4) 依赖注入、仓储、服务的多项目分层实现

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  2. 给缺少Python项目实战经验的人

    我们在学习过程中最容易犯的一个错误就是:看的多动手的少,特别是对于一些项目的开发学习就更少了! 没有一个完整的项目开发过程,是不会对整个开发流程以及理论知识有牢固的认知的,对于怎样将所学的理论知识应用 ...

  3. 【腾讯Bugly干货分享】React Native项目实战总结

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/577e16a7640ad7b4682c64a7 “8小时内拼工作,8小时外拼成长 ...

  4. Asp.Net Core 项目实战之权限管理系统(0) 无中生有

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  5. Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  6. Asp.Net Core 项目实战之权限管理系统(2) 功能及实体设计

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  7. Asp.Net Core 项目实战之权限管理系统(3) 通过EntityFramework Core使用PostgreSQL

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  8. Asp.Net Core 项目实战之权限管理系统(5) 用户登录

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  9. Asp.Net Core 项目实战之权限管理系统(6) 功能管理

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  10. Asp.Net Core 项目实战之权限管理系统(7) 组织机构、角色、用户权限

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

随机推荐

  1. 用 Rust 的 declarative macro 做了个小东西

    最近几天在弄 ddnspod 的时候,写了个宏: custom_meta_struct 解决什么问题 #[derive(Debug, Clone, serde::Serialize, serde::D ...

  2. Solution -「CF 1096E」The Top Scorer

    Description Link. 小明在打比赛,包括小明自己一共有 \(p\) 名选手参赛,每个人的得分是一个非负整数.最后的冠军是得分最高的人,如果得分最高的人有多个,就等概率从这些人中选一个当冠 ...

  3. 在线问诊 Python、FastAPI、Neo4j — 创建 饮食节点

    目录 饮食数据 创建节点 根据疾病.症状,判断出哪些饮食不能吃,哪些建议多吃 饮食数据 foods_data.csv 建议值用""引起来.避免中间有,号造成误识别 饮食 " ...

  4. DB2复制表结构及数据

    在DB2数据库中,复制已经存在的表的结构及其数据.我们采用两步走方式:第一步先复制表结构,第二部拷贝数据. 第一步:复制表结构 方法一: Create table test_Rate as (sele ...

  5. Python来源介绍

    python来源 1.1 Python来源 1989年的圣诞节,一位来自荷兰,名叫Guidio van Rossum的年轻帅小伙子,为了打发无趣的时光,决定改善他参与设计,不是很满意的ABC语言,随着 ...

  6. Noi-Linux 2.0 装机+使用整合

    写在前面 网上的东西比较多,也比较杂乱,不是很方便,所以我整合了一些关于 Noi-Linux2.0 虚拟机装机方法+代码编辑环境+实地编程的介绍,看完至少能用起来打代码了. NOI 官网公告(JS 开 ...

  7. GPL协议原文及中文翻译

    GPL协议原文及中文翻译 原文参考链接 翻译参考链接 原文 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 19 ...

  8. 用结构化思维解一切BUG(1):核心思路

    面对万"卷"世界,有人选择拼命学习新技术,解决眼前的.点状问题:有人提升思维层级,解决未来的.系统问题.您选择什么? 背景 我有10多年编程经验和研发管理经历,虽很久不写代码,但有 ...

  9. 我整理了一份Flink流计算入门教程清单(转)

    好久不见! 作为技术出身的我,不太会写软文广告,今天就直接来个硬广.之前与人民邮电出版社合作的<Flink原理与实践>经过一年多时间的打磨和润色,这两天终于与大家见面了,恳请各位朋友多多支 ...

  10. re1-100

    虽然关键的判断函数和"成功"的提示也在这里,但是具体对输入flag的操作却在后面 看到对数组bufParentRead[1]开始赋值"53fc275d81",b ...