Problem
HARK を使って音声を認識してみたいが,やり方が分からない.
Solution
HARK を使って音声認識をするためには,大きく分けて二つの処理が必要と なる.
HARK を使って波形から認識のための特徴量を抽出する
Julius_mft を使って特徴量の認識を行う
処理に必要な各種ファイルやパラメータ設定などが複雑であるので, 全てを一から準備するより ap:samples]付録 の サンプルを参考に適宜変更を加えると良い.
:
HARK でサポートする特徴量 MSLS,MFCC を音声から抽出する ネットワークの作成方法について説明する.ここでは, 一般的に用いられる MSLS,$\Delta $ MSLS,$\Delta $パワー もしくは MFCC,$\Delta $ MFCC,$\Delta $パワーを抽出 するネットワークについて説明する.
図 2.13,2.14 は周波数領域の音声から MSLS,MFCC をそれぞれ抽出するネットワーク の例である.PreEmphasis ,MelFilterBank ,Delta ,FeatureRemover モジュールと MSLSExtraction もしくは MFCCExtraction モジュール を用いて特徴量を抽出している.最後の SpeechRecognitionClient モジュールは,抽出した特徴量を Julius_mft にソケット通信により送信 するためのモジュールである.音源方向ごとの認識を行うため,入力には 特徴量の他に音源定位結果も必要である.
特徴量抽出が正しくできているかを確認するためなど,ファイルに 特徴量を保存したい場合には,SaveFeatures , SaveHTKFeatures モジュールを使用すると良い.
:
認識は音声認識エンジン Julius を基に拡張された Julius_mft を用いて行う.基本的な使い方は Julius と同様であるため, Julius を使ったことのないユーザーは, Julius のウェブページ を参考に基本的な Julius の使い方を習得するとよい.
HARK で抽出した特徴量をソケット通信で受け取り認識を行うためには 設定ファイルの入力形式を “mfcnet” にする必要がある. 以下は設定の例である.
-input mfcnet -plugindir /usr/lib/julius_plugin -notypecheck -h hmmdefs -hlist triphones -gram sample -v sample.dict
このうち,はじめの 3 行は HARK から特徴量を送信して認識を 行うために必要となる.1 行目は特徴量をソケット通信で受けとるため, 2 行目はソケット通信を可能とするプラグインのインストールされている フォルダへのパスを指定するため,3 行目は Julius_mft の型チェックで HARK で抽出した MSLS 特徴量を使用するための設定である.このうち,2 つ目の パスは各自の環境に応じて適切に設定する必要がある.
Discussion
最もシンプルな方法の一つは,AudioStreamFromWave モジュールを使用して モノラルの音声を読み込み,図 2.13 の PreEmphasis モジュールにつなぐ (PreEmphasis モジュールに時間領域の音声波形を渡す)方法である.分離音の認識を行いたい 場合は,GHDSS モジュールの出力 (周波数領域の波形) を図 2.13 もしくは 2.13 の Synthesize モジュールにつなげば良い.
See Also
Julius_mft の設定に関しては,すでに述べた様に Julius とほとんど同じであるため, Julius のウェブページ を参考にするとよい. 特徴量については,c:Feature]特徴量抽出を, 認識に用いる音響モデルや言語モデルの作成については, c:Models]音響モデルと言語モデルを参考にすると良い. 認識の前に定位や分離などを行っている場合は,それぞれの段階で 正常に処理できているか一つ一つ確認する必要がある ( 「うまく録音できない」 「うまく定位できない」 「うまく分離できない」 「うまく認識できない」)