2014/11/07

HTKで強制アライメントをする方法(略式)

【はじめに】
・今日の日付は 2014/11/07です。
・windows only です。
・本記事で説明することを実現するだけなら、たぶんJuliusでやった方が簡単です。
・HTKで強制アライメントをするために最低限何が必要か?を知るのには役立つかもしれません。

【やりたいこと】
Juliusについてる音響モデルで、HTKを使って強制アライメントする

【やらないこと】
音響モデルそのものの学習(HInit, HRest, HERest等)

【はじめに】
公式リファレンス:HTK Book
有力な参考文献: Miyazawa's pukiwiki, 近藤悠介 on the Web

あたりは読みましたか?

以下の内容は、
「これらを読んでも良くわからない」人向けに、
やりたいことを一直線で実現する手順を記していきます。

基本的に以下の作業ではコマンドプロンプトを使います。
Shift + 右クリックでコマンドプロンプトが開けることを
覚えておくと便利かもしれません。

【0.インストール】
まず、Visual Studioをインストールしておいてください。

その後、公式ページからHTK落として、公式ページどおりの手順でインストールしてください。
ダウンロードの際に登録が必要なので注意してください。

インストールが終わったら、環境変数の設定をしてください。
これも公式ページどおりです。

ちなみに、
「サンプルを動かすためにはperlが必要だよ」とか書いてあるのですが、
入れたところでエラー連発で動かないので無視しても良いと思います。
perlを触ったことがある方は適宜修正して、同じ結果が得られるかチェックすると安心です。

あと、Juliusをダウンロードして
jnas-mono-16mix-gid.hmmdefs
というファイルを見つけておいてください。
最後に使います。

【0.1 ビルドについて】

(2014/11/24追記)

ビルドくらい楽勝だよねみたいなノリで書いてしまったのですが、
改めて自分の違うPCでインストールしたらハマりました…
こちらのサイトを参考にするといいと思います。

(追記ここまで)

【1.特徴量抽出(Parファイル)】
wavファイルの音声の特徴量を抽出します。
以下、この特徴量ファイルをParファイルと呼ぶことにします。

C:\Users\hogehoge> HCopy -C コンフィグファイル Wavファイル 出力ファイル名

HCopyに限った話でもないのですが、
出力ファイル名を指定しないとエラーが起きることがあるので、必ず指定してください。

コンフィグファイルの中身は以下の通りです。
SOURCEFORMAT = WAV
TARGETKIND = MFCC_E_0
TARGETRATE = 100000.0
SAVECOMPRESSED = T
SAVEWITHCRC = T
WINDOWSIZE = 250000.0
USEHAMMING = T
PREEMCOEF = 0.97
NUMCHANS = 26
CEPLIFTER = 22
NUMCEPS = 12
ENORMALISE = F

近藤悠介 on the webのものとほぼ同じですが、TARGETKINDのところだけ変えてあります。
これはjuliusの音響モデルと揃える都合上です。

【2. 辞書ファイル(Dicファイル)】
認識させたい単語(文章)を一覧にしたファイルを作ります。
以下、Dicファイルと呼びます。

Dicファイルの中身は、こんな感じにします。

p0 silB a r u h a r e t a h i n o g o g o
p1 m a h o u i j o u n o y u k a i g a silE

最初に単語名、次に音素列を並べます。
juliusの音響モデルを使用する場合文頭/末の空白を表すsilB/silEが使えます。
また、空白文字としてspが使えます

【3. 音素ファイル(phonesファイル)】
Dicファイルに含まれる音素全てを並べたファイル(以下phonesファイル)を作ります。

silB
a
r
u
h

みたいに、使う音素全てを書き並べていってください。


【4. 文法ファイル(Latファイル)】
先ほど、Dicファイルで指定した単語名を使って、
どういう順番で認識させるかを指定します。

例えば、p0だけでよい(音声が「ある晴れた日の午後」だけ)のなら

(p0)

p0, p1の順番で認識させたければ、

(p0 p1)

と書いて保存します。
これをgramファイルと呼びます
(次のコマンドの後は出てこないので、忘れても大丈夫です)

次に、HParseというコマンドを使って、これをHTK用の文法ファイルに変換します。
以下、これをLatファイルと呼ぶことにします。

C:\Users\hogehoge>Hparse gramファイル Latファイル

【5. 強制アライメント(Recファイル)】
Parファイル(Step 1), Dicファイル(Step 2), phonesファイル(Step3), Latファイル(Step 4)を使って、
強制アライメントをしていきます。

強制アライメントにはHViteというコマンドを使います。

C:\Users\hogehoge>HVite -w Latファイル -C コンフィグファイル -T 1 -H jnas-mono-16mix-gid.hmmdefs -m Dicファイル phonesファイル parファイル

コンフィグファイルは以下の通りです。
SOURCEKIND = MFCC_E_0
TARGETKIND = MFCC_E_D_N_Z

(parファイルの名前).recというファイルが出力されれば成功です!
適当なテキストエディタで開いてみてください。

0 300000 silB -248.249069 silB
300000 13100000 sp 9621.525391 sil
13100000 13400000 d -203.709473 p0
13400000 13700000 a -204.125214
13700000 14000000 i -205.093567


みたいな感じで、数字・数字・音素名・数字・(フレーズ名)
となってればokです。

ちなみに
一番左の数字はオンセットタイム
二番目の数字はオフセットタイム
三番目の数字は尤度を表しています。


【終わりに】
以上です。
HTKは相当高機能で、ここには書いてないような機能がたくさんあります。
これを最初の一歩にして、すばらしいHMMライフを送っていただけることをお祈りいたします。

2014/11/03

【垰瀬内なら】駅名替え歌を自動生成する(3 【自動で作る】

#きっとn番煎じ (n>1, n∈N)

【やっつけデモ】
「炉心融解」で歌詞を作ってCevioにベタ打ちさせるとこうなりました。










聴きました?










現状の出力結果はこんな感じ

元歌詞
今回の出力
(前回の出力)

 まちあかり はなやか えーてる ますいの つめたさ
 たちあらい はなやま えべつ  はるひの  つねやま
 (かみさかい はなやま  えべつ    はるひの   うめやま)

 ねむれない ごぜんにじ すべてが きゅうそくに かわる
  ねづ+えない  ごめんまち  すまでら  うおずみ      かわづ
 (ねづ+えない  ごめんまち  すまでら  うおずみ      わらび)

 おいるぎれのらいたー  やけつく ような いのなか
  おいつ+ひねの+やいた  まきむく ようが いのなだ
 (おいつ+ひねの+やいた  まきむく ようが いのなだ)

 すべてが そう うそなら ほんと(う)に よかったのにね
 すずめだ その ぬのはら ほんまち      こなかの+みね 
(すずめだ その ぬのはら ほんまち      こなかの+みね)

--ここから新規--

 きみの くびを  しめる ゆめをみた  ひかりの あふれる ひるさがり
 ひびの ゆびそ しべつ ゆもと+みた みかきの あつべつ みつわだい

 きみの ほそい のどが はねるのを なきだしそうなめで   みていた 
 にじの よろい おおだ  やなぎもと  わりだし+とうな+めで みてじま

 かくゆうごうろにさ       とびこんでみたいと      おもう
 かく+つるみおの+にま こび+こいで+みわ+みと おもと

 まさおなひかり    つつまれてきれい
 まるお+なち+さり つづ+わけ+へいせい

 かくゆうごうろにさ     とびこんでみたら    そしたら
 たく+ゆう+ととろ+きさ おび+とりで+みはら よしわら  

すべてが ゆるされるような     きがして
 ふじえだ  ゆず+さめず+ようか きが+みえ

 べらんだの    むこうがわ かいだんを のぼって いくおと
 れぶん+やの ぬまのさわ かいやまと のぼて    ゆのもと

 かげりだしたそらが      まどがらすにへやに   おちる
 はげ+みだ+ひた+そはら かすがばる+みせだに のびる

 かくさんするゆうぐれ   なきはらしたような ひのあか
 はくさん+すふ+ゆのまえ まるやました+おな ひろわら

 とけるよ(う)に すこしずつ すこしずつ  しんでいく   せかい
 とおりたに   るもい+ふく くほんぶつ しんげ+くず てらい

   きみの くびを しめる ゆめを みた はるかぜに ゆれる かーてん かわいて
  にいの くりの みはる ゆのお ちた はぶ+かめい ゆのつ はなてん  かばいけ

 きれた くちびるから    こぼれる ことばは  あわのよう
 ひけた くじ+りふ+はら ほろべつ  のとがわ あわの+よの

 かくゆうごうろにさ    とびこんで  みたいと   おもう まっしろにきおく  とかされてきえる
 さく+ぬまぶくろ+いさ もり+といで きた+いほ よこお やしろ+にしはる とさくれ+めいほう 

 かくゆうごうろにさ      とびこんで みたら
 がく+くす+とうろ+ひわ もじ+こまえ+みなら

 また むかし みたいに ねむれる ような そんな きがして
 やた むらい みついし えんがる よつや  ほんな しが+ひめ 

 とけいの びょうしんや てれびの しかいしゃや
 よこいそ ぞうしがや  めぐみの  しもいさか
 
 そこにいるけど   みえない だれかの わらいごえ   ほうわ して   はんきょうする
 ぼこい+みぶ+でと みえまち はしらの わらび+のえ もおか+ひえ はなぞの+うす

 あれぐろ・あじてーと みみなりが きえない やまない
 あぞうの+たじべ      みき+なりた  きこない やまな

 あれぐろ・あじてーと みみなりが  きえない やまない
 やつしろ+やまて      みい+はりま みえばし やまだ

 だれも みんな きえてく   ゆめを みた まよなかの へやの ひろさと せいじゃくが
 やくも じんば みねのぶ ゆさと ひら さよ+なかの てらお しもさと へいわ+くが

 むねにつっかえて じょうずに いきが できなくなる
 むれ+みつ+かまて ぞうしき  いしが せき+やぶ+やつ

 Shout!
 ひな!

 かくゆうごうろにさ    とびこんで  みたら
 やす+ゆら+こうろ+ちわ ほみ+こぼけ みたか

 そしたら きっと ねむるように  きえていけるんだ
 よしはま きよ   てたる+とうに きりめ+ちたはんだ

 ぼくの いない あさは   いまより ずっと すばらしくて
 よぶの いわい あたわ いまばり ふと  すわ+かみすげ

 すべての  はぐるまが かみあった  きっと そんな せかいだ
 すえ+せの たつるはま かみ+あがた きの  ほんだ せや+きだ

 (Ah...)
 あわ+あわや

【実装】
・ユーザが歌詞をいい感じに区切ると、
 それと同じ文字数で似たような母音を持つ駅名をデータベースから拾ってくる
(異なる母音の文字数=距離で距離最短の駅名を使用)

・駅名間の距離は母音間の距離を文字ごとに計算した時の和

・母音間の距離は以下の通り
 母音不一致: 0.25
 母音一致:0 (駅名の始め/終わりの時は-2)
 文字一致:-0.25

・同じ駅は使わないようにする
(ただし同名の駅が複数個ある場合はその数まで可)

・データベースにはwikipediaの日本の鉄道駅一覧を使用。

【前回との差分】
・バグ取り!
 -「かわる」を「わらび」と歌うのはさすがにおかしい
 -た行の駅がことごとくバグってた

・データベース中の「っ」「ゃ」「ゅ」「ょ」を、置換することで対応
 ex. 「きゃ」->「か」
 -なので、本来は「きゃ」と読むべき駅名を「か」と歌ってしまっている可能性

【課題】
・歌わなくてもいい音の推定
(あれぐろ・あじてーと、みみなりがきえないやまない みたいな)

・時間伸縮に対応させる
(おいるぎれの -> おいつ+きれ+のう みたいな)

・実際の発音と表記の発音が違う問題をどうにかする
(ほうき->ほおき みたいな)

・そもそもユーザが歌詞を切らなくていいようにする

・デモ用のWebページつくる

・cevioをマスターする

2014/10/28

飛行機が飛ばなかった日の話 (2)

前回はこちら

あらすじ:飛行機がストでキャンセルされたよ!



裏話としては
・アテネの地下鉄は時間制 (75分乗り放題、空港行きは除く)
・空港でおばちゃんがものすごい長いこと交渉してて、どこの国もおばちゃんは強いなあと思った
・マンガでは行列あんま増えてないですが、 実際にはガンガン後ろに並んできました。
 完全に航空会社の応対が間に合ってない。

・帰り道だけじゃなくて、行ってる間もトラブったし、なんなら行く前からトラブってた

ここまでが、飛行機乗るまでの話で、一応一区切りです。
次からはアテネ->パリ移動の話になります。

あてにならないネームを信じるなら、あと6ページで終わる予定です。
完走できるよう頑張ります。

2014/10/26

飛行機が飛ばなかった日の話 (1)

(6)飛行機について
エールフランスで帰ってこようと思ったらストライキでキャンセルされましたしょうがないのでルフトハンザでアテネ->ミュンヘン->パリ->成田という感じで帰ってこようかと思い
アテネ~パリ間はルフトハンザに乗ってきたのですが、
・アテネ->ミュンヘン:着陸時のスピードが早すぎて急ブレーキをかける・ミュンヘン->パリ:着陸時のスピードが遅すぎてふらつくし、着地時にはねる
ルフトハンザって着陸が下手なのかな?
史上まれに見る良い素材なので
様々な形で料理したいと思い、
これをエッセー漫画にすることにしました。

 で、1ページ目がこれです。


全9ページくらいを予定しています。

ネームは終わってますが、当てになりません。

完走できるように頑張るので、
よろしくお願いします。

2014/10/22

【垰瀬内なら】駅名替え歌を自動生成する(2) 【自動で作る】

#きっとn番煎じ (n>1, n∈N)

【やっつけデモ】
「炉心融解」で歌詞を作ってCevioにベタ打ちさせるとこうなりました。



(聞けない方はこちらから落としてください。)







聴きました?










現状の出力結果はこんな感じ

元歌詞
今回の出力
(前回の出力)

 まちあかり はなやか えーてる ますいの つめたさ
  かみさかい はやなま  えべつ    はるひの   うめやま
 (あいかまち あかさか えべつ  あさひの  うめやま)

 ねむれない ごぜんにじ すべてが きゅうそくに かわる
  ねづ+えない  ごめんまち  すまでら  うおずみ      わらび
 (あつ+えさき ごめんまち うえむら うおずみ   あかゆ)

 おいるぎれのらいたー  やけつく ような いのなか
  おいつ+ひねの+やいた  まきむく ようが いのなだ
 (おいつ+いけの+あいが  あおうづ おうか  いそはら)

 すべてが そう うそなら ほんと(う)に よかったのにね
  すずめだ その ぬのはら ほんまち      こなかの+みね
 (うえむら おの くろさか こんぞうじ  こなかの+いで)

【実装】
・ユーザが歌詞をいい感じに区切ると、
 それと同じ文字数で似たような母音を持つ駅名をデータベースから拾ってくる
(異なる母音の文字数=距離で距離最短の駅名を使用)

・その際、最初と最後の母音が似てるときは距離にボーナスをつける
(現在の実装では1文字母音が異なると距離+1,
 最初と最後の母音が同じだと距離ボーナスで-2,
 文字が完全に一致している場合もボーナスで-0.25)

・同じ駅は使わないようにする
(ただし同名の駅が複数個ある場合はその数まで可)

・データベースにはwikipediaの日本の鉄道駅一覧を使用。

【課題】

・「っ」「ゃ」「ゅ」「ょ」「ー」に対応させる
(現状はいろいろごまかしている えーてる->えてる まっさお->まさお とか)

・時間伸縮に対応させる
(おいるぎれの -> おいつ+きれ+のう みたいな)

・実際の発音と表記の発音が違う問題をどうにかする
(ほうき->ほおき みたいな)

・そもそもユーザが歌詞を切らなくていいようにする

・デモ用のWebページつくる

・cevioをマスターする

2014/10/08

【垰瀬内なら】駅名替え歌を自動生成する(1) 【自動で作る】

#きっとn番煎じ (n>1, n∈N)

【背景】
とりあえず、こちらをお聞きください。

【駅名だけで】炉心融解歌ってみた【ぽちゃっこ】
作詞:あくあ さん
歌唱:ぽちゃっこ さん


このような作品は「垰瀬内シリーズ」(たおせない)と呼ばれ、
ニコニコ動画に359件投稿されています(2014/10/08 4:46現在)

今回はこれ(と同じくらいのクオリティ)の歌詞を自動で作ることを目標とします。

【(やっつけ)デモ】
とりあえず、
「炉心融解」で歌詞を作って(一発で)歌って(録音して適当にコンプかけて)みるとこうなります。
なんとなーく聞いてみて歌詞に違和感がなければ目標達成ですが。


(聞けない方はこちらから落としてください。)







聴きました?










現状の出力結果はこんな感じ

元歌詞
出力

まちあかり はなやか えーてる ますいの つめたさ
あいかまち あかさか えべつ  あさひの  うめやま

ねむれない ごぜんにじ すべてが きゅうそくに かわる
あつ+えさき ごめんまち うえむら うおずみ   あかゆ

おいるぎれのらいたー   やけつく ような いのなか
おいつ+いけの+あいがー あおうづ おうか いそはら

すべてが そう うそなら ほんとうに よかったのにね
うえむら おの くろさか こんぞうじ  こなかの+いで

きみの くびを しめる ゆめをみた ひかりの あふれる ひるさがり
いちお うしお いしづ うえの+いが いだきそ あつべつ いつかまち

きみの ほそい のどが はねるのを なきだし そうな めで みていた
いちお おおき おうか かいうえの あしだき  おうか あげ いえひさ

かくゆうごうろにさ    とびこんで  みたいと   おもう
あつ+うぐいすの+にさ  おぎ+おうめ  いが+いの  おおご

まっさおなひかり  つつまれてきれい
あかの+あき+あき うす+あげ+かいせい

かくゆうごうろにさ    とびこんで  みたら そしたら
あつ+うす+こうろ+いさ  おぎ+おうめ いがや おいたま

すべてが ゆるされる ような きがして
うえむら うす+あかゆ おうか いが+いで

【実装】
・ユーザが歌詞をいい感じに区切ると、
 それと同じ文字数で似たような母音を持つ駅名をデータベースから拾ってくる
(異なる母音の文字数=距離で距離最短の駅名を使用)

・その際、最初と最後の母音が似てるときは距離にボーナスをつける
(現在の実装では1文字母音が異なると距離+1,
 最初と最後の母音が同じだと距離ボーナスで-1,
 文字が完全に一致している場合もボーナスで-0.5)

・データベースにはwikipediaの日本の鉄道駅一覧を使用。

・現在はそのうち「あ行」と「か行」が使えるように実装済み

【やるべき課題】
・データベース増やす
(「さ行」から「わ行」)

・「っ」「ゃ」「ゅ」「ょ」「ー」に対応させる
(現状はいろいろごまかしている えーてる->えてる まっさお->まさお とか)

・時間伸縮に対応させる
(おいるぎれの -> おいつ+きれ+のう みたいな)

・そもそもユーザが歌詞を切らなくていいようにする

・デモ用のWebページつくる

・歌唱力をあげるかcevioをマスターする

2014/10/05

「ぴくかる」開発記録(8) -Operaに対応したり、一枚の絵のスキルが見れるようになったりしました

絵師さんの戦闘力@pixivを測定するブラウザ拡張機能
「pixiv skill calculator」(ぴくかる)を開発しています。
最新版はv.1.5.2です。

Google Chrome版ダウンロード
Opera版ダウンロード
FireFox(+GreaseMonkey)版ダウンロード:
機能一覧:こちら

今回のアップデートは機能追加とバグフィックスです。

--前回との差分--
【機能追加】Operaでも公開してます。

【機能追加】一枚ごとのスキルが見られるようになりました
#ただ、割とバグが残ってるのでご了承ください。

【機能追加】平均閲覧数・点数・ブックマーク数が見られるようになりました

スキルのところをマウスオーバーすると見れます。

それ以外の場所でもマウスオーバーで吹き出しが出たりします。
#が、割とバグが残ってるのでご了承ください。

【バグフィックス】
閲覧数0の絵が含まれる(=投稿直後)にスキルがNanになるバグを直しました。



--今後の課題--
【改良】適切なツールチップを表示させて、初見のユーザでも操作がわかるようにする

【改良】無視すべきタグ辞書の改良

【追加】マルチブラウザに対応させる
       →Operaは登録申請中
       →Safariは証明書が取得できればいけそう→審査落ちた?

【改良】ライバル登録ボタン使用時の(見た目の)挙動
       →まだ改良の余地多数あり。

【改良】計算式にフォロー・マイピクを加味する

【改良】絵ごとのスキル値を表示するようにする

【バグ】R-18を表示させないようにするユーザがR-18を含む絵師のページに行くと、
    スキル値が適切に計算出来ない

【分析】Tinamiとの比較とか面白そう

【その他】もう少しスキル値を上げたい orz
現在18470/19286位@2907ポイント(上位95.8%) 

--その他--

Q.バグ/機能要望/質問等はどこへ?
この記事のコメントか、右側のtwitterに@なりDMなり飛ばしてください。
善処します。