トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索   ヘルプ   最終更新のRSS

コーパス加工用プログラム

Last-modified: 2015-02-10 (火) 05:32:06
Top / コーパス加工用プログラム

コーパス加工

日本語話し言葉コーパス(CSJ)*1

ディレクトリをサーチして必要なファイル(WAVとSEG)のパスを取得する

  • SearchWavPassCSJ.java
  • /raid0/share/CSJ 以下の女性音声(F系)のリストを取得して、searchWavFilePassCSJ.txt として出力するには
    $ java SearchWavPassCSJ /raid0/share/CSJ F searchWavFilePassCSJ.txt
    • 第一引数は /home/CSJ/disc3 などとしてもいいです。指定したディレクトリの下第二階層まで検索します。
    • 第二引数には「M(男性)」か「F(女性)」を指定してください(性別の指定をしないときは、「""」でOK)。
    • 対話音声(D00~ではじまるデータ)は取得しません。
  • ローパスフィルタをかけて出力するには
    • LowPassFilter.m をおいて、
      $ java SearchWavPassCSJ /raid0/share/CSJ F searchWavFilePassCSJ.txt 2010 14.1
    • 第四引数は、ローパスフィルタの周波数
    • 第五引数は、アンプの大きさ

ディレクトリをサーチしてXMLファイルのパスを取得する

  • SearchXMLPassCSJ.java
  • /home/CSJ 以下の女性音声(F系)のリストを取得して、xmlfilelist.txt として出力するには
    $ java SearchXMLPassCSJ /home/CSJ F xmlfilelist.txt
    • 第一引数は /home/CSJ/disc3 などとしてもいいです。指定したディレクトリの下第二階層まで検索します。
    • 第二引数には「M(男性)」か「F(女性)」を指定してください(性別の指定をしないときは、「""」でOK)。
    • 対話音声(D00~ではじまるデータ)は取得しません。

WAVファイルをコピーして、ひとつのディレクトリに集める

  • CopyWav.java
    $ java CopyWav searchWavFilePassCSJ.txt speechwav copyWavCSJ.sh all
    $ copyWavCSJ.sh
  • speechwav ディレクトリにまとめてコピーされます。
  • CopyWav の第4引数は、「最初から何秒をコピーするか」です。

音素別WAVファイルを作成

  • ディレクトリをサーチして必要なファイル(WAVとSEG)のパスを取得する にしたがって、必要なファイル(WAVとSEG)のパスを取得しておきます。
  • 母音ごとに分割する
    • 分割対象となる母音のリストを作成します。
      $ emacs vowellist.txt
    • vowellist.txt
      a
      i
      u
      • seg ファイルで a, i, u に一致する音素のみを切り出す設定にしました。
    • SearchSegmentCSJ.java 【2015/02/09 注 CSJver3 では→を使ってください】SearchSegmentCSJ2.java
    • 長さ 0.07秒以上の母音を全て、1母音あたり120個を上限として、segmentwav ディレクトリに出力するには、
      $ java SearchSegmentCSJ 0.07 120 searchWavFilePassCSJ.txt vowellist.txt
         segmentscript segmentwav searchSegmentCSJ.sh all
      $ sh searchSegmentCSJ.sh
      • シェルスクリプトファイルは segmentscript ディレクトリに、切り出し後の音声ファイルは segmentwav ディレクトリに出力されます。
      • SearchSegmentCSJ の第8引数は、「何秒目以降を解析対象にするか」です。

WAVファイルと音素別WAVファイルを作成(新しい形式)

アクセント核とブレイクインデックスをまとめて音節単位で一つのファイルに書きだす*2

イントネーション境界以外の母音のリストを取得する

アクセント核を持たない名詞・形容詞のリストを作成する

IPUの開始・終了時間およびノイズマスク区間の有無を取得する

音素の開始・終了時間を取得する

話者情報を取得する

CSJ付属のTextGridファイルを解析する

現代日本語書き言葉均衡コーパス(BCCWJ)

短単位ごとに情報を出力する

TIMIT Acoustic-Phonetic Continuous Speech Corpus *4

DR3ディレクトリをサーチして必要なファイル(WAVとPHN)のパスを取得する

WAVファイルをコピーして、ひとつのディレクトリに集める

  • CopyWavTIMIT.java
    $ java CopyWavTIMIT searchWavFilePassTIMIT.txt speechwav copyWavTIMIT.sh all
    $ copyWavTIMIT.sh
    • speechwav ディレクトリにまとめてコピーされます。
    • TIMITのWAVはヘッダ情報がないため、SOXでヘッダ情報を指定しています(all条件以外では、うまくいかない可能性があります)。

音素別WAVファイルを作成

  • 参考
  • DR3の音素ラベルをCSJ_SEG形式に変換
    • SearchWavPassTIMIT.java
    • ConvertTimitSeg.java
      java SearchWavPassTIMIT /share/timit/TIMIT/TRAIN/DR3 searchWavFilePassTIMIT.txt
      java ConvertTimitSeg searchWavFilePassTIMIT.txt
    • 各フォルダに自動的にSEGファイルを追加します。
  • 音声を母音ごとに分割する
    • 英語母音のリスト vowellist_eng.txt
    • SearchSegmentTIMIT.java
    • 長さ 0.07秒以上の母音を、1母音あたり100個を上限として、segmentwav ディレクトリに出力します。
      java SearchSegmentTIMIT 0.07 100 searchWavFilePassTIMIT.txt vowellist_eng.txt
        segmentscript segmentwav searchSegmentTIMIT.sh all
      sh searchSegmentTIMIT.sh
    • SearchSegmentTIMIT.java の SearchSegmentCSJ.java との違い:ファイルパスファイル内のSEGファイルに拡張子が無くても対応、soxでヘッダ情報を指定

The OGI Multilanguage Telephone Speech Corpus 1.2(CSLU)*5

特定言語のディレクトリをサーチして必要なファイル(WAV)のパスを取得する

  • SearchWavPassCSLU.java
    java SearchWavPassCSLU /share/CSLU searchWavFilePassCSLU.txt 1 spanish
    • 第二引数「1」:セグメントファイルのパスは出力しない(セグメントファイルの存在しないWAVも、全てパスを出力します)
  • ローパスフィルタをかけて出力するには
    • LowPassFilter.m をおいて、
      $ java SearchWavPassCSLU /share/CSLU searchWavFilePassCSLU.txt 0 spanish 2010 14.1

WAVファイルをコピーして、ひとつのディレクトリに集める

  • CopyWav.java
    $ java CopyWav searchWavFilePassCSLU.txt speechwav copyWavCSLU.sh all
    $ copyWavCSLU.sh
    • speechwav ディレクトリにまとめてコピーされます。

音素別WAVファイルを作成

  • CSLUのspanishをサーチして必要なファイル(WAVとPTLOLA)のパスを取得する
    • SearchWavPassCSLU.java
      java SearchWavPassCSLU /share/CSLU searchWavFilePassCSLU.txt 0 spanish
      • 第二引数「0」:セグメントファイルの存在するファイルのみパスを出力する
  • 音素ラベルをCSJ_SEG形式に変換
    • ConvertCSLUSeg.java
      java ConvertCSLUSeg searchWavFilePassCSLU.txt
    • 各フォルダに自動的にSEGファイルを追加します。
  • 音声を母音ごとに分割する
  • SearchSegmentCSLU.java
  • 長さ 0.07秒以上の母音を、1母音あたり100個を上限として、segmentwav ディレクトリに出力します。
    java SearchSegmentCSLU 0.07 100 searchWavFilePassCSLU.txt vowellist_spn.txt
      segmentscript segmentwav searchSegmentCSLU.sh all
    sh searchSegmentCSLU.sh
  • CSLUのファイル名には拡張子以外の「.」がありますが、このままではsoxのエラーが出るので、「_」に置き換えています。
  • 母音「&」もシェルスクリプトのエラーが出ますが、少数の母音なので、まだ対処していません。

MULTEXT 多言語韻律データベース*6

特定言語のディレクトリをサーチして必要なファイル(WAV)のパスを取得する

元音声のMFCC解析+元音声の単語別分割

元音声のMFCC解析結果をMATLABで使える形に変換

総合

  • 上記のコーパス別処理が完了しているとします。

WAVファイルを数値データに変換(MFCC)

  • 対象となるWAVファイル群が特定のディレクトリに入っているとして、処理を続けます。
    • HTKにパスが通っていなければ、通します。
      PATH=$PATH:/home/m-kouki/HTK-CSJ/bin.linux/
      export PATH
    • MFCC解析の設定ファイルを作ります。
      emacs config.hcopy
  • MFCC解析を行なって、テキスト形式で出力します。
    • MakeWavMfcc.java
    • speechwav ディレクトリ内の、ファイル名に「.wav」を含むファイルに対して解析する
      $ java MakeWavMfcc speechwav speechtxt makeWavMfcc.sh makeWavMfcc.hcopy.script .wav
      $ sh makeWavMfcc.sh 
      • speechtxt ディレクトリ内に、テキスト形式のMFCCファイルが出力されます。 → 
      • 評価データを作る場合は、ファイル名に「_a.wav」を含むファイル、などと対象を限定します。
  • MATLABで読み込める形に整形します。
    • ConvertMfcc.java
      java ConvertMfcc speechtxt speechtxt_matlab
      • speechtxt_matlabに、変換後のファイル(名前は同じ)が出力されます。

WAVファイルを数値データに変換(フォルマント)

  • 対象となるWAVファイル群が特定のディレクトリに入っているとして、処理を続けます。
  • フォルマント解析を行なって、テキスト形式で出力します。
    • MakeWavFormant.java
    • speechAnalysis.m
    • speechSignal.m
    • speechwav ディレクトリ内の、ファイル名に「.wav」を含むファイルに対して解析する
      $ java MakeWavFormant speechwav speechtxtFormant .wav
      • speechtxtFormant ディレクトリ内に、テキスト形式のフォルマント解析結果のファイルが出力されます(MATLAB読み込み可)。
      • 評価データを作る場合は、ファイル名に「_a.wav」を含むファイル、などと対象を限定します。

音素別WAVファイルを数値データに変換(MFCC)

  • MFCC解析を行なって、テキスト形式で出力します。
    • MakeWavMfcc.java
    • segmentwav ディレクトリ内の、ファイル名に「_母音名_」を含むファイルに対して解析する
      $ java MakeWavMfcc segmentwav segmenttxt_a makeWavMfcc.sh makeWavMfcc.hcopy.script _a_
      $ sh makeWavMfcc.sh 
      $ java MakeWavMfcc segmentwav segmenttxt_i makeWavMfcc.sh makeWavMfcc.hcopy.script _i_
      $ sh makeWavMfcc.sh 
      $ java MakeWavMfcc segmentwav segmenttxt_u makeWavMfcc.sh makeWavMfcc.hcopy.script _u_
      $ sh makeWavMfcc.sh 
      $ java MakeWavMfcc segmentwav segmenttxt_e makeWavMfcc.sh makeWavMfcc.hcopy.script _e_
      $ sh makeWavMfcc.sh 
      $ java MakeWavMfcc segmentwav segmenttxt_o makeWavMfcc.sh makeWavMfcc.hcopy.script _o_
      $ sh makeWavMfcc.sh 
      • segmenttxt ディレクトリ内に、テキスト形式のMFCCファイルが出力されます。 → 
  • MATLABで読み込める形に整形します。
    • BindingMfcc.java
    • タイプ1:各ファイルの全ての行を出力して統合
      java BindingMfcc speechtxt bindingMfcc.txt before all 100
      • 各ファイルの全ての行を取り出して、最初から100行分を連結して bindingMfcc.txt に出力する
      • ファイルごとに長さ(行数)が異なることに注意してください。
    • タイプ2:1つのファイルにつき、ある行数分だけ出力して統合
      $ java BindingMfcc segmenttxt_a bindingMfcc_a.txt middle 5 100
      $ java BindingMfcc segmenttxt_i bindingMfcc_i.txt middle 5 100
      $ java BindingMfcc segmenttxt_u bindingMfcc_u.txt middle 5 100
      $ java BindingMfcc segmenttxt_e bindingMfcc_e.txt middle 5 100
      $ java BindingMfcc segmenttxt_o bindingMfcc_o.txt middle 5 100
      • 各ファイルの中央5行分だけ取り出して、最初から100行分を連結して bindingMfcc.txt に出力する
      • 音素別に切り出したファイルなどの場合、これで定常部を取り出すことが期待できます
    • タイプ3:第六引数にキーワードを指定して、キーワードを含むファイル名のファイルのみ結合することもできます。
      • SearchBindingSegment.java を使って、
        java SearchBindingSegment segmenttxtMfccM vowellist.txt mfctxtdata_matlab_vowel
          searchBindingSegment.sh middle all 100
        sh searchBindingSegment.sh

*1 Maekawa K. (2003). Corpus of Spontaneous Japanese : Its Desugn and Evaluation . Proceedings of ISCA and IEEE Workshop on Spontaneous Speech Processing and Recognition (SSPR2003), 7–12. 詳細
*2 こちらで取り組んだ仕事です。
*3 ※CSJのwordファイルに記載されている時間は、その単語の終了時間です
*4 shower の /share/timit/ にあります。詳細
*5 Yeshwant K. M., Ronald A. C., & Beatrice T. O. (1992). multi-language telephone speech corpus. Proceedings of the International Conference on Spoken Language Proceedings, 895–898. shower の /share/CSLU/ にあります。詳細
*6 shower の /share/Multext/ にあります