ニューラルネットワークを使った音声解析
Audioオブジェクト(あるいはファイル)をニューラルネットに適した形式に変換するための基本的ツールはNetEncoderである.Wolfram言語は,さまざまな種類の特徴計算に基づいた音声エンコーダをいくつかネイティブで提供している.これらのエンコーダはすべて低レベルの並列実装を使っているため,高速の計算が可能である.
エンコーダのタイプ
"Audio" | 信号の波形 |
"AudioMelSpectrogram" | 信号の短時間フーリエ変換 |
"AudioMFCC" | 信号のスペクトログラム |
"AudioSpectrogram" | メル尺度上で等間隔の周波数を持つスペクトログラム |
"AudioSTFT" | メルスペクトログラムの対数のFourierDCT |
"Audio"エンコーダは単純に信号の波形を抽出する.これはすべての情報を保存するが,結果の次元はニューラルネットに適したものではない.
"AudioSTFT"エンコーダは信号を分割し,それぞれの分割に対してFourier変換を計算する(この操作全体は短時間フーリエ変換,またはSTFTと呼ばれる).これは時間と周波数両方の情報を提供する.フーリエ変換は可逆なので,もとの信号の情報はすべて保存される.
"AudioSpectrogram"エンコーダはSTFTの大きさの平方を計算し,不要な部分を捨てる.これは特徴の次元を削減するすが,位相の情報は失われる.もとの信号のおおよその再構築を計算することはまだ可能である(InverseSpectrogramを参照のこと).
"AudioMelSpectrogram"エンコーダはスペクトログラムにフィルタバンクを適用する.フィルタバンクの中心の周波数は,音高に対する人間の感覚を模倣した非線形周波数尺度であるメル尺度上で線型に間隔が開く.これはさらに次元を削減する.
"AudioMFCC"エンコーダはメルスペクトログラムの対数のFourierDCTを計算し,高次の係数のいくつかを捨てる.これは非常に高度な次元削減を達成する一方,特に音声信号にとって重要な情報を多く保存する.
"AudioMelSpectrogram"エンコーダの結果をプロットする:
データ拡張
データ拡張は,制限されたデータや削減されたデータを扱うとき,および訓練データの人工的あるいは無関係なトレンドに対してネットをより強力にするために非常に便利である.たとえば,猫や犬の鳴き声の録音を分類するとする.訓練データで犬の鳴き声がすべて雑音の多いマイクで録音されていたら,ネットワークは犬ではなく雑音を認識してしまう可能性がある.
"TimeShift" | ランダム化することのできる量で入力をシフトする | |
"Noise" | Audioの特定のものかファイルのどちらからか,あるいはホワイトノイズとして入力に雑音を加える | |
"Volume" | 入力に,ランダム化することのできる定数を掛ける | |
"Convolution" | Audioの特定のものかファイルのどちらからか,インパルス応答を入力にたたみ込む | |
"VTLP" | 入力に声道長摂動を適用する |
ConvolutionLayerは可変長の入力をサポートする.これは"Interleaving"オプションをTrueに設定することで達成できる. 次に,画像処理で広く使われている"LeNet"アーキテクチャに基づいて,非常に簡単なたたみ込みネットを構築することができる.音声データの可変長の特徴を利用できるようにするために,最終層に少し調整が必要である.
別のアプローチとして完全に再帰型のネットワークを作成するというものがある.このネットはGatedRecurrentLayerのスタックに基づいており,簡単な分類セクションが後続する.規則化を加えるために,再帰層の入力におけるドロップアウトが使われる.
最後の分類層を削除することによって,音声信号の特徴抽出器を得ることが可能である.この特徴抽出器は数字の分類タスクにとって重要であった特徴に関連のあるものとなり得る.つまり,学習された埋込みはどの数字が話されたかについての情報を含むが,話者の特定に関する情報は無視する.
場合によっては,録音の音声イベントを見付けるネットワークを訓練したくても,「弱ラベル」データであることがある.弱ラベルデータでは,ラベルは録音の中にあるイベントが存在したかどうかは分かるが,どこかはわからない.データの制約にかかわらず,弱ラベルデータでの訓練を介して,音声イベントの局所化においてよい結果を得ることが可能である.
"AudioMelSpectrogram"エンコーダを使って,音声信号をネットワークにフィードする.データの量は比較的少ないので,訓練をより効率的にするためにデータ拡張を行うことができる.
ネットは再帰層(GatedRecurrentLayer)のスタック,および時間次元に結果を貯めるためのAggregationLayerに基づいている.これにより,ネットは列ではなく単独の分類結果を出力することができる.
対比損失のあるシャム(Siamese)ネットワーク
埋込みを学ぶ最初の方法として,対比損失のあるシャムネットワークを訓練することがある.これには全く同じネットワークに2つの入力をフィードして,2つの出力の間の距離を計算し,それを対比損失にフィードするというものである.2つの入力が同じクラスに属す場合,距離は最小化される.そうでない場合は,最大化される.
この例は非常に簡単な再帰型ネットワークを使って埋込みを生成する.これは埋込みを訓練するネットも定義する.これは同じネットワークに2つの入力をフィードし,結果の埋込みの距離を計算する必要がある.NetInsertSharedArraysを使うと,2つの入力が厳密に同じネットワークで処理されることを確実にすることができる.
学習された埋込みを使ってNearestFunctionを定義し,例から最も近い信号と最も遠い信号を求める:
事前に訓練された音声特徴抽出器
埋込みを最初から学習する代りに,事前に訓練された音声解析ネットワークを使うことができる.Wolfram Neural Net Repositoryはこれに適したソースである.
AudioIdentifyはバックエンドとして深層ニューラルネットを利用し,音声分類を実行する.このネットワークはAudioSetデータセットで訓練され,それぞれの音声信号は,録音に存在する音声クラスや音源で注釈が付けられる.このラベルは約600のクラスのオントロジーで体系化される.この600のクラスは楽器や音楽のタイプから動物,機械,人間の音声に渡る,広範な音のタイプやソースに及んでいる.
AudioIdentifyネットをインポートして,それをAudioオブジェクトに適用する:
AudioIdentifyネットでは,固定された大きさの塊に分割され,メインのネットがそれぞれの塊のメルスペクトログラムに適用される.それを得るためにはNetExtractを使う."CNN Architectures for Large-Scale Audio Classification"で紹介されているアーキテクチャと同様に,メインのネットにはCNNアーキテクチャ(MobileNet v2に基づく)がある.
NetMapOperatorのコアでネットを抽出する:
AudioIdentifyで使われるネットワークは,音声を認識するためだけではなく,録音から特徴を抽出するためにも使うことができる.これにより,類似性や距離を計算することができる意味的に重要な空間に,任意の信号を埋め込むことが可能にある.
分類タスクを担当する最後の数個の層は削除でき,結果のネットワークは再びもとのNetChainに挿入することができる.このネットは各音声入力に対して,固定サイズの意味的に重要なベクトルを生成する.これはシステム内の高レベル機械学習関数すべてについての特徴検出器として,あるいは新しいニューラルネットを訓練するための出発点として使うことができる.
特徴検出ネットを作成し,FeatureSpacePlotで使う:
別の方法として"VGGish Feature Extractor Trained on YouTube Data"モデルがある.これは特に音声の特徴抽出のためにYouTubeのデータについてGoogleが訓練した構造的に同様なネットである.
FeatureSpacePlotの特徴検出器としてVGGishネットワークを使う:
ネットワークを訓練するために利用できるデータの量が,そのタスクにとって不十分であることがある.この問題には転移学習が有効なことがある.ネットワークを最初から訓練する代りに,異なるが関連したタスクですでに訓練されたネットを出発点として使うことができる.
まずESC-50データセットをダウンロードする.
出発点としてAudioIdentifyのネットワークを使う.
完全なネットを再訓練して,NetTrainのLearningRateMultipliersオプションを指定して分類層だけを訓練する代りに,特徴検出ネットの結果を前もって計算し分類器を訓練する.これにより訓練中に完全なネットを無駄に評価しなくて済む.