「[[.NET 開発基盤部会 Wiki>http://dotnetdevelopmentinfrastructure.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -[[戻る>音声処理]]([[要素技術 > 非構造化データ処理 / 人工知能(AI)>要素技術]]、[[データ分析 > 非構造化データ処理>データ分析#p79a1ae5]]、[[深層学習(deep learning)]]) --[[言語処理(AI)]] --音声処理(AI) --[[画像処理(AI)>画像処理とコンピュータビジョン(AI)]] *目次 [#j4dbc895] #contents *概要 [#w2a024a8] 音声処理について纏める。 **音声合成 [#p26ca711] -[[音声認識>#r69c330c]]の逆プロセス。 -文章から自然な音声を生成する(text to speach) **音声認識 [#r69c330c] 音声データを解析して、何を発音しているのかを判別 ***精度測定 [#d5d73c26] -文字誤り率(CER) -単語誤り率(WER):コチラが一般的な評価尺度 ***プロセス [#sf8ac612] 音声 → 音素 → 文字列 → 単語 → 単語列 -プロセス1 --雑音・残響抑圧 (入力:音声 出力:音声) --音声を認識したい対象以外の雑音を分離する -プロセス2 --音素状態認識 (入力:音声 出力:音素) --音声の周波数スペクトル,すなわち音響特徴量を~ インプットとして,音素状態のカテゴリに分類する -プロセス3 --音素モデル (入力:音素 出力:文字列) --音素がどの文字であるかを推定する -プロセス4 --単語辞書 (入力:文字列 出力:単語) --認識した文字列から単語を特定し認識する -プロセス5 --言語モデル (入力:単語 出力:単語列) --単語系列仮説の尤度を評価する -プロセス1~5 プロセス1~5を纏めて,すなわち, --入力:音声 --出力:単語列 >とする学習手法のことをEnd-to-End音声認識と呼ぶ。 *詳細(音声合成) [#rec89900] -従来:波形接続型音声合成と統計的パラメトリック音声合成 -WaveNet:深層学習を用い既存の音声合成モデルより自然な音声を合成できる。 **体系 [#d8727c5e] ***波形接続型音声合成 [#i7fefb1d] -あらかじめ録音された音声を分解し、その素片を連結して音声を合成する手法。 -録音されたテキストに近い文章が入力なら自然な音声で文章が読みあげらる。 -問題点 --発話速度や抑揚が多少変更できる程度 --急激な抑揚や感情を加えることが難しい(機械っぽさが残る) --録音されている音声以外で読みあげることができない。 ***統計的パラメトリック音声合成 [#lbe6d8d5] -生の音声を入力しその音声を学習したモデルを構築 -生成モデルの出力をもとに音声を合成する手法。 -モデルへの入力(男性女性・言語指定等)を変えれば多様な音声で読みあげ可能 -問題点 --生成された音声の品質が劣る ***深層学習を用いた音声合成(WaveNet) [#td2a4f7a] -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は使わない) |#ref(CausalConvolution.png,left,nowrap,イメージ,50%)| |https://zenn.dev/bilzard/articles/a1d930e42299bf| --Dilated Causal Convolution~ Dilated Causal Convolutionは過去の入力データをできるだけ多く畳み込めるよう設計された畳み込み層。 ---音声データの典型的なサンプリング周波数16kHzで~ 1秒間の依存関係は16000サンプル間の依存関係に相当。 ---これほど長い系列信号を自己回帰モデルで扱うのは極めて難しい。 ---層が深くなるにつれて、畳み込むノード(=Dilation)を離した結果、~ 入力できる過去のサンプル数を指数関数的に増やすことが可能になった。 |#ref(DilatedCausalConvolution.gif,left,nowrap,イメージ)| |https://procedural-generation.isaackarth.com/2016/09/09/wavenet-weve-seen-neural-networks-used-to.html| --Gated Activation Unit~ Dilated Causal Convolutionの出力に活性化関数のtanhとsigmoidの2つを適用しかけ合わせる。 --Residual Block ---Dilated Causal Convolution + Gated Activation Unit から構成される。 ---[[ResNet>畳み込みニューラルネットワーク(CNN)#z4eca8cf]]の構造をWaveNetにも適用、層の入力を参照した残差関数を学習する。 --Residual Net~ 次のResidual block への入力は一個前のResidual blockの出力とそれに使われた入力が足し合わされたものになる。 |Residual Block|Residual Net|h |#ref(ResidualBlock.png,left,nowrap,イメージ,50%)|#ref(ResidualNet.png,left,nowrap,イメージ,50%)| |>|#ref(WaveNet.png,left,nowrap,イメージ)| |>|https://qiita.com/kshina76/items/910ab0b863cb9d13c2ca| **活用例 [#n87b792f] ***アナウンス、ナレーション [#jc2c567a] ***ナビゲーション / トレーニング・システム [#uaab51e5] *詳細(音声認識) [#gd320b19] **体系 [#u902a467] [[HMM>#xa24bf6a]] → [[DNN>#na46b5f8]]で、[[音声認識>#r69c330c]]の性能向上。 ***音声分析 [#n856b454] -音声から必要な特徴量を抽出する処理 --フォルマント:音声の複数の周波数のピーク --ケプストラム:周波数スペクトルをフーリエ変換して得る。 -以下の二つの問題を解決できる。 --計算量が多くなる。 --ノイズを含んでいる。 -前処理 --アナログデジタル変換~ アナログな連続値を離散的なデジタル値に変換する。 --高域強調 ---人間は高域の音を小さく感じる。 ---補償で一般に1オクターブ上がる毎に6dB大きくする。 --音声フレーム ---時系列音声分析をするとき、一定の時間感覚で特徴量を抽出 ---切り出す間隔をフレーム周期や窓長 ---切り出された分析の対象を音声フレーム ---窓関数をかけることで両端を滑らかにしつつ切り出す。 --音声区間検出 --音声区間検出~ 音声が存在する区間のみを検出する -特徴量の抽出~ 音声フレームの信号は定常であると仮定して、~ それに対して高域強調を施した時系列信号を形成します。 --特徴量 ---音声信号スペクトル:~ 声の高さを表す(使用しない特徴量)。 ---スペクトル包絡:~ 音声の音色の違いを表す(音声認識で使用する特徴量)。 ---メル周波数ケプストラム係数(MFCC):~ 音色・楽器音の音色の違いを表す(音声認識、音楽ジャンル認識で使用する特徴量)。 --高速フーリエ変換~ 音声波形から周波数スペクトログラムを得る。 ---サンプリング周波数をS、窓長をNとしたとき、周波数分解能は S / N ---周波数レンジ = サンプリング周波数 / 2 ---周波数情報が得られる等分点の数 = (サンプリング点数 / 2) + 1 -尺度 --メル尺度:音高の知覚尺度 ---周波数による音の変化は低い場合に敏感で高い場合に鈍感 ---周波数域が低いと分解能が高く、高いと分解能が低い。 ---定義にはファントの式がよく用いられる(グラフ参照) ---1000melの音高の上昇は低周波では2000Hz、高周波では4000Hzの上昇で知覚される。 --バーク尺度:音域の知覚尺度 ***HMM(隠れマルコフモデル) [#xa24bf6a] [[ベイズ統計のHMM(隠れマルコフモデル)>ベイズ統計#p5dfe0f3]]を使う。 -単語音声認識 --1つの単語クラスに1つの音響モデル(HMM)を与える。 --単語クラスが未知であるデータXが与えられた場合、~ 単語クラスに与えられた音響モデル(HMM)から、~ データXがどれぐらいの確率で出ててくるか?求める。 --確率が一番大きいものをデータXの単語クラスとして選ぶ(認識) -連続音声認識 --音響モデルではなく言語モデルを考える。 --前述の「単語」でやったことを「単語列」でやる。 --音素レベルの誤りを認めた上で、文として成立する単語列に変換する。 -観測データに対し、音響モデルと言語モデルの積を~ 最大化する単語系列を組み合わせ最適化によって求める。 --音響モデル:Left-to-Right HMM(隠れマルコフモデル) --言語モデル:[[N-gram LM>言語処理(AI)#e233a5df]](マルコフモデル) -以下の組合せ最適化(一体化したサーチの問題) |>|>|↓ ↓ ↓&br;音声パターン&br;↓ ↓ ↓| |音響モデル|←|音声コーパス| |辞書|←|音声規則+テキスト・コーパス| |>|>|↓ ↓ ↓&br;単語、連続音声&br;↓ ↓ ↓| |言語モデル|←|テキスト・コーパス| |>|>|↓ ↓ ↓&br;単語列(文)&br;↓ ↓ ↓| -サブワードモデル --サブワード:単語より短い音素、音節 --単語はサブワードの連結により構成する。 ***DNN(ディープ・[[ニューラルネットワーク]]) [#na46b5f8] -[[深層学習>深層学習(deep learning)]]のDNN(ディープ・[[ニューラルネットワーク]])を使う。 -系列データを処理できる[[ニューラルネットワーク(CNN、RNN、LSTM)>ニューラルネットワーク#p7254b04]] -言語処理で開発された系列変換処理技術([[エンコーダ・デコーダ構造、自己アテンション>言語処理(AI)#qc74fd48]])を使う。 -CTC、LAS、Speech Transformer、Conformer、CMLM(?) --Connectionist Temporal Classification (CTC) ---入力(Heello、Helloo)が音素数と一致しない問題を解決して出力(Hello) ---RNNの音声認識などの知覚タスクには不向きな問題を解決し、LSTMやRNNと組み合わせて使用される。 ---与えられた入力配列を条件として可能な全てのラベル配列に対する確率分布として解釈するネットワーク。 ---ネットワークの出力をラベルシーケンスの[[条件付き確率>ベイズ統計#v372de91]]分布に変換する点が重要。 --LAS ---Encoder, DecoderにLSTMが用いられる。 ---Attention based Encoder-Decoderとほとんど同じ。 --RNN-Transducer~ CTCにおける「条件付独立性」を排除するため前の出力の文字を入力に加える。 --Speech Transformer~ Transformerが出たことで、DNN-HMMも凌駕するようになって、一段と注目度が上がった --Conformer~ TransformerとCNNを組み合わせたモデル --Conditional Masked Language Model(CMLM) **活用例 [#r330a3de] ***自動音声口述筆記 [#u82a1a0a] -会話音声書面記録 -コミュニケーション支援(問診など ***エンリッチメント系 [#c28cf878] 音声アノテーション -音そのものに対するタグ付け -音声が示す意味に対するタグ付け *参考 [#kf56d280] -音声認識 - Wikipedia~ https://ja.wikipedia.org/wiki/%E9%9F%B3%E5%A3%B0%E8%AA%8D%E8%AD%98 -音声認識・合成技術の代表的アルゴリズム「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/ **Qiita [#ef9109da] -WaveNetの解説とkeras実装~ https://qiita.com/kshina76/items/910ab0b863cb9d13c2ca -音声処理で参考になったサイトまとめ~ http://qiita.com/eve_yk/items/07bc094538f2d50841f4 **ライブラリ [#r2eb7830] ***オープンソース [#oa24f16e] ***プロダクト [#j8bc15eb] **サービス [#n4cdeb66] ***Google Cloud Speech API [#h3334ef0] -Speech API - 音声認識 | Google Cloud Platform~ https://cloud.google.com/speech/ ***Bing Speech API [#a16caa1d] -Bing Speech API — 音声認識 | Microsoft Azure~ https://azure.microsoft.com/ja-jp/services/cognitive-services/speech/ ***Speech to Text [#w87b8338] -IBM - Speech to Text 音声認識 | Watson Developer Cloud - Japan~ https://www.ibm.com/watson/jp-ja/developercloud/speech-to-text.html **ソリューション [#y241d14d] ***AmiVoice [#a23bd152] -製品・サービストップ|音声認識の株式会社アドバンスト・メディア~ https://www.advanced-media.co.jp/products -音声認識ソフト『AmiVoice SP2』を半年間使ってみた所感(辛口レビュー) - Webライターとして生きる~ http://writer.hateblo.jp/entry/2016/12/01/155944 ***Voice-Series [#v096c666] -音声ソリューション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