-
Notifications
You must be signed in to change notification settings - Fork 0
DNET_SpeechProcessingAI
音声処理について纏める。
- 音声認識の逆プロセス。
- 文章から自然な音声を生成する(text to speech)
音声データを解析して、何を発音しているのかを判別
- 文字誤り率(CER)
- 単語誤り率(WER):コチラが一般的な評価尺度
音声 → 音素 → 文字列 → 単語 → 単語列
-
プロセス1
- 雑音・残響抑圧 (入力:音声 出力:音声)
- 音声を認識したい対象以外の雑音を分離する
-
プロセス2
- 音素状態認識 (入力:音声 出力:音素)
- 音声の周波数スペクトル,すなわち音響特徴量を
インプットとして,音素状態のカテゴリに分類する
-
プロセス3
- 音素モデル (入力:音素 出力:文字列)
- 音素がどの文字であるかを推定する
-
プロセス4
- 単語辞書 (入力:文字列 出力:単語)
- 認識した文字列から単語を特定し認識する
-
プロセス5
- 言語モデル (入力:単語 出力:単語列)
- 単語系列仮説の尤度を評価する
-
プロセス1~5
プロセス1~5を纏めて,すなわち,- 入力:音声
- 出力:単語列
とする学習手法のことをEnd-to-End音声認識と呼ぶ。
- 従来:波形接続型音声合成と統計的パラメトリック音声合成
- WaveNet:深層学習を用い既存の音声合成モデルより自然な音声を合成できる。
-
あらかじめ録音された音声を分解し、その素片を連結して音声を合成する手法。
-
録音されたテキストに近い文章が入力なら自然な音声で文章が読みあげられる。
-
問題点
- 発話速度や抑揚が多少変更できる程度
- 急激な抑揚や感情を加えることが難しい(機械っぽさが残る)
- 録音されている音声以外で読みあげることができない。
-
生の音声を入力しその音声を学習したモデルを構築
-
生成モデルの出力をもとに音声を合成する手法。
-
モデルへの入力(男性女性・言語指定等)を変えれば多様な音声で読みあげ可能
-
問題点
- 生成された音声の品質が劣る
-
WaveNet
https://en.wikipedia.org/wiki/WaveNet\ 音声認識と音声合成のどちらもできるらしいが基本は音声合成。- DNNでRNN的な回帰接続が無いので学習が速い。
- 1秒に16,000個の音声データを学習可能。
-
データの前処理
- 音声データ取得
- 無音区間の除去
- 正規化
- μ-law量子化
- paddingとtrimming
-
モデルの構築
過去のデータ入力にRNNやLSTMではなく畳み込み層を用いる。-
Causal Convolution
- 通常のCovolutionでは将来の時間ステップ xt+1,xt+2,... までも畳み込んでしまう。
- Causal Covolutionは過去の時間ステップ x1,x2,...,xt−1 のみを畳み込むよう設計されている。
- WaveNetではこれをさらに改良したDilated Causal Convolutionを用いる
(Causal Convolutionは使わない)
-

出典:https://zenn.dev/bilzard/articles/a1d930e42299bf
-
Dilated Causal Convolution
Dilated Causal Convolutionは過去の入力データをできるだけ多く畳み込めるよう設計された畳み込み層。- 音声データの典型的なサンプリング周波数16kHzで
1秒間の依存関係は16000サンプル間の依存関係に相当。 - これほど長い系列信号を自己回帰モデルで扱うのは極めて難しい。
- 層が深くなるにつれて、畳み込むノード(=Dilation)を離した結果、
入力できる過去のサンプル数を指数関数的に増やすことが可能になった。
- 音声データの典型的なサンプリング周波数16kHzで

-
Gated Activation Unit
Dilated Causal Convolutionの出力に活性化関数のtanhとsigmoidの2つを適用しかけ合わせる。 -
Residual Block
- Dilated Causal Convolution + Gated Activation Unit から構成される。
- ResNet(畳み込みニューラルネットワーク(CNN)の該当節を参照)の構造を
WaveNetにも適用、層の入力を参照した残差関数を学習する。
-
Residual Net
次のResidual block への入力は
一個前のResidual blockの出力とそれに使われた入力が足し合わされたものになる。
| Residual Block | Residual Net |
|---|---|
![]() |
![]() |

出典:https://qiita.com/kshina76/items/910ab0b863cb9d13c2ca
-
音声から必要な特徴量を抽出する処理
- フォルマント:音声の複数の周波数のピーク
- ケプストラム:周波数スペクトルをフーリエ変換して得る。
-
以下の二つの問題を解決できる。
- 計算量が多くなる。
- ノイズを含んでいる。
-
前処理
-
アナログデジタル変換
アナログな連続値を離散的なデジタル値に変換する。 -
高域強調
- 人間は高域の音を小さく感じる。
- 補償で一般に1オクターブ上がる毎に6dB大きくする。
-
音声フレーム
- 時系列音声分析をするとき、一定の時間間隔で特徴量を抽出
- 切り出す間隔をフレーム周期や窓長
- 切り出された分析の対象を音声フレーム
- 窓関数をかけることで両端を滑らかにしつつ切り出す。
-
音声区間検出
音声が存在する区間のみを検出する
-
-
特徴量の抽出
音声フレームの信号は定常であると仮定して、
それに対して高域強調を施した時系列信号を形成します。-
特徴量
- 音声信号スペクトル:
声の高さを表す(使用しない特徴量)。 - スペクトル包絡:
音声の音色の違いを表す(音声認識で使用する特徴量)。 - メル周波数ケプストラム係数(MFCC):
音色・楽器音の音色の違いを表す(音声認識、音楽ジャンル認識で使用する特徴量)。
- 音声信号スペクトル:
-
高速フーリエ変換
音声波形から周波数スペクトログラムを得る。- サンプリング周波数をS、窓長をNとしたとき、周波数分解能は S / N
- 周波数レンジ = サンプリング周波数 / 2
- 周波数情報が得られる等分点の数 = (サンプリング点数 / 2) + 1
-
-
尺度
-
メル尺度:音高の知覚尺度
- 周波数による音の変化は低い場合に敏感で高い場合に鈍感
- 周波数域が低いと分解能が高く、高いと分解能が低い。
- 定義にはファントの式がよく用いられる(グラフ参照)
- 1000melの音高の上昇は低周波では2000Hz、高周波では4000Hzの上昇で知覚される。
-
バーク尺度:音域の知覚尺度
-
ベイズ統計のHMM(隠れマルコフモデル)(ベイズ統計の該当節を参照)を使う。
-
単語音声認識
-
1つの単語クラスに1つの音響モデル(HMM)を与える。
-
単語クラスが未知であるデータXが与えられた場合、
単語クラスに与えられた音響モデル(HMM)から、
データXがどれぐらいの確率で出てくるか?求める。 -
確率が一番大きいものをデータXの単語クラスとして選ぶ(認識)
-
-
連続音声認識
- 音響モデルではなく言語モデルを考える。
- 前述の「単語」でやったことを「単語列」でやる。
- 音素レベルの誤りを認めた上で、文として成立する単語列に変換する。
-
観測データに対し、音響モデルと言語モデルの積を
最大化する単語系列を組み合わせ最適化によって求める。- 音響モデル:Left-to-Right HMM(隠れマルコフモデル)
- 言語モデル:N-gram LM(言語処理(AI)の該当節を参照)(マルコフモデル)
-
以下の組合せ最適化(一体化したサーチの問題)
↓ ↓ ↓ 音声パターン ↓ ↓ ↓
音響モデル ← 音声コーパス
辞書 ← 音声規則+テキスト・コーパス
↓ ↓ ↓ 単語、連続音声 ↓ ↓ ↓
言語モデル ← テキスト・コーパス
↓ ↓ ↓ 単語列(文) ↓ ↓ ↓
-
サブワードモデル
- サブワード:単語より短い音素、音節
- 単語はサブワードの連結により構成する。
-
深層学習(deep learning)のDNN
(ディープ・ニューラルネットワーク)を使う。 -
系列データを処理できるニューラルネットワーク(CNN、RNN、LSTM)
(ニューラルネットワークの該当節を参照) -
言語処理で開発された系列変換処理技術
(エンコーダ・デコーダ構造、自己アテンション、言語処理(AI)の該当節を参照)を使う。 -
CTC、LAS、Speech Transformer、Conformer、CMLM(?)
-
Connectionist Temporal Classification (CTC)
- 入力(Heello、Helloo)が音素数と一致しない問題を解決して出力(Hello)
- RNNの音声認識などの知覚タスクには不向きな問題を解決し、
LSTMやRNNと組み合わせて使用される。 - 与えられた入力配列を条件として可能な全てのラベル配列に対する確率分布として解釈する
ネットワーク。 - ネットワークの出力をラベルシーケンスの条件付き確率
(ベイズ統計の該当節を参照)分布に変換する点が重要。
-
LAS
- Encoder, DecoderにLSTMが用いられる。
- Attention based Encoder-Decoderとほとんど同じ。
-
RNN-Transducer
CTCにおける「条件付独立性」を排除するため前の出力の文字を入力に加える。 -
Speech Transformer
Transformerが出たことで、DNN-HMMも凌駕するようになって、一段と注目度が上がった -
Conformer
TransformerとCNNを組み合わせたモデル -
Conditional Masked Language Model(CMLM)
-
- 会話音声書面記録
- コミュニケーション支援(問診など)
音声アノテーション
- 音そのものに対するタグ付け
- 音声が示す意味に対するタグ付け
-
音声認識 - Wikipedia
https://ja.wikipedia.org/wiki/音声認識 -
音声認識・合成技術の代表的アルゴリズム「WaveNet」を詳細解説! | DeepSquare
https://deepsquare.jp/2020/04/wavenet/ -
WaveNet - A Generative Model for Raw Audio [arXiv:1609.03499] – ご注文は機械学習ですか?
http://musyoku.github.io/2016/09/18/wavenet-a-generative-model-for-raw-audio/ -
「DNN-HMM」から「End-to-End」へ LINEが取り組む音声認識のしくみ - ログミーTech
https://logmi.jp/tech/articles/323498 -
Google、音声認識APIを公開。Nuanceと直接対決へ | TechCrunch Japan
http://jp.techcrunch.com/2016/03/24/20160323google-opens-access-to-its-speech-recognition-api-going-head-to-head-with-nuance/
- WaveNetの解説とkeras実装
https://qiita.com/kshina76/items/910ab0b863cb9d13c2ca - 音声処理で参考になったサイトまとめ
http://qiita.com/eve_yk/items/07bc094538f2d50841f4
- Speech API - 音声認識 | Google Cloud Platform
https://cloud.google.com/speech/
- Bing Speech API — 音声認識 | Microsoft Azure
https://azure.microsoft.com/ja-jp/services/cognitive-services/speech/
- IBM - Speech to Text 音声認識 | Watson Developer Cloud - Japan
https://www.ibm.com/watson/jp-ja/developercloud/speech-to-text.html
-
製品・サービストップ|音声認識の株式会社アドバンスト・メディア
https://www.advanced-media.co.jp/products -
音声認識ソフト『AmiVoice SP2』を半年間使ってみた所感(辛口レビュー) - Webライターとして生きる
http://writer.hateblo.jp/entry/2016/12/01/155944
-
音声ソリューションVoice-Series|NTTアイティ
http://www.ntt-it.co.jp/product/v-series/index.html- 音声自動応答(IVR)プラットフォーム VoiceMall
http://www.ntt-it.co.jp/product/v-series/voicemall/index.html - 高精度音声認識(ASR)ソリューション SpeechRec
http://www.ntt-it.co.jp/product/v-series/speechrec/index.html - 音声合成(TTS)ソリューション FutureVoice
http://www.ntt-it.co.jp/product/v-series/futurevoice/index.html
- 音声自動応答(IVR)プラットフォーム VoiceMall
移行メモ
「HMM(隠れマルコフモデル)」の組合せ最適化の図は、元の PukiWiki では セルの横結合(
|>|)と&br;を用いた表だったため、 GitHub Wiki ではコード ブロックの流れ図として書き出した。「Residual Block / Residual Net」の表は、元の PukiWiki で 最下段に WaveNet 全体図と出典 URL が横結合で入っていたため、 それらを表の下に書き出した。
「text to speach」→「text to speech」、「読みあげらる」→「読みあげられる」、 「一定の時間感覚で」→「一定の時間間隔で」、「出ててくるか?」→「出てくるか?」に正した。 「(問診など」の閉じ括弧を補った。
Tags: 移行, 人工知能, 音声処理, 音声認識, 音声合成, WaveNet, HMM, DNN, CTC
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。

