ichou1のブログ

主に音声認識、時々、データ分析のことを書く

2018-01-01から1年間の記事一覧

音声認識メモ(Kaldi)その18(Toolkitスクリプト(2))

自前で用意した音声データを認識させる手順はKaldi for Dummies tutorialに説明されている。"for Dummies"("サルでも分かる")という位だから、「yes/no」サンプル(前回の記事)の次に試すのはこれがいいのだろう。流れを大まかに書き出してみると以下のとお…

音声認識メモ(Kaldi)その17(Toolkitスクリプト)

Kaldiは、Bashスクリプトで実行するコマンドをコントロールしている。 今回はスクリプトについて確認してみる。GitHubからダウンロードした一式のディレクトリ構成については以下のとおり。 egs (今回の確認対象) src (ソースコード) misc (論文など?未確認…

音声認識メモ(Kaldi)その16(Backpropagation Dan's DNN(nnet2))

前回の続き。 Backpropagation(誤差逆伝播法)によるパラメータ更新の流れを追ってみる。Softmaxの出力結果(確率)が以下のとおりであったとする(正解となるpdf-classのみ記載)。 小数点第6位切り捨て確率の逆数にweightを掛けたものを求める(今回、wei…

音声認識メモ(Kaldi)その15(活性化関数 Dan's DNN(nnet2))

活性化関数に関するメモ。公式サイトの隠れ層に関する説明には、"tanh"(双曲線正接関数)と"p-norm"が登場する。この”p-norm”というのは、論文によると活性化関数"maxout"からヒントを得た独自版らしい。「egs/rm/s5/local/run_nnet2.sh」のコメントにも書…

音声認識メモ(Kaldi)その14(特徴量変換 Dan's DNN(nnet2))

LDA変換用パラメータは教師データの統計をもとに作成する。 統計データ作成には「bin/acc-lda」コマンドを使う。 「bin/acc-lda」コマンド Accumulate LDA statistics based on pdf-ids. Usage: acc-lda [options] <transition-gmm/model> <features-rspecifier> <posteriors-rspecifier> <lda-acc-out>インプットは以下のとおり。 モデル(GM</lda-acc-out></posteriors-rspecifier></features-rspecifier></transition-gmm/model>…

線形変換(無相関化と次元削減)

音声認識の前処理やパターン分類で使われる線形変換についてメモしておく。 ここでは、"無相関化"と"次元削減"の2つの視点でまとめてみる。 PCA(Principal Component Analysis;主成分分析)を想定。2変数(x, y)で表されるの3つのサンプルデータがあったとす…

音声認識メモ(Kaldi)その13(特徴量変換 Dan's DNN(nnet2))

Dan氏による実装版(nnet2)の中身を見てみる。公式ドキュメントの説明によると、インプットとなる特徴量(MFCC)に対して、次の変換を行うとある。 Dan氏の論文でいうところの、baseline/Type I featuresにあたるようだ。 splice LDA(linear discriminant Analy…

音声認識メモ(Kaldi)その12(delta特徴量)

音声データは、時系列で見た変化量も特徴となりえる。デルタ特徴量の追加は「featbin/add-deltas」コマンドを使う。元々の特徴量(MFCC)が13次元だとすると、出力結果は、deltat特徴量13次元、delta-delta特徴量13次元を加えて、39次元になる。 delta特徴量(…

音声認識メモ(Kaldi)その11(学習率 Karel's DNN)

学習の過程をトレースしてみる。スクリプト「steps/nnet/train.sh」を実行すると、内部で「steps/nnet/train_scheduler.sh」をコールし、「nnetbin/nnet-train-frmshuff」を実行する。今回、"もしもし"という発話(198フレーム)の音声ファイルを3つ用意し、…

C++メモ(C++14を使うためのGCCアップデート)

C++14機能の「std::make_unique」を使おうとしたらコンパイルエラーが出た。 error: ‘make_unique’ is not a member of ‘std’使っているGCCのバージョンは「4.8.4」サイトを確認すると、 GCC 4.9 Release Series — Changes, New Features, and Fixes - GNU P…

音声認識メモ(Kaldi)その10(入力層 Karel's DNN)

入力層の構成を掘り下げてみる。特徴量(MFCC)に対して変換を実行したもので、仮にMFCCが13次元、198フレームだとすると、変換後は143次元、198フレームになる(spliceは「5」を想定、詳細は前回を参照)。 splice5.proto <Splice> <InputDim> 13 <OutputDim> 143 <BuildVector> -5:5 </BuildVector>続けて、spliceし</outputdim></inputdim></splice>…

音声認識メモ(Kaldi)その9(pre-training Karel's DNN)

事前学習の流れを追ってみる。インプットとなる音声は連続値であるから、GB(Gaussian-Bernoulli)型の制限付きボルツマンマシン(RBM)を使う。 可視層(visible):Gaussian、連続値をとる 隠れ層(hidden):Bernoulli、離散値をとる nnet(Karel's DNN)では、…

音声認識メモ(Kaldi)その8(training Karel's DNN)

DNNモデルの学習過程をトレースしてみる。学習には「nnetbin/nnet-train-frmshuff」コマンドを使う。 nnetbin/nnet-train-frmshuff \ --minibatch-size=128 \ --randomize=false \ scp:train/feats.scp \ <--inputとなる特徴量 ark:mosimosi_ali2post.ark \ …

音声認識メモ(Kaldi)その7(decode with Karel's DNN)

Deep Neural Network Featuresを使ったdecodeを試してみる。 公式サイトKaldi: Deep Neural Networks in Kaldiによると3種類あるらしい。 nnet(Karel氏による) nnet2(Dan氏による) nnet3(Dan氏による) 今回はKarel氏によるバージョンを試してみる。 結…

音声認識メモ(Kaldi)その6(学習 その3)

モノフォンのモデルをもとに、トライフォンのモデルを作成する。まずは、統計量を作成。 bin/acc-tree-stats --ci-phones=1:2:3:4:5:6:7:8:9:10 2.mdl ark:mosimosi.ark ark:1.ali treeaccphone index 1〜5は「sil」、6〜10は「spn(spoken noise)」続けて、…

音声認識メモ(Kaldi)その5(学習 その2)

前回の続き。学習用グラフを作成したら、アライメントを作成する。 初期モデルに対しては「bin/align-equal-compiled」コマンドを使用する。 bin/align-equal-compiled ark:fsts.0 ark:mosimosi.ark ark:equal.align.0均等分割アライメントの出力結果は以下…

音声認識メモ(Kaldi)その4(学習 その1)

Kaldiにおけるモデルの学習過程を追ってみる。モデルを更新するにあたっては「gmmbin/gmm-est」コマンドを使う。 Do Maximum Likelihood re-estimation of GMM-based acoustic model Usage: gmm-est [options] <model-in> <stats-in> <model-out> e.g.: gmm-est 1.mdl 1.acc 2.mdl学習の際の</model-out></stats-in></model-in>…

音声認識メモ(Kaldi)その3(WFST)

Kaldiで使うモデルを作成してみる。ターゲットは、「もしもし」という発話。流れとしては、下図4つのモデルを作って合成する。 合成は以下の順番。 L ○ G ↓ C ○ (L ○ G) ↓ H ○ (C ○ (L ○ G))まず、Grammar。これはARPAファイルから生成する。 src/lmbin/arpa…

音声認識メモ(Kaldi)その2(decode)

Kaldiで実際に音声を認識させてみる。以下のサイトを参考にさせていただいた。 Kaldi - Training 1Kaldiに関する処理を日本語のドキュメントでまとめてみた(デコーディング編)6 - Qiita 使ったのは"もしもし"という発話データ(frame数198)。 実行コマン…

音声認識メモ(Kaldi)その1(特徴量抽出)

音声認識Tool Kit「Kaldi」を試してみる。今回は特徴量抽出。 音声データはHTKのHCopyで試した時と同じものを使用。Kaldi公式サイトには次の記述があり、全く同じにはならないよう。 With the option –htk-compat=true, and setting parameters correctly, i…

言語モデルメモ(palmkit)その1(with Witten-Bell backoff)

palmkitの「idngram2lm」を使って、ARPA形式の前向き3-gramが作成されるまでの過程をトレースする。 コマンド指定 idngram2lm -n 3 -idngram learn.3gram -vocab learn.vocab -arpa learn.3gram.arpa 統計の元となるファイル <s> IMO MO II </s> <s> MOMO MO OMOI </s> lea…

音声認識メモ(Julius)その6(連続単語認識(N-gram))

The Julius bookより抜粋。 第1パスでは通常の前向き (left-to-right) の 2-gram,第2パスでは後ろ向きの N-gram がそれぞれ必要となる. 第1パスにおける確率計算の過程をトレースしてみる。 (確率は常用対数での計算になる)統計の元となるテキストが以下…

Bluetoothメモ(BlueZパッケージ、bluetoothctlコマンド)

Bluetoothキーボードを使おうとしてハマったのでメモ。サイトを見ると、接続するためのコマンドはいくつかある。 bluez-simple-agent gatttool bluetoothctl 使い方が悪いのか、「bluez-simple-agent」コマンドと「gatttool」コマンドでは接続できなかった。…

音声認識メモ(Julius)その5(連続単語認識(DFA))

前回の続き。孤立単語の場合、"単語内(intra word)の遷移"のみを計算したが、連続単語の場合は、単語内に加え、"単語間(inter word)の遷移"を計算する。連続単語の場合の木構造化辞書を以下に示す。丸枠の下はノード番号を表す。 単語間の接続は、DFA文法…

音声認識メモ(Julius)その4(連続単語認識(DFA))

Juliusでは、連続単語の言語モデルとして、「N-gram」と「DFA」をサポートしている。ここでのDFA(Deterministic finite automaton、決定性有限オートマトン)はMealy型有限オートマトンのことで、出力が現在状態と入力に決定されるモデル。 遷移は一方通行…

音声認識メモ(Julius)その3(孤立単語)

juliusで音声を認識する過程をトレースする。HMMはモノフォンのモデルとし、「m」、「o」、「s」、「i」、「silB」、「silE」が学習済みであるとする。言語モデルは孤立単語(-w オプション)とし、辞書は以下とした。 MOSIMOSI m o s i m o s i MOMO m o m…