按关键词阅读:
导语:语音识别已经走进了大家的日常生活中 , 我们的手机、汽车、智能音箱均能对我们的语音进行识别 。 那么什么是语音识别呢?它又能应用于哪里?该如何对其进行与维护呢?本文为我们进行了详细地介绍 。
文章图片
现在人机语音交互已经成为我们日常生活的一部分 , 语音交互更自然 , 大大的提高了效率 。 上一篇文章我们聊了语音唤醒 , 这次我们继续聊聊语音交互的关键步骤之一—语音识别 。
一、什么是语音识别
文字绝对算是人类最伟大的发明之一 , 正是因为有了文字 , 人类的文明成果才得以延续 。
但是文字只是记录方式 , 人类一直都是依靠声音进行交流 。 所以人脑是可以直接处理音频信息的 , 就像你每次听到别人和你说话的时候 , 你就会很自然地理解 , 不用先把内容转变成文字再理解 。
而机器目前只能做到先把音频转变成文字 , 再按照字面意思理解 。
语音识别技术(Automatic Speech Recognition)是一种将人的语音转换为文本的技术 。
概念理解起来很简单 , 但整个过程还是非常复杂的 。 正是由于复杂 , 对算力的消耗比较大 , 一般我们都将语音识别模型放在云端去处理 。
这也就是我们常见的 , 不联网无法使用的原因 , 当然也有在本地识别的案列 , 像输入法就有本地语音识别的包 。
二、语音识别的应用
语音识别的应用非常广泛 , 常见的有语音交互、语音输入 。 随着技术的逐渐成熟和5G的普及 , 未来的应用范围只会更大 。
语音识别技术的应用往往按照应用场景进行划分 , 会有私人场景、车载场景、儿童场景、家庭场景等 , 不同场景的产品形态会有所不同 , 但是底层的技术都是一样的 。
1. 私人场景
私人场景常见的是手机助手、语音输入法等 , 主要依赖于我们常用的设备—手机 。
如果你的手机内置手机助手 , 你可以方便快捷的实现设定闹钟 , 打开应用等 , 大大的提高了效率 。 语音输入法也有非常明显的优势 , 相较于键盘输入 , 提高了输入的效率 , 每分钟可以输入300字左右 。
2. 车载场景
车载场景的语音助手是未来的趋势 , 现在国产电动车基本上都有语音助手 , 可以高效的实现对车内一些设施的控制 , 比如调低座椅、打开空调、播放音乐等 。
开车是需要高度集中注意力的事情 , 眼睛和手会被占用 , 这个时候使用语音交互往往会有更好的效果 。
3. 儿童场景
语音识别在儿童场景的应用也很多 , 因为儿童对于新鲜事物的接受能力很高 , 能够接受现在技术的不成熟 。 常见的儿童学习软件中的跟读功能 , 识别孩子发音是否准确 , 这就应用的是语音识别能力 。
还有一些可以语音交互的玩具 , 也有ASR识别的部分 。
4. 家庭场景
家庭场景最常见的就是智能音箱和智能电视了 , 我们通过智能音箱 , 可以语音控制家里面的所有电器的开关和状态;通过语音控制电视切换节目 , 搜索我们想要观看的内容 。
三、语音识别详解
整个从语音识别的过程 , 先从本地获取音频 , 传到云端 , 最后识别出文本 , 就是一个声学信号转换成文本信息的过程 。 整个识别的过程如下图:
文章图片
1. VAD技术
在开始语音识别之前 , 有时需要把首尾端的静音切除 , 降低对后续步骤造成干扰 , 这个切除静音的炒作一般称为VAD 。
这个步骤一般是在本地完成的 , 这部分需要用到信号处理的一些技术 。分页标题#e#
VAD(Voice Activity Detection)也叫语音激活检测 , 或者静音抑制 。 其目的是检测当前语音信号中是否包含话音信号存在 , 即对输入信号进行判断 , 将话音信号与各种背景噪声信号区分出来 , 分别对两种信号采用不同的处理方法 。
算法方面 , VAD算法主要用了2-3个模型来对语音建模 , 并且分成噪声类、语音类还有静音类 。 目前大多数还是基于信噪算法 , 也有一些基于深度学习(DNN)的模型 。
一般在产品设计的时候 , 会固定一个VAD截断的时间 , 但面对不同的应用场景 , 可能会要求这个时间是可以自定义的 , 主要是用来控制多长时间没有声音进行截断 。
比如小孩子说话会比较慢 , 常常会留尾音 , 那么我们就需要针对儿童场景 , 设置比较长的VAD截断时间;而就可以相对短一点 , 一般会设置在400ms-1000ms之间 。
2. 本地上传(压缩)
人的声音信息首先要经过麦克风整列收集和处理 , 再把处理好的音频文件传到云端 , 整个语音识别模型才开始工作 。
这里的上传并不是直接把收音到的音频丢到云端 , 而是要进行压缩的 , 主要考虑到音频太小 , 网络等问题 , 会影响整体的响应速度 。 从本地到云端是一个压缩?上传?解压的过程 , 数据才能够到达云端 。
整个上传的过程也是实时的 , 是以数据流的形式进行上传 , 每隔一段时间上传一个包 。
你可以理解为每说一个字 , 就要上传一次 , 这也就对应着我们常常看到的一个字一个字的往屏幕上蹦的效果 。 一般一句“明天天气怎么样?”会上传大约30多个包到云端 。
一般考虑我们大部分设备使用的都是Wi-Fi和4G网络 , 每次上传的包的大小在128个字节的大小 , 整个响应还是非常及时的 。
文章图片
3. 信号处理
这里的信号处理一般指的是降噪 , 有些麦克风阵列本身的降噪算法受限于前端硬件的限制 , 会把一部分降噪的工作放在云端 。
除了降噪以外可能还涉及到数据格式的归一化等 , 当然有些模型可能不需要这些步骤 , 比如自研的语音识别模型 , 只给自己的机器用 , 那么我解压完了就是我想要的格式 。
文章图片
4. 特征提取
特征提取是语音识别关键的一步 , 解压完音频文件后 , 就要先进行特征提取 , 提取出来的特征作为参数 , 为模型计算做准备 。 简单理解就是语音信息的数字化 , 再通过后面的模型对这些数字化信息进行计算 。
特征提取首先要做的是采样 , 前面我们说过音频信息是以数据流的形式存在 , 是连续不断的 , 对连续时间进行离散化处理的过程就是采样率 , 单位是Hz 。
可以理解为从一条连续的曲线上面取点 , 取的点越密集 , 越能还原这条曲线的波动趋势 , 采样率也就越高 。 理论上越高越好 , 但是一般10kHz以下就够用了 , 所以大部分都会采取16kHz的采样率 。
具体提取那些特征 , 这要看模型要识别那些内容 , 一般只是语音转文字的话 , 主要是提取音素;但是想要识别语音中的情绪 , 可能就需要提取响度、音高等参数 。
最常用到的语音特征就是梅尔倒谱系数(Mel-scaleFrequency Cepstral Coefficients , 简称MFCC)是在Mel标度频率域提取出来的倒谱参数 , Mel标度描述了人耳频率的非线性特性 。
分页标题#e#
文章图片
5. 声学模型(AM)
声学模型将声学和发音学的知识进行整合 , 以特征提取模块提取的特征为输入 , 计算音频对应音素之间的概率 。 简单理解就是把从声音中提取出来的特征 , 通过声学模型 , 计算出相应的音素 。
声学模型目前的主流算法是混合高斯模型+隐马尔可夫模型(GMM-HMM)HMM模型对时序信息进行建模 , 在给定HMM的一个状态后 , GMM对属于该状态的语音特征向量的概率分布进行建模 。
现在也有基于深度学习的模型 , 在大数据的情况下 , 效果要好于GMM-HMM 。
声学模型就是把声音转成音素 , 有点像把声音转成拼音的感觉 , 所以优化声学模型需要音频数据 。
文章图片
6. 语言模型(LM)
语言模型是将语法和字词的知识进行整合 , 计算文字在这句话下出现的概率 。 一般自然语言的统计单位是句子 , 所以也可以看做句子的概率模型 。 简单理解就是给你几个字词 , 计算这几个字词组成句子的概率 。
语言模型中 , 基于统计学的有n-gram 语言模型 , 目前大部分公司用的也是该模型 。
还有基于深度学习的语言模型 , 语言模型就是根据一些可能的词(词典给的)计算出那些词组合成一句话的概率比较高 , 所以优化语言模型需要的是文本数据 。
文章图片
7. 词典
词典就是发音字典的意思 , 中文中就是拼音与汉字的对应 , 英文中就是音标与单词的对应 。
其目的是根据声学模型识别出来的音素 , 来找到对应的汉字(词)或者单词 , 用来在声学模型和语言模型建立桥梁 , 将两者起来—简单理解词典是连接声学模型和语言模型的月老 。
词典不涉及什么算法 , 一般的词典都是大而全的 , 尽可能地覆盖我们所有地字 。 词典这个命名很形象 , 就像一本“新华字典”给声学模型计算出来的拼音配上所有可能的汉字 。
整个这一套组成了一个完整的语音识别模型 , 其中声学模型和语言模型是整个语音识别的核心 , 各家识别效果的差异也是这两块内容的不同导致的 。
四、语音识别相关内容
语音识别除了把语音转换成文本以外 , 还有一些其他用处 , 这里也简单提一下 。
这里把方言和外语一起讨论 , 是因为训练一个方言的语音识别模型 , 和训练一个外语的模型差不多 , 毕竟有些方言听起来感觉和外语一样 。
所以方言和外语识别 , 就需要重新训练的语音识别模型 , 才能达到一个基本可用的状态 。
这里就会遇到两个问题:
从零开始训练一个声学模型需要大量的人工标注数据 , 成本高 , 时间长 , 对于一些数据量有限的小语种 , 就更是难上加难 。 所以选择新语种(方言)的时候要考虑投入产出 , 是否可以介入第三方的先使用 , 顺便积累数据 。
除了单独的外语(方言)识别之外 , 还有混合语言的语音识别需求 , 比如在香港 , 英文词汇经常会插入中文短语中 。 如果把每种语言的语言模型分开构建 , 会阻碍识别的平滑程度 , 很难实现混合识别 。
文章图片
2. 语种识别(LID)
语种识别(LID)是用来自动区分不同语言的能力 , 将识别结果反馈给相应语种的语音识别模型 , 从而实现自动化的多语言交互体验 。 简单理解就是计算机知道你现在说的是中文 , 它就用中文回复你 , 如果你用英文和计算机说话 , 计算机就用英文回复你 。分页标题#e#
语种识别主要分三个过程:首先根据语音信号进行特征提取;进行语种模型的构建;最后是对语音进行语种判决 。
算法层面目前分为两类:一类是基于传统的语种识别 , 一种是基于神经网络的语种识别 。
传统的语种识别包括基于HMM的语种识别、基于音素器的语种识别、基于底层声学特征的语种识别等 。 神经网络的语种识别主要基于融合深度瓶颈特征的DNN语种识别 , 深度神经网络中 , 有的隐层的单元数目被人为地调小 , 这种隐层被称为瓶颈层 。
目前基于传统的语种识别 , 在复杂语种之间的识别率 , 只有80%左右;而基于深度学习的语种识别 , 理论上效果会更好 。 当然这和语种的多样性强相关 , 比如两种语言的语种识别 , 和十八种语言的语种识别 , 之间的难度是巨大的 。
文章图片
3. 声纹识别(VPR)
声纹识别也叫做说话人识别 , 是生物识别技术的一种 , 通过声音判别说话人身份的技术 。 其实和人脸识别的应用有些相似 , 都是根据特征来判断说话人身份的 , 只是一个是通过声音 , 一个是通过人脸 。
声纹识别的原理是借助不同人的声音 , 在语谱图振峰的分布情况不同这一特征 , 去对比两个人的声音 , 在相同音素上的发声来判断是否为同一个人 。
主要是借助的特征有:音域特征、嗓音纯度特征、共鸣方式特征等 , 而对模型有高斯混合模型(GMM)深度神经网络(DNN)等 。
注:
共振峰:共振峰是指在声音的频谱中能量相对集中的一些区域 , 共振峰不但是音质的决定因素 , 而且反映了声道(共振腔)的物理特征 。 提取语音共振峰的方法比较多 , 常用的方法有倒谱法、LPC(线性预测编码)谱估计法、LPC倒谱法等 。
语谱图:语谱图是频谱分析视图 , 如果针对语音数据的话 , 叫语谱图 。 语谱图的横坐标是时间 , 纵坐标是频率 , 坐标点值为语音数据能量 。 由于是采用二维平面表达三维信息 , 所以能量值的大小是通过颜色来表示的 , 颜色深 , 表示该点的语音能量越强 。
文章图片
声音识别也会有1to1、1toN、Nto1三种模式:
1to1:是判断当前发声和预存的一个声纹是否一致 , 有点像苹果手机的人脸解锁 , 判断当前人脸和手机录的人脸是否一致 。
1toN:是判断当前发声和预存的多个声纹中的哪一个一致 , 有点像指纹识别 , 判断当前的指纹和手机里面录入的五个指纹中的哪一个一致 。
Nto1:就比较难了 , 同时有多个声源一起发声 , 判断其中那个声音和预存的声音一致 , 简单理解就是所有人在一起拍照 , 可以精确的找到其中某一个人 。 当然也有NtoN , 逻辑就是所有人一起拍照 , 每个人都能认出来 。
除了以上的分类 , 声纹识别还会区分为:
固定口令识别 , 就是给定你文字 , 你照着念就行 , 常见于音箱付款的验证 。
随机口令识别 , 这个就比较厉害了 , 他不会限制你说什么 , 自动识别出你是谁 。
声纹识别说到底就是身份识别 , 和我们常见的指纹识别、人脸识别、虹膜识别等都一样 , 都是提取特征 , 进行匹配 。 只是声纹的特征没有指纹等特征稳定 , 会受到外部条件的影响 , 所以没有其他的身份识别常见 。
4. 情绪识别
目前情绪识别方式有很多 , 比如检测生理信号(呼吸、心率、肾上腺素等)检测人脸肌肉变化、检测瞳孔扩张程度等 。 通过语音识别情绪也是一个维度 , 但是所能参考的信息有限 , 相较于前面谈到的方法 , 目前效果一般 。分页标题#e#
通过语音的情绪识别 , 首先要从语音信息中获取可以判断情绪的特征 , 根据这些特征再进行分类;这里主要借助的特征有:能量(energy)音高(pitch)梅尔频率倒谱系数(MFCC)等语音特征 。
常用的分类模型有:高斯混合模型(GMM)隐马尔可夫模型(HMM)长短时记忆模型(LSTM)等 。
语音情绪识别一般会有两种方法:一种是依据情绪的不同表示方式进行分类 , 常见的有难过、生气、害怕、高兴等等 , 使用的是分类算法;还有一种是将情绪分为正面和负面两种 , 一般会使用回归算法 。
具体使用以上哪种方法 , 要看实际应用情况 。
如果需要根据不同的情绪 , 伴随不同的表情和语气进行回复 , 那么需要使用第一种的分类算法;如果只是作为一个参数进行识别 , 判断当前说话人是消极还是积极 , 那么第二种的回归算法就够了 。
五、语音识别如何
由于语言文字的排列组合是无限多的 , 语音识别的效果要有大数据思维 , 就是基于统计学的方法 , 最好是可以多场景、多人实际 , 具体要看产品的使用场景和目标人群 。
另外一般还要分为模型和实际 , 我们下面谈到的都是实际的指标 。
1. 环境
人工智能产品由于底层逻辑是计算概率 , 天生就存在一定的不确定性 , 这份不确定性就是由外界条件的变化带来的 , 所以在语音识别效果的时候 , 一定要控制环境的条件 。
往往受到以下条件影响:
1环境噪音
最好可以在实际场景中进行 , 如果没有条件 , 可以模拟场景噪音 , 并且对噪音进行分级处理 。
【语音交互,语音识别技术】比如车载场景 , 我们需要分别30km/h、60km/h、90km/h、120km/h的识别效果 , 甚至需要加入车内有人说话和没人说话的情况 , 以及开关车窗的使用情况—这样才能反应真是的识别情况 , 暴露出产品的不足 。
2发音位置
发音位置同样需要根据场景去定义, 比如车载场景:我们需要分别主驾驶位置、副驾驶位置、后排座位的识别效果 , 甚至面向不同方向的发音 , 都需要考虑到 。
3发音人群体、语速、口音、响度
发音人就是使用我们产品的用户 , 如果我们产品覆盖的用户群体足够广 , 我们需要考虑不同年龄段 , 不同地域的情况 , 比如你的车载语音要卖给香港人 , 就要考虑粤语的 。
这里不可控的因素会比较多 , 有些可能遇到之后才能处理 。
文章图片
2. 数据
整个过程中 , 一般我们会先准备好要的数据(根据环境)当然数据越丰富 , 效果会越好 。
首先需要准备场景相关的发音文本 , 一般需要准备100-10000条;其次就是在对应的环境制造相应的音频数据 , 需要在实际的麦克风阵列收音 , 这样可以最好的模拟实际体验;最后就是将音频和文字一一对应 , 给到相应的同学进行 。
关于之前有过一些有趣的想法 ,就是准备一些文本 , 利用TTS生成音频 , 再用ASR识别 , 识别的效果 。 这样是行不通的 , 根本没有实际模拟用户体验 , 机器的发音相对人来说太稳定了 。
文章图片
3. 词错率
词错率(WER)也叫字错率 , 计算识别错误的字数占所有识别字数的比例 , 就是词错率 , 是语音识别领域的关键性评估指标 。 无论多识别 , 还是少识别 , 都是识别错误 。
公式如下:
分页标题#e#
文章图片
Substitutions是替换数 。
Deletions是删除数 。
Insertions是插入次数 。
Total Words in Correct Tran是单词数目 。
这里需要注意的是 , 因为有插入词的存在 , 所以词错率可能会大于100%的 , 不过这种情况比较少见 。
一般效果会受到集的影响 , 之前有大神整理过不同语料库 , 识别的词错率情况 , 数据比较老 , 仅供参考:
文章图片
4. 句错率
句错率(SWR)表示句子中如果有一个词识别错误 , 那么这个句子被认为识别错误 , 句子识别错误的个数占总句子个数的比例 , 就是句错率 。
文章图片
of sentences with at least one word error是句子识别错误的个数 。
totalof sentences是总句子的个数 。
在实际体验中 , 句子识别错误的标准也会有所不同 , 有些场景可能需要识别的句子和用户说的句子完全一样才算正确 , 而有些场景可能语意相近就算正确 , 这取决于产品的定位 , 以及接下来的处理逻辑 。
比如语音输入法 , 就需要完全一样才算正确 , 而一般闲聊的语音交互 , 可能不影响语意即可 。
六、后期如何维护
在实际落地中 , 会频繁的出现ASR识别不对的问题 , 比如一些生僻词 , 伯数字的大小写 , 这个时候就需要通过后期来解决 。
一句话或者一个词识别不对 , 可能存在多种原因;首先需要找到识别不对的原因 , 再利用现有工具进行解决 。 一般会分为以下几种问题:
1. VAD截断
这属于比较常见的问题 , 就是机器只识别了用户一部分的语音信息 , 另一部分没有拾到音 。
这个和用户的语速有很大关系 , 如果用户说话比较慢的 , 机器就容易以为用户说完了 , 所以会产生这样的问题 。
一般的解决方案分为两种:第一种是根据用户群体的平均语速 , 设置截断的时间 , 一般400ms差不多;第二种是根据一些可见的细节去提示用户 , 注意说话的语速 。
2. 语言模型修改
这类问题感知最强 , 表面上看就是我说了一句话 , 机器给我识别成了一句不想相关的内容:这种问题一方面和用户想要识别的词相关 , 一方面和用户的发音有关 , 我们先不考虑用户的发音 。
一般生僻词会遇到识别错误的问题 , 这主要是模型在训练的时候没有见过这类的内容 , 所以在识别的时候会比较吃力 。 遇到这种问题 , 解决方案是在语言模型里面加入这个词 。
比如说:我想看魑魅魍魉 , 训练的时候没有“魑魅魍魉”这四个字 , 就很可能识别错误 , 我们只需要在语言模型中加入这个词就可以 。 一般工程师会把模型做成热的方式 , 方便我们操作 。
有的虽然不是生僻字 , 但还是会出现竞合问题 , 竞合就是两个词发音非常像 , 会互相冲突 。 一般我们会把想要识别的这句话 , 都加到语言模型 。
比如:带我去宜家商场 , 这句话里面的“宜家”可能是“一家”两个词之间就会出现竞合 。 如果客户希望识别的是“宜家”那我们就把 “带我去宜家商场”整句话都加入到语言模型之中 。
文章图片
3. 干预解决
还有一类识别错误的问题 , 基本上没有解决方法 。分页标题#e#
虽然我们上面说了在语言模型中加词 , 加句子 , 但实际操作的时候 , 你就会发现并不好用;有些词就算加在语言模型里面 , 还是会识别错误 , 这其实就是一个概率问题 。
这个时候我们可以通过一些简单粗暴的方式解决 。
我们一般会ASR模型识别完成之后 , 再加入一个干预的逻辑 , 有点像NLP的预处理 。 在这步我们会将识别错误的文本强行干预成预期的识别内容 , 再穿给NLP 。
比如:我想要一个switch游戏机 , 而机器总是识别成“我想要一个思维词游戏机”这个时候我们就可以通过干预来解决 , 让“思维词”=“switch”这样识别模型给出的还是“我想要一个思维词游戏机”
【语音交互,语音识别技术】我们通过干预 , 给NLP的文本就是“我想要一个switch游戏机”
七、未来展望
目前在理想环境下 , ASR的识别效果已经非常好了 , 已经超越人类速记员了 。 但是在复杂场景下 , 识别效果还是非常大的进步空间 , 尤其鸡尾酒效应、竞合问题等 。
1. 强降噪发展
面对复杂场景的语音识别 , 还是会存在问题 , 比如我们常说的鸡尾酒效应 , 目前仍然是语音识别的瓶颈 。 针对复杂场景的语音识别 , 未来可能需要端到端的深度学习模型 , 来解决常见的鸡尾酒效应 。
2. 语音链路整合
大部分公司会把ASR和NLP分开来做研发 , 认为一个是解决声学问题 , 一个是解决语言问题 。 其实对用户来讲 , 体验是一个整体 。
未来可以考虑两者的结合 , 通过NLP的回复、或者反馈 , 来动态调整语言模型 , 从而实现更准确的识别效果 , 避免竞合问题 。
3. 多模态结合
未来有可能结合图像算法的能力 , 比如唇语识别、表情识别等能力 , 辅助提高ASR识别的准确率 。 比如唇语识别+语音识别 , 来解决复杂场景的 , 声音信息混乱的情况 。
目前很多算法的能力都是一个一个的孤岛 , 需要产品经理把这些算法能力整合起来 , 从而作出更准确的判断 。
八、总结
语音识别就是把声学信号成文本信息的一个过程 , 中间最核心的算法是声学模型和语言模型 , 其中声学模型负责找到对应的拼音 , 语言模型负责找到对应的句子 。
后期我们一般会对语言模型进行调整 , 来解决识别过程中的badcase 。
通过声音 , 我们可以做语种识别、声纹识别、情绪识别等 , 主要是借助声音的特征进行识别 , 其中常用的特征有能量(energy)音高(pitch)梅尔频率倒谱系数(MFCC)等 。
未来语音识别必将会和自然语言处理相结合 , 进一步提高目前的事变效果 , 对环境的依赖越来越小 。
本文相关词条概念解析:
识别
识别又称为归类和定性 。 是指在适用冲突规范时 , 依照某一法律制度 , 对有关事实或问题进行分类和定性 , 将其归入一定的法律范畴 , 并对有关冲突规范进行解释的过程 。 是国际私法中的特有概念 。 识别分为光学识别、生物识别、语音识别、磁识别、射频识别等 。 识别的应用不只局限于法律层面上 , 比如现在广泛应用的有“模式识别” 。 模式识别(PatternRecognition)是指对表征事物或现象的各种形式的(数值的、文字的和逻辑关系的)信息进行处理和分析,以对事物或现象进行描述、辨认、分类和解释的过程,是信息科学和人工智能的重要组成部分 。

来源:(未知)
【】网址:/a/2020/0819/kd439304.html
标题:语音交互,语音识别技术