Practice 2 HARK による同時発話の分離と認識 HARK グループ大塚琢馬 Practice 2: 概要 HARK で複数話者同時認識を行う 目的 定位 分離 認識機能の実行方法を学ぶ Practice 2 でやること HARK の音源分離の概要を確認 TSP 信号から分離用伝達関数を作成 harktool3 を使用 定位 分離 認識用ネットワークファイルの確認 ネットワークファイルの実行
Practice 2: 同時発話認識の流れ 1 2 からあげ定食 混合音声の多チャンネル入力 ( ファイル or マイクアレー ) 音源定位音源方向, 4 マイク配置 とんこつラーメン 3 特徴抽出 音声認識 音源分離 Practice 2: システムブロック図 同時発話の混合音から音源定位 分離 認識 波形読込 FFT Geometric High-order Dicorrelation-based Source Separation 音源定位 音源分離 音声認識用 MUSIC 法 GHDSS 法 特徴抽出 MSLS 特徴量 定位用伝達関数 practice 1 で作成済 分離用伝達関数 practice 2 で作成 FlowDesigner 音声認識のリクエスト socket 通信 音声認識器 Julius
Practice 2: 予定 1. 分離用伝達関数の作成 harktool3 を使用 さきほど録音した TSP 信号を元に作成 2. 定位 分離 認識用ネットワークファイルを確認 3. 動作確認 事前に用意された以下のファイルを使用 a. 定位 分離用伝達関数ファイル b. シミュレーション合成された同時発話音声ファイル c. 音声認識設定ファイル Practice 2: 準備 端末にて次のコマンドを入力 cd ~/practice2 サウンド設定 ( 任意 ) VMware Player 右下 サウンドデバイスが無効 (NG) クリックして 接続 を選択 Ubuntu でも音量調整上部 サウンドデバイスが有効 (OK) 緑の丸がつく
Practice 2 harktool3 を用いた分離用伝達関数作成 Practice 2: 分離用伝達関数作成 基本的に定位用伝達関数の作り方と同じ 1. harktool3 起動 2. TSP ListFile, MICARY LocationFile を作成 Practice 1 で作成済み 3. 分離用伝達関数ファイル生成 4. Noise LocationFile を作成 ( 任意 ) 既知の雑音源の方向を記述
Practice 2: harktool3 を起動 端末で以下を入力 harktool3 ファイル 新規 (Ctrl+N) 1. TSP ListFile 2. MICARY LocationFile 3. Noise LocationFile ( 任意 ) Practice 2: TSP ListFile の作成 Practice 1 のときと同様 TSP ListFile テンプレートの作成方向角の例 0 355, 間隔 5 度 tsp ファイルが hogehoge/tsp_d000.wavh hogehoge/tsp_d005.wav hogehoge/tsp_d010.wav hogehoge/tsp_d350.wav hogehoge/tsp_d355.wav g のとき ファイル文字列 の例 /home/harkuser/hogehoge/tsp_d#degree#.wav 適当な名前で保存 適当な名前で保存例 : practice2 ディレクトリに sep tsp list
Practice 2: MICARY LocationFile の作成 MICARY LocationFile 測定伝達関数を使用する場合は適当でよい テンプレートは円周上のマイク配置を仮定 マイク数に応じたテンプレート作成その後, 実際の値を書き込む 例 (6 チャネルマイクロフォンアレーの場合 ) 1. 間隔を 60 度にしてテンプレート作成 2. 各マイク (Position 0 5) の座標を書きこむ 保存例 : practice2 ディレクトリに sep micary list Practice 3: 分離用伝達関数作成 1. harktool3 ファイル 新規 分離用伝達関数ファイル 2. 各種項目設定 音声信号データ : TSP MICARY LocationFile: MICARY LocationFile タブ生成ファイル例 /home/harkuser/practice2/sep micary list ImpulseResponse ListFile: l TSP ListFile タブ生成ファイル例 /home/harkuser/practice2/sep tsp list その他はデフォルト値
Practice 2: 伝達関数の確認 伝達関数ファイルの保存 : ファイル 保存 (Ctrl+S) 例 : practice2 ディレクトリ my sep tf.dat マイク位置, 伝達関数の可視化が可能 見たい項目の プロットする をダブルクリック Separation TF タブが出来ると成功 Practice 2: Noise LocationFile 概要 定常雑音源の位置を指定 特定方向の音を常にキャンセルするよう働くロボットのモーターノイズ, 正面が原点正方向テレビの音など音源 図のような場合 1. テンプレートの作成 2. 方向角 60 度に指定 45[deg] 60 [deg] 0[deg] 角度間隔 ロボット 負方向 -45[deg]
Practice 2: Noise LocationFile 使い方 GHDSS モジュールのプロパティで指定 1. FIXED_NOISE を true にする FIXED_NOISE_FILENAME が出てくる 2. FIXED_NOISE_FILENAME に harktool3 で作成したノイズ音源方向ファイル名 Practice 2 HARK での定位 分離 認識に必要なファイルの確認
Practice 2: 必要なファイル (1/4) 1. MultiSpeechRecog.n (XML 形式 ) FlowDesigner で作成したネットワークファイル ( 本体 ) スクリプト言語のように実行可能./MultiSpeechRecog.n 2. MultiSpeech.wav ( 多チャンネル wave ファイル ) 8 本のマイクで録音された 8ch の波形データ 通常の再生ソフトでは再生できない (WindowsMedia Player など ) 再生や波形閲覧にはwavesurferなどを使用 8ch マイクロフォンアレー Practice 2: 必要なファイル (2/4) 3. loc_ tf.dat, sep_ tf.dat ( バイナリ ) 音源定位 / 分離に用いる伝達関数部屋の残響 マイクの相対位置などの情報をもつ 実際の作成手順 1. TSP 信号を再生 + 録音 2. harktool3 を用いて変換 マイク位置情報からでも作成は可能 TSP 測定の方が精度は良い ( 事前情報が多い ) Mic. Array Sound source マイク分の伝達関数
Practice 2: 必要なファイル (3/4) 4. julius.conf 音声認識器 Julius の動作の設定を記述 julius_mft input mfcnet mfcnetはオリジナル Julius に無いモード ネットワーク越しにMSLSを送信 5. hmmdefs.gz 音声認識用 HMM のパラメータを記述 ただし HMM は MSLS で学習されている (MSLS: スペクトル特徴量 ) Practice 2: 必要なファイル (4/4) 7. logicaltri 可能な Triphone のリストを記述 8. order.(dfa dict) 発話内容の辞書など 9. transcription _ list*.txt MultiSpeech.wav の発話の書き起こしデータ ( 正解 ) 各ファイルの同じ行の語が同時発話されている 焼き魚定食 同時発話 サイコロステーキ サイコロステーキ 松坂牛ステーキ 松坂牛ステーキ 上にぎり list1.txt list2.txt
Practice 2: 必要なファイルまとめ ファイルの種類作り方用途 ネットワークファイル (MultiSpeechRecog.n) FlowDesigner を使用 HARK を利用した定位 分離 特徴量抽出 混合音ファイル or マイクロフォンアレーと 定位 分離 認識の 混合音ストリーム入力 A/D デバイス * を利用 対象となる音 定位 分離用伝達関数ファイル 録音したTSP 信号とマイク配置から harktool 音源定位 音源分離音源分離 (loc_tf.dat, sep_tf.dat) を用いて作成 julius 設定ファイル (julius.conf) 音響モデル (hmmdefs.gz) Triphone 記述ファイル (logicaltri) エディタなどで書く 外部ツール (HTK など ) * 外部ツール (HTK など ) * 単語辞書ファイル エディタ 外部ツール使用 * (order.dfa, order.dict) (Julius 添付ツール等 ) julius の入力方法や使用する音響モデルを指定 音声認識 音声認識 音声認識 * HARK Document 参照 Practice 2: ネットワークファイルの確認 flowdesigner MultiSpeechRecog.n XML をパースして GUI に表示 認識システムは 2つのネットワークで構成 MAIN (subnet): C 言語で言う main 関数のようなもの MAIN_LOOP (iterator): 繰り返し実行 CONDITION が終了条件クリックでクリックで MAIN_LOOP 表示 MAIN 表示
Practice 2: Main の構成 認識させる音声ファイル名の指定 MultiSpeech.wav これが定位, 分離, 認識を行う ファイルディスクリプタの生成 Practice 2. MAIN_LOOP の構成 1. 波形取得 短時間フーリエ変換 2. 音源定位 3. 音源分離 4. 音声特徴抽出 5. 音声認識 ( 特徴量をjuliusに送信 )
Practice 2 HARK を使って認識を行う Practice 2: 認識率の評価実験 (1/2) 実験内容 30 単語の同時発話を認識し 認識率を求める 1. 音声認識器の実行 julius_mft -C julius.conf 2>&1 tee result.txt & Julius の実行時の設定ファイル hmmdefs.gz, logicaltri はこのファイル中で指定されている 2. ネットワークファイルの実行 julius 実行結果を result.txt に書き出し./Recognition.sh i または./MultiSpeechRecog.n MultiSpeech.wav \ loc_tf.dat sep_tf.dat
Practice 2: FlowDesigner tips コマンドライン引数を指定する MAIN タブにて ノードを右クリック プロパティ Type: subnet_param Value: ARG n 1つ目の引数は ARG1 Practice 2: FlowDesigner Tips Iterator のプロパティに値を渡す MAIN_LOOP タブにて 外部からパラメータを設定したいノードのプロパティ Type: subnet_param Value: Iterator のプロパティに表示させたい項目名例 : Value に foo と入れると MAIN_LOOP のプロパティに foo 追加
Practice 2: 認識率の評価実験 (2/2) 音源方向 認識率の評価 認識結果 result.txt の解析スクリプトを実行 許容誤差./score.rb result.txt t t [ 正解ファイル ] [ 音源方向 ] [ 許容誤差 ] 認識率 単語正解 指定方向発話 音源方向 ±5 度の音声を正解データと比較./score.rb result.txt transcription_list1.txt 60 5./score.rb result.txt transcription_list2.txt 60 5 まとめ HARK による音源定位 分離 認識を体験 できるようになったこと 1. harktool3 を使った分離用伝達関数作成 2. Julius と HARK を用いた混合音声認識 3. FlowDesigner に引数を導入