下丸子のコネクショニスト

機械学習、人工知能などの話題について触れます。

Long Short Term Memory(LSTM)を実際に動かしてみた (1)

今回は下記の記事で導入したLSTMを実際に動かしてみる。

Long Short Term Memory (LSTM) ライブラリ導入 - 下丸子のコネクショニスト

 

目標は

  1.  元のデータをLSTMの入力形式.rcに変換し、学習用・評価用データを作成
  2.  LSTMのパラメータを手動設定
  3.  手動設定したパラメータを用いて学習し、評価結果をプロット

上記の流れを実行できるようにすること。

 

データの種類によって手順や必要なことはかなり変わってくる。

今回は上手くいったかを検証することが重要なので、なるべく検証性を高めるために、

exampleとしてライブラリに添付されているタスクをモデルケースとして実験に用いる。

 

複数の回にまたがってレポートすることになるが、

この記事では概要を説明し、次回以降詳細な検討にうつっていく。

 

フォルダ・ファイル構成

以降では前回記事で導入したCURRENNTのインストール先フォルダを~/CURRENNTと呼ぶことにする。

CURRENNTに含まれているexampleは

  1.  speech_recognition_chime
  2.  speech_autoencoding_chime

上記二つのタスクである。~/CURRENNT/example以下にそれぞれのデータが格納されている。

 

speech_recognition_chimeは話者分類を行うタスク、speech_autoencoding_chimeは音声データのノイズ除去を行うタスクのようだ。

今回はspeech_autoencoding_chimeを用いることにする。

 

ファイル構成は以下のとおりになっている。

  • ~/CURRENNT/example/speech_autoencoding_chimeフォルダ

train_1_speaker.nc val_1_speaker.nc config.cfg network.jsn run.bat run.sh

 

なおそれぞれのファイルは下記の意味がある。

train_1_speaker.nc:学習データ

val_1_speaker.nc:学習時に用いるvalidationデータ

(評価時に用いるtestデータはexample内には存在しない)

config.cfg:学習パラメータ情報

network.jsn:LSTMのネットワーク構造情報

run.bat:Windows環境用の学習実行ファイル

run.sh:Linux環境用の学習実行ファイル

 

音声データのノイズ除去タスク

CURRENNTのREADMEにはspeech_autoencoding_chimeの参考文献として下記が引用されている。

Felix Weninger, Jürgen Geiger, Martin Wöllmer, Björn Schuller, Gerhard Rigoll:
"The Munich Feature Enhancement Approach to the 2013 CHiME Challenge Using
BLSTM Recurrent Neural Networks", Proc. 2nd CHiME Speech Separation and
Recognition Challenge held in conjunction with ICASSP 2013, IEEE, Vancouver,
Canada, 01.06.2013.

論文の中身を読むと、CHiME 2013というワークショップで題材にされたデータを使っていることが判明した。

ちなみにCHiMEというのはWorkshop on Machine Listening in Multisource Environmentsの略のようで、頭文字それでいいのか突っ込みたくなる。

どうやらexampleフォルダには容量の都合によりspeaker 1というデータしか収録していないようなので、どのようなデータを使っているのか同定する必要がある。

 

試しに下記のコマンドを打ってみると、dumpファイルに学習データの内容が我々が読める形で吐き出される。

~/CURRENNT/examples/speech_autoencoding_chime$ ncdump train_1_speaker.nc > dump

このコマンドはNetCDFがきちんとインストールされていないと動かないので注意。動かない場合は冒頭で引用した記事を参照していただきたい。

ちなみに学習時に使うncファイルは23.4MBで、ncファイルから吐き出されたdumpファイルは64.3MB。約3倍にデータ圧縮されているのに学習時解凍する必要がない。かなり優秀だ。pickle形式も見習ってほしい。

さてdumpには以下のように出力された。

netcdf train_1_speaker {
dimensions:
    numSeqs = 500 ;
    numTimesteps = 74334 ;
    inputPattSize = 39 ;
    targetPattSize = 39 ;
    maxSeqTagLength = 500 ;
variables:
    char seqTags(numSeqs, maxSeqTagLength) ;
        seqTags:longname = "sequence tags" ;
    int seqLengths(numSeqs) ;
        seqLengths:longname = "sequence seqLengths" ;
    float inputs(numTimesteps, inputPattSize) ;
        inputs:longname = "inputs adjusted for mean 0 and std dev 1" ;
    float targetPatterns(numTimesteps, targetPattSize) ;
        targetPatterns:longname = "regression targets" ;
data:

 seqTags =
  "/home/iaa1/workstud/wen/research/chime2/smallvoc/tum_fe/features/mfcc-std/train_noisy/id1/bbaf2n.mfcc",
  "/home/iaa1/workstud/wen/research/chime2/smallvoc/tum_fe/features/mfcc-std/train_noisy/id1/bbaf4p.mfcc",

(以下略...)

seqLengths = 117, 120, 159, 117, 131, 127, 128, 136, 128, 142, 122, 158,
    139, 165, 140, 135, 115, 128, 115, 128, 142, 139, 135, 129, 146, 186,
    142, 122, 122, 143, 135, 123, 140, 134, 135, 148, 147, 183, 139, 140,

(以下略...)

inputs =
  -2.934437, 1.067946, -0.962051, 0.765908, 1.393508, 2.342612, 1.355077,
    0.331135, 0.861362, 1.944664, 0.522046, -0.520356, -0.075297, -0.525195,
    0.472348, 1.096672, 0.060397, -0.000736, -0.748944, -1.20265, 0.114947,

(以下ファイル末端まで続く)

 

ここで重要なのはseqTagsの項目で、実験データを指定している部分。

CHiME2のsmallvocというデータセットのうち、id1という話者の音声ファイルを複数指定しているように読み取れる。

下記のURLにはsmall vocabulary trackというデータを使ったタスクがあるのでこいつだろう。

http://spandh.dcs.shef.ac.uk/chime_challenge/chime2013/chime2_task1.html

 

学習データには

Training set: 500 utterances from each of 34 speakers

  • (ftp) clean utterances (760 MB)
  • (ftp) reverberated utterances (1.5 GB)
  • (ftp) isolated noisy mixtures (1.6 GB)
  • embedded noisy mixtures (ftp) part 1 and (ftp) part 2 (9.6 GB total)

という上記4つの候補があるが、

Only the isolated utterances are used

と論文に書いてあるので(ftp) isolated utterances (1.6 GB)をダウンロードしておく。

 

学習時に用いるvalidation用データはdevelopment dataと呼ばれているらしい。

Development set: 600 utterances at each of 6 ranges of SNR

  •  (ftp) isolated noisy mixtures (330 MB)
  •  (ftp) embedded noisy mixtures (2.2 GB total)
  •  (ftp) noise-free reverberated utterances (51 MB)

上記の中から(ftp) isolated noisy mixtures (330 MB)をダウンロードしておく。


seqTagsのmfcc-stdというディレクトリ名は特徴抽出したファイルを示しているようで、

we use 39 cepstral mean normalised mel-frequency
cepstral coefficients (MFCCs) exactly corresponding to the features
employed by the Challenge baseline.

と論文に書いてある。

調べたところbaselineは公式に提供されているツールがあるらしい。

http://spandh.dcs.shef.ac.uk/chime_challenge/grid/README.pdf

ツールのダウンロードリンクが切れていたが、以前のコンペで用意された下記のページからpcchome.tar.gzを落とせば問題ないようだ。

http://spandh.dcs.shef.ac.uk/projects/chime/PCC/evaluation.html

 

とりあえず準備はこれでできた。

次回から実際にデータを扱っていく。