ともあれ、言われたとおりに HTK のソースコードを入手してコンパイルしてみました。コンパイルには、Microsoft Visual Studio 2010 Express を使いました。(2008, 2005 も使ってみましたが、結果は同じでした。)
何故か、Windows 用の zip 圧縮ファイルを展開したものは文法が間違っているなどというエラーが出て全くコンパイラが機能しなかったので(UNIXを前提としていると思われる) tar.gz の方を使ったら、無事にコンパイラは機能し、HTKを構成する種々の実行ファイルができました。但し、処理中に
Microsoft(R) Program Maintenance Utility Version 10.00.30319.01
Copyright (C) Microsoft Corporation. All rights reserved.
cl : コマンド ライン warning D9035 : オプション ‘GX’ の使用は現在推奨されていません。今後のバージョンからは削除されます。
cl : コマンド ライン warning D9036 : ‘EHsc’ を使用してください (‘GX’ は使用不可)
cl : コマンド ライン warning D9002 : 不明なオプション ‘/ML’ を無視します
cl : コマンド ライン warning D9002 : 不明なオプション ‘/G5’ を無視します
というエラーメッセージが出続けていたのが気になりました。
まずは、p2fa のドキュメントの最初に書いてある、Python のスクリプト align.py の使用を試みました。コマンドラインの記述方法は
python align.py [音声ファイル名] [対応する単語正書法表記のテキストファイル名] [生成したいTextGridファイル名]
でしたが、コマンドラインの文法が違う、というエラーが出て全く処理されませんでした。もっとも、仮にうまくいっていたとしても、これは1つのファイルしか一度に扱えないようです。(バッチファイルを書けば、恐らく多数ファイルを一気に処理することもできるとは思いますが。)
そこで次に、”Doing Forced Alignment The Hard Way” とp2faのドキュメントに書かれた、HTK の HCopy.exe と HVite.exe を直接使うやり方を試してみました。
まず、音響特徴を抽出するとして、
D:\Users\Takehiko_Makino\(省略)\htk\bin.win32\HCopy -T 1 -C D:\Users\Takehiko_Makino\(省略)\p2fa\model\16000\config -S D:\Users\Takehiko_Makino\(省略)\p2fa\code_erjprelim0.scp
というコマンドを実行しました。単純化すれば、
HCopy -T 1 -C ./models/1600/config -S code_erjprelim.scp
ということです。code_erjprelim0.scp ファイルは、[音声ファイル名] [スペース] [生成すべきファイル名.lab] を各行に並べたものです。 “./models/1600/” は p2faの16kHz用の設定ファイルが置いてあるフォ
ルダです。これは特にエラーメッセージも出ずにうまく機能したように見えました。
次に、そこから Praat の TextGrid を生成するということで、
“D:\Users\Takehiko_Makino\(省略)\htk\bin.win32\HVite” -T 1 -a -m -I
“D:\Users\Takehiko_Makino\(省略)\p2fa\transcript_erjprelim.mlf” -H
“D:\Users\Takehiko_Makino\(省略)\p2fa\model\16000\macros” -H
“D:\Users\Takehiko_Makino\(省略)\p2fa\model\16000\hmmdefs” -S
“D:\Users\Takehiko_Makino\(省略)\p2fa\lab_erjprelim.scp” -i
“D:\Users\Takehiko_Makino\(省略)\p2fa\align.mlf” -p 0.0 -s 5.0 “D:\Users\Takehiko_Makino\(省略)\p2fa\model\dict” “D:\Users\Takehiko_Makino\(省略)\p2fa\model\monophones”
を実行しました。単純化すれば、
HVite -T 1 -a -m -I transcript_erjprelim.mlf -H ./model/16000/macros -H ./model/16000/hmmdefs -S lab_erjprelim.scp -i ./align.mlf -p 0.0 -s 5.0 ./model/dict ./model/monophones
で、transcript_erjprelim.mlf は、処理すべき音声ファイル名と、それに対応する正書法の文を全部大文字で単語ごとに改行し、更に単語間のスペースを小文字のspで、やはり毎回改行して記述したファイルです。
ここが問題で、ファイル名のところを、見本に従って
“*/S2_001_HIRF06.lab”
などとすると、
Read 76 physical / 76 logical HMMs
Label file will be used to align each file
Aligning File: D:\Users\Takehiko_Makino\Documents\Job2010\VLSP2011\ERJ_prelim\S2_001_hirf06.plp
ERROR [+6550] LoadHTKLabels: Junk at end of HTK transcription
FATAL ERROR – Terminating program D:\Users\Takehiko Makino\(省略)\htk\bin.win32\HVite
つまり、HTK表記の末尾にゴミがあると言って異常終了します。
Windows を使っているのにフォルダ名の区切りが “/” になっているのはおかしいと思って、Windows風に
“*\S2_001_HIRF06.lab”
とすると、
ERROR [+5010] SetScriptFile: Cannot open script file D:/Users/Takehiko_Makino /(省略)/p2fa/lab_erjprelim0.scp
ERROR [+5020] InitShell: SetScriptFile failed on file D:/Users/Takehiko_Makin o/(省略)/p2fa/lab_erjprelim0.scp
ERROR [+3200] HVite: InitShell failed
FATAL ERROR – Terminating program D:\Users\Takehiko_Makino\(省略)\htk\bin.win32\HVite/
つまり、このファイル自体が開けないと言って異常終了します。しかも、それを言うときのフォルダ名の区切りが、Windowsなのに何故か “/” になっています。
何となく、Unixを前提としていると思われる tar.gz 圧縮のソースコードを使ったことに問題があり、それがコンパイル時のエラーメッセージに現れていて、このような結果になっているような感じがします。
しかし、Windows用の zip に入っているソースコードは、文法が間違っているというエラーが出てコンパイル自体が進まないのです。
あるいは、HTKのサイトに
The distributed version of HTK3 should build on Linux, Solaris, IRIX, HPUX, Mac OS/Xand FreeBSD. If it doesn’t, please file a bug report. HTK has also been successfully built on Windows NT, 2000 and XP (probably works on Vista too).
とある中、僕のWindows は 7 なので、それが原因になっているのでしょうか。Vista でさえ、「多分」としか書いてないのですし…。
ノースウェスタン大学の技官?からは、問題があれば助けられる、との言葉をもらっています。また、ペンシルベニア大学に尋ねてみるという方法もあるでしょう。自分でもネットで解決方法を探しています。
しかし、まずは、科研費の研究分担者にしてもらっている、他大学の工学部の先生、あるいはその学生さんに、解決法が分かる人がいたら助けてもらおうと思い、問い合わせ中です。何とか解決法が見つかるといいのですが…。
もっとも、解決しなくても、当面全く研究ができないというわけではありません。p2faにはオンライン版があり、音声ファイルを1つずつ、ちまちまと送れば結果を得ることがで得きるからです。
12月1日(明日!)にアブストラクトが締め切りの、来年1月末に開催される VLSP (Very Large-Scale Phonetic reserach) というワークショップがあり、これには p2fa のチュートリアルがあるため参加する方向なので、ここへの応募ではそうするしかないですね。(自分で発表する形の参加の方が、繰り越しの利かない科研費分担金が使えるので望ましいのです。駄目なら個人研究費を使うしかないのですけど。)
コメントを残す