目录

  • 背景
  • 基本概念
  • 一般流程
  • 预处理常用方法
  • 声学模型
  • (一)多样性问题
  • (二)语音识别任务的指标
  • 语言模型
  • 解码器
  • 工作原理
  • (一)分析声音
  • (二)提取特征
  • (三)识别音素和状态(声学模型)
  • 识别文字(语言模型+ 解码器)
  • 深度学习方法
  • 发展
  • 基于transfomer的语音识别模型
  • 语音数据集

背景

语音识别 ( Automatic Speech Recognition, ASR ) 技术是语音交互领域中发展最快,同时是语音相关任务中最有挑战也是最重要的技术之一。

基本概念

语音识别的任务主要是将语音转成对应的文字,其输入信号是一段音频信号,输出是对应的文字序列。

中文 语音识别 深度学习 pytorch 语音识别_自然语言处理


ASR可以认为是一个搜索过程,给定输入特征X的情况下,搜索出最有可能的词序列W。

一般流程

中文 语音识别 深度学习 pytorch 语音识别_深度学习_02


系统主要包含特征提取、声学模型,语言模型以及字典与解码四大部分。

  • 其中为了更有效地提取特征一般要对所采集到的声音信号进行预处理工作,把要分析的信号从原始信号中提取出来;
  • 特征提取:将声音信号从时域转换到频域,为声学模型提供特征向量;
  • 声学模型:声学特性计算每一个特征向量在声学特征上的得分;
  • 语言模型:根据语言学相关的理论,计算该声音信号对应可能词组序列的概率;
  • 字典:对词组序列进行解码,得到最后可能的文本表示。

预处理常用方法

  • AEC(回声消除):如果用于识别的设备,在识别语音时本身在播放音乐或者音频,此时对于识别的语音输入就有回声的存在,需要使用回声消除,得到纯净的输入语音
  • De-reverb(去混响):在相对小一点的房间中录音,会有混响的存在,混响严重时会影响语音识别的效果
  • Beamforming:多通道信号合并
  • NS(降噪):降噪可以看成滤波的一种。降噪的目的在于突出信号本身而抑制噪声影响
  • AGC(音频自动增益):声音信号幅度的自动变化,如声音远近的不同
  • WF(滤波):将信号中特定波段频率滤除的操作,是抑制和防止干扰的一项重要措施
  • Framing(分帧):为了程序能够进行批量处理,会根据指定的长度(时间段或者采样数)进行分段

声学模型

(一)多样性问题

  • 语境多样性:同一个词在不同的语境中表现出不同的含义。
  • 风格多样性:同一个说话人,说话风格有时也会有所差异,如演讲时和与朋友聊天时的风格就有所差异。
  • 说话人多样性:在语音识别任务中,一种任务是不管说话人是谁,说了同样的文字内容,我们都要把说具体内容识别出来;反过来的一种任务是说话人识别,就是不管说话人说什么内容,我们都要把说话人识别出来。相同的语音信号包含了很多不同的信息,也导致了声学信号的不同。
  • 设备多样性:我们知道同样的说话内容通过不同语音设备(如手机,音响,麦克风等)表现也各不相同,同时设备质量的不同也会引入很多的噪音,导致声学信号也不相同。
    这些多样性问题都增加了声学模型处理的难度和挑战。

(二)语音识别任务的指标

  • STOA和标准可以参考:
    https://chimechallenge.github.io/
  • 对于简单的任务识别的错误率很快便达到了4%以下,但是对于复杂场景下的识别任务,当时错误率在50%左右。
  • 此外,从这里也可以看出,通常情况下,谈到语音识别准确率(或错误率)都需要与其对应的任务联系起来的。

语言模型

在语音识别的语言模型中,最常用的是语言模型,换句话说就是要计算一个序列(句子)出现的概率。
语言模型主要用来决定哪个词序列概率更大,或者根据前一个或几个词的情况下预测最有可能的下一个词。

解码器

采用维特比算法(Viterbi),综合声学模型与语言模型的结果,给定输入特征序列,找出最有可能的词序列,利用起始概率、转移概率、发射概率寻找全局最优的词序列。

工作原理

  • 第一步,把帧识别成状态。
  • 第二步,把状态组合成音素。
  • 第三步,把音素组合成单词。
    首先,我们知道声音实际上是一种波。
    常见的mp3等格式都是压缩格式,必须转成非压缩的纯波形文件来处理,比如Windows PCM文件,也就是俗称的wav文件。

(一)分析声音

中文 语音识别 深度学习 pytorch 语音识别_机器学习_03


图中,每帧的长度为25毫秒,每两帧之间有25-10=15毫秒的交叠。我们称为以帧长25ms、帧移10ms分帧。分帧后,语音就变成了很多小段。

(二)提取特征

波形在时域上几乎没有描述能力,因此必须将波形作变换。
把每一帧波形变成一个多维向量,简单地理解为这个向量包含了这帧语音的内容信息。
这个过程叫做声学特征提取。

中文 语音识别 深度学习 pytorch 语音识别_人工智能_04


至此,声音就成了一个12行、N列的一个矩阵,这里N为总帧数。图中,每一帧都用一个12维的向量表示,色块的颜色深浅表示向量值的大小。

(三)识别音素和状态(声学模型)

音素:单词的发音由音素构成。对英语,一种常用的音素集是卡内基梅隆大学的一套由39个音素构成的音素集。汉语一般直接用全部声母和韵母作为音素集,另外汉语识别还分有调无调,不详述。

状态:比音素更细致的语音单位。通常把一个音素划分成3个状态。

中文 语音识别 深度学习 pytorch 语音识别_深度学习_05

每个小竖条代表一帧,若干帧语音对应一个状态,每三个状态组合成一个音素,若干个音素组合成一个单词。也就是说,只要知道每帧语音对应哪个状态了。

识别文字(语言模型+ 解码器)

在状态网络中搜索一条最佳路径,语音对应这条路径的概率最大,这称之为“解码”。路径搜索的算法是一种动态规划剪枝的算法,称之为Viterbi算法,用于寻找全局最优路径。

比如:我和你、我河你。

深度学习方法

发展

语音识别本质上是一个序列识别问题,如果模型中的所有组件都能够联合优化,很可能会获取更好的识别准确度,所以我们需要一种端到端(End2End)的语音识别处理系统。

先前的模型包括了特征提取、声学模型,语言模型等模块,是一个pipeline的系统,而end-to-end从输入到输出只用一个算法模型,输入是语音信号,输出就是最终的词序列的结果。

常用的端到端的语音识别模型为基于CTC ( Connectionist Temporal Classification ) 和基于attention机制的模型。

一个基于CTC的语音识别的典型例子:深度学习语音识别框架DEEPSPEECH(2016年)。

基于attention机制的端到端训练语音识别模型也逐渐成为了主流。
Attention机制最早应用在机器翻译领域,实现了从一种语言序列变化到另一种语言序列。
语音识别领域和机器翻译领域非常相似,前者是从语音信号的序列到输出文字的序列,而后者是从一种语言的文字序列到另一种语言文字的序列。

语音识别中使用attention机制的算法模型被称为Listen-Attend-Spell(LAS)模型。Listen部分是一个encoder,把声学信号转换成embedding向量, Attend为转换后向量的权重,Spell部分是一个decoder,把向量转换成对应的文字序列。

Attention模型和CTC模型最主要的区别是,基于神经网络对输出序列的历史信息做了显式的建模。

基于transfomer的语音识别模型

在NLP领域,输入是一段文字,通常的做法会把输入的文字通过embedding的方式转换成连续的向量。

在语音识别中,如果引入Transformer模型,通过会使用几个卷积层来实现downsampling,然后通过transformer模型映射到输出的文字序列,从而加入模型的收敛。

中文 语音识别 深度学习 pytorch 语音识别_机器学习_06

语音数据集

  • 2000 HUB5 English:最近在 Deep Speech 论文中使用的英语语音数据,从百度获取。
    地址:https://catalog.ldc.upenn.edu/LDC2002T43
  • LibriSpeech:包含文本和语音的有声读物数据集。由多个朗读者阅读的近 500 小时的各种有声读物演讲内容组成,包含带有文本和语音的章节。
    地址:http://www.openslr.org/12/
  • VoxForge:带口音的清晰英语语音数据集。适用于提升不同口音或语调鲁棒性的案例。
    地址:http://www.voxforge.org/
  • TIMIT:英语语音识别数据集。
    地址:https://catalog.ldc.upenn.edu/LDC93S1
  • CHIME:嘈杂的语音识别挑战数据集。数据集包含真实、仿真和干净的录音。真实录音由 4 个扬声器在 4 个嘈杂位置的近 9000 个录音构成,仿真录音由多个语音环境和清晰的无噪声录音结合而成。
    地址:http://spandh.dcs.shef.ac.uk/chime_challenge/data.html
  • TED-LIUM:TED 演讲的音频转录。1495 个 TED 演讲录音以及这些录音的文字转录。
    地址:http://www-lium.univ-lemans.fr/en/content/ted-lium-corpus