Pythonで学ぶ音声認識 (機械学習実践シリーズ)

JSUTコーパス

  • 48kHz
    • 一般的に16kHzでASRが多い
    • 電話なら8kHz
  • 読み間違いに対してlevelを設定
    • text_level0: オリジナル = kana_level0 ひらがな化
    • text_level1: オリジナルの改変
    • text_level2: まれな読み間違いを反映したもの = kana_level2 ひらがな化
    • kana_level3: 発音ミスを反映したひらがな化.,はポーズを示す
    • phone_level3: kana_level2の音素列
  • 参考
    • 話者がテキストをテキスト通りに読んでない場合: 0133 テキストは「高い」,読みは「強い」→level0では「たかい」、level2, level3は「つよい」
    • テキスト通りではあるものの読みが間違えている場合: 1124 「門戸」が「もんど」と読まれている.level0, level2は正しい「もんこ」,level3は「もんど」

(離散)フーリエ変換

  • あらゆる周期的な信号を,周波数の異なる三角関数の和で表現
    • 時系列データ(時間領域)→スペクトル(周波数領域)
    • 逆フーリエ変換は戻す処理
  • (複素)スペクトル $y(k)$
  • 振幅スペクトル $|y(k)|$
  • パワースペクトル $|y(k)|^2$
  • 位相スペクトル: 使わない
  • 高速フーリエ変換
    • サンプル数は2のべき乗でないといけない
  • フロアリング処理
  • サンプリング定理
    • サンプリング周波数Fで規則した音声にはF/2の周波数までの情報しか含まれていない
    • 上限周波数=ナイキスト周波数

短時間フーリエ変換

  • フレームサイズ
  • フレームシフト
    • フレームの間隔
  • 窓関数
    • 真の波の周期と位置しない分析区間でフーリエ変換するためにかける関数
    • ハミング窓が音声認識では一般的
    • 両端で不連続な結合が小さくなり分析結果のノイズ低減
  • スペクトログラム
    • 横軸が時間,縦軸が周波数,色の濃淡がその「時間・周波数成分」の振幅の大きさで,白いと大きい
    • 子音→波模様がなく高周波数帯域の成分が大きい

対数メルフィルタバンク (FBANK)

  • ディザリング処理
    • 無音に対してフーリエ変換かけると,対数値がマイナス無限大に
    • それを避けるため,非常に小さなノイズを加えておく
  • 直流(DC)成分除去
    • 振幅値の平均を0にするため,フレームごとに振幅値の平均でひく
  • 高域強調(プリエンファシス)
    • 高周波数ほどマイクに到達するまでに減衰していく
    • それを補うため
  • フィルタバンク分析
    • 振幅(あるいはパワー)スペクトルの次元を削減する方法
    • 一定範囲ごとに周波数成分の値を集約
    • ただし単純に等間隔だと重要な情報まで削られてしまう
  • メルフィルタバンク
    • 聴覚特性に基づいた集約方法
    • メル尺度: 高周波数では知覚しにくくなる

ケプストラム分析

  • 聴覚特性に加え,発声のメカニズムも考慮して圧縮する特徴量
  • 声帯振動のパワースペクトル: 周波数軸上で細かくギザギザ
  • 基本周波数: このうち先頭のピークの周波数
    • 基本周波数が低いと低い声
  • 声帯振動は,口腔や鼻腔などで構成される声道を通って口から発せられる
    • このとき声道内で,特定の周波数が共鳴(共振)
    • フォルマント: この共振周波数のこと
    • 舌や口を動かして声道の形を変えることで共振特性が変わり,異なる音になる
  • ケプストラム分析
    • 音声のパワースペクトルから声道振動成分と声道共振特性成分に分離
      • 時間波形をフーリエ変換して得た「音声のパワースペクトル」$|x(k)|^2$(kは周波数)
      • $|x(k)|^2 = h(k) |s(k)|^2$ (「声道の共振特性」$h(k)$と「声帯振動のパワースペクトル」$|s(k)|^2$の積)
      • 両辺logとると,和の形→2種類の信号の重ね合わせ→逆フーリエ変換で分離できる
      • $h(k)$は緩やかな変動(低周波数帯域)で,$s(k)$は細かい振動(高周波数帯域)
    • ケプストラム
      • 対数パワースペクトルを逆フーリエ変換したもの
      • 横軸はケフレンシ(単位は[秒]に等しい)
      • 高域をカット(リフタリング)した後,フーリエ変換して対数パワースペクトル領域に戻すと声道共振特性が得られる
  • スペクトル包絡成分   - 高フレケンシ帯域をカットしてケプストラムをフーリエ変換して得る
    • ピークを第1〜4フォルマントとよぶ
  • 微細構造包絡成分   - 低いフレケンシ帯域をカットしてケプストラムをフーリエ変換して得る
    • 最も低い周波数のピークが基本周波数

メル周波数ケプストラム(MFCC)特徴量

  • MFCC: メルフィルタバンクに対してケプストラムを計算したもの
  • FBANKに対して離散コサイン変換(DCT)を適用して得る

DPマッチング

  • 1980年代以前の手法
  • テンプレートを用意して,時間的ゆらぎを考慮してアライメントする
  • Dynamic Time Warping (DTW)
  • ただし,大量のテンプレートを用意してマッチングしているのは現実的ではない

GMM-HMM

  • MFCCの特徴量の分布をガウンシアン(正規分布)で近似
  • 生成モデル
  • ガウシアンのパラメータは分散と平均で表現される
  • GMM: ガウシアンの混合
  • EMアルゴリズムで最適化
  • GMM-HMM: 各音素・各状態におけるGMMのパラメータと遷移確率
  • 前向き後ろ向きアルゴリズム
  • ビタビアルゴリズム

DNN-HMM

  • 2010ころから
  • 入力: 音声特徴量: 前後のフレームの特徴量を次元方向につなぎ合わせたもの (splicing)
    • 平均0, 分散1となるように各次元を正規化する
  • 出力: HMM状態の事後確率
    • 出力ノード数は全音素に含まれる全状態の数
    • one hotベクトルにしてクロスエントロピーで学習
  • 学習: 状態アライメントの推定

HMMベースの大語彙連続音声認識

  • HMM, 発音辞書, 言語モデルを表すWFSTそれぞれを合成

Ent-to-end

  • CTC: 出力テキスト系列が正解になることを目的関数として学習
    • ブランク
  • Attention encoder-decoder
    • RNNベース
    • Transformerベース
      • self attention: 入力系列同士・出力系列同士でAttentionを計算する機構を用いて時間的依存関係とコンテキスト情報ウオ表現
  • マルチタスク学習: CTCとAttention encoder-decoderの両方を使う
  • wave2vec 2.0
    • 特徴量抽出も任せる
    • ラベルなしの大量データを使て自己教師あり学習

References