自然语言计算机形式分析的理论与方法笔记(Ch15)

第十五章:语音自动处理的形式模型

语音自动处理主要包括:自动语音识别(ASR) 和文本-语音转换(TTS)。

语音和音位的形式描述方法

词的发音模拟为表示音子和语段的符号串。音子就是言语的发音,用语音符号表示。可以用三套不同的字母符号——IPA,ARPAbet,SAMPA 描述音子。

  • IPA:国际音标,字母表+标音原则
  • ARPAbet:使用 ASCII 字符
  • SAMPA:计算机可读的语音学符号

语音链描述了语音传送过程。语音的发出是发音语音学问题,发音器官包括:鼻腔、鼻咽腔、软腭、口咽腔、喉头盖、咽腔、假声带、喉腔、声带、食管、唇、甲状软骨和气管等部分。

语音可分为辅音和元音两大类。辅音以某种方式限制和阻挡气流的运动,从而形成浊音或清音。元音受到的阻挡较小,一般为浊音。元音比辅音响亮,延续时间较长。

  • 根据发音部位不同,辅音分为:唇音、齿音、齿龈音、上颚音、软腭音、喉音等。汉语普通话的辅音(22 个)按发音方法分:

    • 塞音:b d g p t k

    • 塞擦音:z c zh ch j q

    • 擦音:f s sh x h r

    • 鼻音:m n ng

    • 边音:l

  • 根据发音方法不同,可以分为:塞音、鼻音、擦音(与塞擦音)、半元音、颤音。汉语普通话的辅音按发音部位分:

    • 双唇音:b p m
    • 唇齿音:f
    • 舌面前音:d t n l
    • 舌面音:j q x
    • 舌根音:g k h
    • 舌尖前音:z c s
    • 舌尖后音:zh ch sh r

元音也可以通过发音部位描述,有两个重要参数:一个是发元音时舌位的高低(大致相当于舌头最高部分所处的位置);另一个是嘴唇的形状。

舌位处于前面的元音叫前元音,后面的叫后元音;最高点相对高的元音叫高元音,最高点的值处于中部或低部的元音分别叫中元音或低元音。汉语普通话的元音 (42) 个分为三种:

  • 单元音:13 个,i, a, o, ü 等
  • 复合元音:13 个,ai, ei, ao, ou, iao, iou, uai, uei, ia, ie, ua, uo, üe 等
  • 复鼻韵尾音:16 个,ian, uan, uen, iong, üan, iang, uang, ueng 等

辅音和元音结合成音节,粗略地说,音节是一个元音之类的音和它周围的一些联系非常紧密的辅音结合而成的。把单词分割为音节的工作叫音节切分。汉语声母和韵母构成的音节形式表可参见 P. 665。汉语普通话的声母和韵母之间存在着十分严格的配合关系。

一般把某个音子一类的发音变化叫作一个抽象的类别——音位,是对不同实际语音的一种归纳或抽象。音位和它的变体之间的关系可以用 “音位规则” 表示。

声学语音学和信号

声学分析的基础是正弦余弦函数。语音处理的第一步是把模拟信号转为数字信号,又分抽样和量化两个步骤。

  • 抽样度量信号在特定时刻的振幅,抽样率是每秒钟提取的样本数,每周期至少正负两个样本,给定抽样率的最大频率叫 Nyquist 频率。
  • 振幅的测量结果一般以整数存储,该过程叫量化。量化后可以以不同的格式存储,这些格式的参数之一是抽样率和抽样范围,如麦克风语音数据以 16Hz 抽样,16 位样本存储;另一个参数是频道数;还有一个参数是个体抽样存储,可以采用线性存储或压缩存储。
    • 电话语音使用的一个常见的压缩格式是 μ-律(对数压缩算法),直觉是:人类的听觉在音强较小时比较大时更加敏感。
    • 非对数的线行值通常指线性 PCM 值。

声带振动产生声波,这个振动的频率叫作基音频率(基频),记为 F。

除了任何时刻的振幅,还需知道某一个时间段内的平均振幅,为了避免正负抵消,一般使用振幅的均方根(RMS),叫 RMS 振幅:$$\sqrt {\frac {1}{N} \sum_{i=1}^{N} x_i^2}​$$ (N 为样本数)

信号的强度与振幅的平方有关:$$\frac {1}{N} \sum_{i=1}^{N} x_i^2$$ (N 为样本数)

音强是对于人类听觉阈值的强度归一化,用分贝度量,如果阈值的压强 $$P_0 = 2 * 10^5 Pa​$$ ,那么音强为:

10lg1NP0i=1Nxi210 \lg \frac{1}{NP_0} \sum_{i=1}^{N} x_i^2

振幅就是声音的压强水平。

音高和响度是两个重要的感知特性,与频率和音强有关。

  • 一般在 100-1000 Hz 范围内,音高与频率是线性相关的,对于音高感知的计量采用 “美”:如果一对语音在感知上它们的音高听起来是等距离的,就是以相同数目的 “美” 被分开的,“美” 的频率 m 可以根据粗糙的声学频率计算:$$m=1127 \ln (1 + \frac{f}{700})$$

  • 响度与信号强度感知有关,振幅大的听起来会觉得响,但不是线性关系

抽取 F0 叫作基音抽取,有自相关方法、基于倒谱特征的方法等。

根据傅里叶变换,可以用声谱表示频率,声谱中最容易看到的声谱峰是区别不同语音的最明显的特征;声谱峰是音子的声谱特征的 “签名”。

声谱表示某一时刻的声波的频率成分,频谱表示这些不同的频率是怎样使波形随时间改变而改变的,相当于把声波的三个维(时间、频率和振幅)可视化。频谱横轴为时间,纵轴为频率,沿纵轴亮度不同的条纹就是声音压强水平,每一个条纹就相当于一个声谱图。频谱中每一个暗色条纹(条纹中的一段)叫作共振峰。

不同元音在特征位置具有不同的共振峰,因此可以把元音区别开来。不同的元音之所以具有不同的声谱特征,因为口腔是一个滤波器,改变声腔形状能使不同频率的声音得到放大。

语音自动合成的方法

语音自动合成就是把文本映射为波形,有两步:

  • 文本分析:将输入文本转换为语音内部表示
  • 波形合成:将内部表示转换为波形

波形合成有三个区别很大的范式:毗连合成、共振峰合成和发音合成。本章以毗连合成为主,语音样本先被切分为碎块,存储后结合起来重新组合,造出新句子。

文本分析又分为文本归一化、语音分析、韵律分析等部分;波形合成又分为单元选择、单元数据库等部分。

  • 文本归一化

    • 任务一:句子的词例还原,把文本片段切分成彼此分开的话段。关键部分是小圆点排歧,使用有监督学习训练一个分类器判断是不是句子结尾。
    • 任务二:处理非标准词,数字、首字母缩写词、普通缩写词等,因为它们的读音存在不同读法,可以看成是一种歧义问题。处理至少有三个步骤:词例还原、分类、扩充。
      • 词例还原用于分割和识别潜在的非标准词,可以用词典和简单的启发式算法
      • 分类用于给非标准词标上读音类型,可以用正则或机器学习分类器,可利用的特征包括组成成分的字母特征、相邻单词辨识等等
      • 扩充用于把每一个类型的非标准词转换为标准词的符号串。一般需要借助缩写词词典,并使用同形异义词排歧算法处理歧义问题。同形异义词可以利用词类信息排歧。
  • 针对已经归一化的单词符号串中的每一个单词,产生出单词的发音。最重要的一个组成部分是大规模发音词典。但有两个方面需要加强,一方面是命名实体,一方面是未知词。

    • 词典:

      • 英文的 CELEX,CMU,PROLEX,UNISYN 等发音词典
      • 英文的 TIMIT(波形与音子序列对齐),Switchboard(波形与音节序列对齐),Bukeye 等语音标注语料库。
    • 命名实体:包括人名、地理名称、商业机构名称等,使用发音词典

    • 未知词:很多现代系统采用 “字位-音位转换” 的方法来处理未知的名称,通常需要两个预测系统:一个是系统预测名称,一个是系统预测非名称。把字母序列转换成音子序列的过程叫作 “字位-音位转换”,简称 g2p。

      • 早期的算法都是 Chomsky-Halle 重写规则,这样的规则通常叫 字母-语音规则 (LTS 规则),LTS 规则按照顺序使用,仅当前面规则的上下文条件不符合时才可以使用下面一条规则。
      • 1984 年,Lucassen 和 Mercer 把该问题形式化:对于一个给定的字母序列 L,搜索概率最大的音子序列 P。
        • 把观察范围扩大到围绕字母前后的一个窗口 (就是 N-gram)
        • 把已经正确识别的前面的音子的信息加入到概率模型
        • 单词的词类标记,甚至字母的类别信息
      • 大多数语音合成系统分别建立两个字位-音位分类器,一个用于未知的人名,一个用于其他的未知词
  • 韵律分析:一般在比语音更长的语言单位上起作用,也叫超音段现象,三个主要的音系学特征:

    • 突显度:音节的一个特征,描述通常是相对的,只是说明一个音节比另一个更突出。有助于突出话语重点
    • 结构:某些词似乎自然地结合在一起或分开。通常用韵律短语来描述韵律结构,具有同样韵律短语结构的话语应该具有同样的句法结构。
    • 调:话语的语调节律。具有区别意义作用。
      • 可以分解,其中最重要的组成部分是音高重音。
      • 音高重音分类最流行的模式是 Pierrehumbert 模式或 ToBI 模式,模式指出,英语中共有六种音高重音,由高调 H 和低调 L 两个简单的调按不同方式组合而成:H* 重音高调L* 重音低调L+H* 低调+重音高调L*+H 重音低调+高调H+L*H*+L。此外还有两个短语重音 L-H-,两个边界调 L%H%,用于短语的结尾以控制语调的升降。
      • 其他语调模型与 ToBI 的不同在于,它们不使用离散的音位类别来表示语调重音。

突显度、结构和调三个音位因素相互作用,并且在各种不同的语音和声学现象中被实现。突现的音节一般比非突现的音节读的重一些、长一些;韵律的短语边界通常有停顿,边界之前的音节变长,有时边界处音高变低;语调的不同规则表现为基频曲拱(F0)的差异。

TTS 的主要任务是生成韵律的适当的语言表示,并且从这样的语言表示出发,生成适当的声学模式,而这样的声学模式将表现为输出语音的波形。这样的一个韵律成分在 TTS 系统中的输出就是音子的一个序列,每个音子都具有一个音延的值和一个音高的值。每个音子的音延与语音上下文有关。F0 的值受到上面讨论过的各种因素的影响,包括词重音、句子的重读或焦点成分以及话语的语调。

20 世纪 50 年代初人们提出了波形合成的三种主要的泛型:毗连合成、共振峰合成、发音合成。

  • 1953 年,Harris 的方法是把与音子对应的磁带片段按照字面的顺序拼接在一起,是建立在单音子基础上的。对每一个音子都要存储多个复本,并且使用连接代价进行选择(选择转移到相邻单元时具有最为平滑的共振峰的那些单元)。
  • 1958 年,Peterson 提出要使用双音子和数据库,对每一个音子都要存储多个具有不同韵律的复本,且每一个复本都要标注韵律特征,如 F0、重音、时延等,并且还要使用基于 F0 和相邻单元共振峰距离的连接代价进行选择。纯理论模型。
  • 1992 年,学者们提出单元选择合成技术理论,包括非均匀长度大单元的理论,使用目标代价的理论,后来形式化后变成了形式模型。
  • 1996 年,Donovan 把语音识别中使用的决策树聚类算法引入语音合成。
  • 共振峰合成试图建立规则来生成人工声谱,其中包括生成共振峰的规则。发音合成试图直接给声道和发音过程的物理机制建模。

语音自动识别的方法

语音自动识别(ASR)研究的目标是用计算机来建立语音识别系统,把声学信号映射为单词串。

语音自动理解(ASU)研究的目标除了单词还要产生句子,并在某种程度上理解这些句子。

语音识别参数:

  • 词汇量大小
  • 语音流畅度和自然度
  • 信道和噪声
  • 说话人的语音特征

ASR 目前的重点是大词汇量连续语音识别 (LVCSR),占统治地位的范式是 HMM。语音识别可以分为三个阶段:

  • 特征抽取:获取观察值 O,信号处理阶段,语音的声学波形按照音片的时间框架抽样,把音片的时间框架转换成声谱特征,每一个时间框架的窗口用矢量表示,每一个矢量大约包括 39 个特征,用以表示声谱的信息以及能量大小和声谱变化的信息。
  • 声学建模:获取观察似然读 P(O|W) 和先验概率 P(W),音子识别阶段,对于给定的语言单位 (单词、音子、次音子) 计算观察到的声谱特征矢量的似然度。
  • 解码:获取文本 W,声学模型 AM + HMM 单词发音词典 + 语言模型 LM 输出最可能的单词序列,HMM 发音词典就是单词的发音表,其中每一个发音用一个音子串表示。

特征抽取

最普通的方法是 mel 频率倒谱系数,MFCC 是建立在倒谱的思想上的。

  • 把模拟信号转为数字信号
    • 抽样
      • 每秒钟抽取的样本数叫抽样率
      • 每一轮抽样至少两个样本,一个测量正侧,一个测量负侧
      • 可能测量的最大频率的波是频率等于抽样率一半的波,给定抽样率的最大频率叫 Nyquist 频率
    • 量化
      • 把实数值表示为整数的过程叫量化
  • 抽取 MFCC 特征
    • 预加重:加重高频段的能量,使用滤波器进行。原因是声谱斜移 (频率高能量下降的现象)。
    • 加窗:语音的统计特性在时间上不恒定,因此从一个小窗口抽取波形,并假定在该区域内是恒定的。
      • 三个参数:窗口的宽度、连续窗口之间的偏移、窗口的形状
      • 从每一个窗口抽出的语音叫作一帧,帧持续的时间叫作帧长,连续窗口的左边沿之间相距的时间叫作帧移
      • 矩形窗的边界处会支离破碎地切掉一些信号使得信号不连续,所以普遍使用汉明窗,在边界处把信号值收缩到零
    • 离散傅里叶变换 (DFT):对抽样的离散时间信号的离散频带,抽取其声谱信息 (频率和振幅的关系),常用的算法是快速傅里叶变换 (FFT)。
    • mel 滤波器组和对数表示:因为人类听觉对高频不敏感,所以把 DFT 输出的频率改为 “美” 标度。
      • 如果一对语音在感知上的音高听起来是等距离的,就可以用相同数目的 “美” 分开。
      • 低于 1000 Hz 时,频率与 “美” 标度之间的映射是线性关系;高于 1000 Hz 时是对数关系。
      • 通过建立一个滤波器组来实现这样的直觉。
      • 最后使用对数表示 mei 声谱的值。
      • 一般情况下,人类对于信号级别的反应是按照对数计算的,振幅高的阶段,人类对于振幅的轻微差别的敏感性比在振幅低的阶段低得多。
    • 倒谱:逆向傅里叶变换(iDFT)
      • 可以实现把声源和滤波器分开(由于人发音的特性,对于探测音子最有用的信息在于滤波器,即声腔)。
      • 倒谱是对数声谱的声谱(这里涉及到信号处理,比较复杂,没看太懂)。
      • 一般只取头 12 个倒谱值,它们仅表示滤波器的信息。
      • 不同倒谱系数之间的方差倾向于不相关(相对的不同频带上的声谱系数是相关的),声学模型不需要表示各个 MFCC 特征之间的协方差,降低了参数数目。
    • Delta 特征与能量
      • 一帧的能量是该帧在某一时段内的样本幂的总和
      • 从一帧到另一帧语音信号不是恒定的,可以加上倒谱特征中与时间变化有联系的特征,可以对之前的 13 个(12 个倒谱值+能量)特征加上 Delta 或速度特征,以及双 Delta 或加速度特征。
      • 13 个 Delta 特征的每一个特征表示在相应的倒谱/能量特征中帧与帧之间的变化
      • 13 个 双 Delta 特征中的每一个特征表示在相应的 Delta 特征中帧与帧之间的变化

声学建模

词类标注中,每一个观察序列是一个离散符号(单词),可以直接统计训练集中的次数计算概率;但是在语音识别中,MFCC 矢量是实数,每一个矢量几乎都是唯一的,因此需要进行矢量的量化。

其中一个方法是把输入矢量映射为离散符号,叫作矢量量化(VQ)。一个矢量量化系统使用三个特征刻画:码本、聚类算法、距离测度。

  • 码本是可能类别的表(类似于词表),对于码本中的每一个代码列出的模型矢量叫作码字,码字是一个特定的特征矢量。
  • 使用聚类算法建立码本,把训练集中所有的特征矢量聚类为 256 个(或其他特定数量个)类别,然后从中选择一个有代表性的特征矢量,并将其作为这个聚类的模型矢量或码字。
  • 使用距离测度选择与输入特征向量最接近的模型矢量,用模型矢量替换输入矢量。
    • 欧几里得距离:假定特征矢量的每个维度同样重要
    • Mahalanobis 距离:考虑每一个维度不同的方差

接下来的过程就和词类标注一样,只需统计训练集中不同音子下每个特征矢量的概率(似然度)。当给定新的特征矢量时,P(音子|特征矢量) = P(特征矢量|音子) × P(音子),计算出每一个音子对应的值,选择最大的即可。

矢量量化中数量很小的码字不足以捕捉变化多端的语音信号,而且语音现象也不是一个简单地符号化的过程,因此现代语音识别一般是直接根据实数值的、连续的输入特征矢量计算观察概率,即计算连续空间的概率密度函数。

解码阶段

声学模型 AM + HMM 发音词典 + LM 输出最可能的单词序列。

语音处理的另一个重要领域是说话人识别,一般分为两个子领域:一个是说话人检验(判断是不是 X),另一个是说话人认同(从 N 个判定中选择一个)。

实际应用中涉及的主要技术:

  • 快速 Fourier 变换、倒谱处理

  • 使用动态规划处理处理翘曲变形(对输入的语音进行模板匹配,动态时间翘曲变形)

  • 基于统计的 HMM + Bayes

    • Viterbi 动态规划解码
    • Jelinek 的栈解码

小结

  • 语音和音位的形式描述方法

    • 词的发音模拟为表示音子和语段的符号串。音子就是言语的发音,用语音符号表示。
    • 语音可分为辅音和元音两大类。辅音以某种方式限制和阻挡气流的运动,从而形成浊音或清音。元音受到的阻挡较小,一般为浊音。元音比辅音响亮,延续时间较长。
    • 辅音和元音结合成音节,粗略地说,音节是一个元音之类的音和它周围的一些联系非常紧密的辅音结合而成的。把单词分割为音节的工作叫音节切分。汉语普通话的声母和韵母之间存在着十分严格的配合关系。
    • 一般把某个音子一类的发音变化叫作一个抽象的类别——音位,是对不同实际语音的一种归纳或抽象。音位和它的变体之间的关系可以用 “音位规则” 表示。
  • 声学语音学和信号

    • 声学分析的基础是正弦余弦函数。语音处理的第一步是把模拟信号转为数字信号,又分抽样和量化两个步骤。
    • 音高和响度是两个重要的感知特性,与频率和音强有关。
      • 声带振动产生声波,这个振动的频率叫作基音频率(基频),记为 F。
      • 音强是对于人类听觉阈值的强度归一化,用分贝度量,如果阈值的压强 $$P_0 = 2 * 10^5 Pa$$ ,那么音强为:$$10 \lg \frac{1}{NP_0} \sum_{i=1}^{N} x_i^2$$ (振幅就是声音的压强水平)
    • 一般在 100-1000 Hz 范围内,音高与频率是线性相关的,对于音高感知的计量采用 “美”:如果一对语音在感知上它们的音高听起来是等距离的,就是以相同数目的 “美” 被分开的,“美” 的频率 m 可以根据粗糙的声学频率计算:$$m=1127 \ln (1 + \frac{f}{700})$$
    • 响度与信号强度感知有关,振幅大的听起来会觉得响,但不是线性关系
    • 根据傅里叶变换,可以用声谱表示频率,声谱中最容易看到的声谱峰是区别不同语音的最明显的特征;声谱峰是音子的声谱特征的 “签名”。
    • 声谱表示某一时刻的声波的频率成分,频谱表示这些不同的频率是怎样使波形随时间改变而改变的,相当于把声波的三个维(时间、频率和振幅)可视化。频谱横轴为时间,纵轴为频率,沿纵轴亮度不同的条纹就是声音压强水平,每一个条纹就相当于一个声谱。频谱中每一个暗色条纹(条纹中的一段)叫作共振峰。
  • 语音自动合成的方法

    • 语音自动合成就是把文本映射为波形,有两步:
      • 文本分析:将输入文本转换为语音内部表示
      • 波形合成:将内部表示转换为波形
    • 文本分析又分为文本归一化、语音分析、韵律分析等部分
      • 文本归一化:句子的词例还原,把文本片段切分成彼此分开的话段;处理非标准词,数字、首字母缩写词、普通缩写词等。
      • 语音分析:针对已经归一化的单词符号串中的每一个单词,产生出单词的发音。最重要的一个组成部分是大规模发音词典。但有两个方面需要加强,一方面是命名实体(包括人名、地理名称、商业机构名称等,使用发音词典),一方面是未知词(采用 “字位-音位转换” 的方法)。
      • 韵律分析:一般在比语音更长的语言单位上起作用,也叫超音段现象,三个主要的音系学特征:突显度、结构、调。突现的音节一般比非突现的音节读的重一些、长一些;韵律的短语边界通常有停顿,边界之前的音节变长,有时边界处音高变低;语调的不同规则表现为基频曲拱(F0)的差异。
      • TTS 的主要任务是生成韵律的适当的语言表示,并且从这样的语言表示出发,生成适当的声学模式,而这样的声学模式将表现为输出语音的波形。这样的一个韵律成分在 TTS 系统中的输出就是音子的一个序列,每个音子都具有一个音延的值和一个音高的值。每个音子的音延与语音上下文有关。F0 的值受到上面讨论过的各种因素的影响,包括词重音、句子的重读或焦点成分以及话语的语调。
    • 波形合成又分为单元选择、单元数据库等部分。
      • 20 世纪 50 年代初人们提出了波形合成的三种主要的泛型:毗连合成、共振峰合成、发音合成。
      • 共振峰合成试图建立规则来生成人工声谱,其中包括生成共振峰的规则。发音合成试图直接给声道和发音过程的物理机制建模。
  • 语音自动识别的方法

    • 语音识别参数:
      • 词汇量大小
      • 语音流畅度和自然度
      • 信道和噪声
      • 说话人的语音特征
    • ASR 目前的重点是大词汇量连续语音识别 (LVCSR),占统治地位的范式是 HMM。语音识别可以分为三个阶段:特征抽取、声学建模、解码。
    • 特征抽取:获取观察值 O,信号处理阶段,语音的声学波形按照音片的时间框架抽样,把音片的时间框架转换成声谱特征,每一个时间框架的窗口用矢量表示,每一个矢量大约包括 39 个特征,用以表示声谱的信息以及能量大小和声谱变化的信息。最普通的方法是 mel 频率倒谱系数,MFCC 是建立在倒谱的思想上的。
      • 预加重:加重高频段的能量,使用滤波器进行。原因是声谱斜移 (频率高能量下降的现象)。
      • 加窗:语音的统计特性在时间上不恒定,因此从一个小窗口抽取波形,并假定在该区域内是恒定的。
      • 离散傅里叶变换 (DFT):对抽样的离散时间信号的离散频带,抽取其声谱信息,常用的算法是快速傅里叶变换 (FFT)。
      • mel 滤波器组和对数表示:因为人类听觉对高频不敏感,所以把 DFT 输出的频率改为 “美” 标度。
      • 倒谱:逆向傅里叶变换(iDFT)。
      • Delta 特征与能量生成 39 个特征。
    • 声学建模:获取观察似然读 P(O|W) 和先验概率 P(W),音子识别阶段,对于给定的语言单位 (单词、音子、次音子) 计算观察到的声谱特征矢量的似然度。
      • 把输入矢量映射为离散符号,叫作矢量量化(VQ)。一个矢量量化系统使用三个特征刻画:码本、聚类算法、距离测度。
      • 矢量量化中数量很小的码字不足以捕捉变化多端的语音信号,而且语音现象也不是一个简单地符号化的过程,因此现代语音识别一般是直接根据实数值的、连续的输入特征矢量计算观察概率,即计算连续空间的概率密度函数。
    • 解码:获取文本 W,声学模型 AM + HMM 单词发音词典 + 语言模型 LM 输出最可能的单词序列,HMM 发音词典就是单词的发音表,其中每一个发音用一个音子串表示。

这章内容有点繁琐,信号处理那块还有些难度,不是很容易理解。不过语音处理也是 NLP 的一个重要组成领域,作为一个入门的了解应该是足够了。