Miyazawa’s Pukiwiki
JuliusとJulian/音素自動ラベリング
はすでに存在します。
開始行:
*音素自動ラベリング((本ページの内容は '''[[理研コーパス班...
-&color(red){最終更新 : 2014/07/17};
#contents
**はじめに [#z8e107b8]
-連続音声ファイルに含まれる音素(分節音)の開始・終了時間...
-最初に用意するもの
--Julius+単語・音素セグメンテーションキット(下でインス...
--下記の教科書「IT Text 音声認識システム」(IPA音響モデル...
--自動ラベリングを行いたい音声ファイルと、発話内容の書き...
---本ページでは[[日本語話し言葉コーパス(CSJ):http://www...
--[[Praat:http://shower.human.waseda.ac.jp/~m-kouki/pukiw...
-教科書
--「IT Text 音声認識システム」, 情報処理学会【編】, 鹿野...
--[[Juliusの使い方/音素セグメンテーション(音素自動ラベリ...
--[[菊池英明, 前川喜久雄, 五十嵐陽介, 米山聖子, 藤本雅子,...
**ソフトウェアのインストール [#be7f9759]
-任意の場所(たとえば、Cygwinのホームディレクトリ直下)に...
-まず、CygwinとPerlの実行環境をインストールします。[[ここ...
-続いて、音声認識エンジン Julius をインストールします。リ...
-続いて、音声認識に使用する情報処理振興事業協会(IPA)フ...
--「IT Text 音声認識システム」付属CD-ROMの phone_m フォル...
-必要に応じて((MiyazawaがTextGridのテキストを整形するため...
**自動ラベリング [#x67087a4]
***Juliusのサンプル音響モデル・テストデータセットで試す [...
-JULIUS/segment_julius4.pl の以下の行を書き換えます。
--JULIUS/bin/julius-*****.exe のバージョン番号に書き換え...
16行目 $julius4bin="./bin/julius-4.1.5";
> $julius4bin="./bin/julius-4.3.1";
---パスの区切り記号は%%「/」でなく「\\」で記述して下さい%...
---絶対パスで記述して下さい。((相対パスは「'.'は、内部コ...
--音響モデルの正しい場所を指定。ご自分の環境に合わせて書...
19行目 $hmmdefs="./models/hmmdefs_monof_mix16_gid.binhmm...
> $hmmdefs="./model/phone_m/hmmdefs_monof_mix16_gid...
-コマンドラインで以下を実行します。
cd JULIUS/
perl segment_julius4.pl JULIUS/sample/sample.wav JULIUS/...
--Array @words missing the @ ... の警告は、69行目の word ...
--ここではパスの区切り記号は「/」でも「\」でも「\\」でもO...
#ref(segmentation01.png,,60%);
--入力データは音声ファイル sample.wav と、書き下しファイ...
---sample.trans の中身
silB ky o: w a i i t e N k i d a silE
---音素の記述形式が、音響モデル hmmdefs_monof_mix16_gid.b...
-成功すれば、JULIUS/sample 以下に sample.trans.log と sam...
--%%sample.trans.align の例%% → .trans.align ファイルには...
(略)
--- transcription ---
silB ky o: w a i i t e N k i d a silE
(略)
=== begin forced alignment ===
-- phoneme alignment --
id: from to n_score unit
----------------------------------------
[ 0 22] -19.594139 silB
[ 23 31] -25.734671 ky
[ 32 55] -20.839849 o:
[ 56 67] -23.585581 w
[ 68 75] -27.564896 a
[ 76 87] -26.436453 i
[ 88 97] -23.435047 i
[ 98 106] -23.542698 t
[ 107 116] -24.730494 e
[ 117 126] -24.588940 N
[ 127 138] -24.642313 k
[ 139 143] -25.039257 i
[ 144 149] -24.957642 d
[ 150 159] -24.341919 a
[ 160 203] -19.249168 silE
re-computed AM score: -4603.678711
=== end forced alignment ===
(略)
---データの詳細は、セグメンテーションキットのReadmeか、[[...
---開始時間・終了時間はフレーム単位([[参考:http://shower...
---n_scoreは音響尤度をあらわし、この値が大きいほど推定結...
***IPA音響モデルで試す [#s201f90b]
-[[IPA音響モデル:http://shower.human.waseda.ac.jp/~m-kouk...
19行目 $hmmdefs="./models/hmmdefs_monof_mix16_gid.binhmm...
> $hmmdefs="./model/phone_m_IPA/model/monof/mix16/f...
--IPA音響モデルの中には、モノフォン4,8,16混合、各種トライ...
-コマンドラインで以下を実行します。
cd JULIUS/
perl segment_julius4.pl JULIUS/sample/sample.wav JULIUS/...
--%%sample.trans.align%% ''sample.trans.log'' は以下のよ...
(略)
=== begin forced alignment ===
-- phoneme alignment --
id: from to n_score unit
----------------------------------------
[ 0 22] -19.406990 silB
[ 23 29] -26.072439 ky
[ 30 55] -21.184967 o:
[ 56 67] -24.465780 w
[ 68 75] -28.106598 a
[ 76 86] -27.601252 i
[ 87 98] -23.418436 i
[ 99 106] -23.046021 t
[ 107 116] -25.631763 e
[ 117 126] -25.530054 N
[ 127 138] -24.519287 k
[ 139 143] -24.817968 i
[ 144 149] -24.728354 d
[ 150 161] -25.318420 a
[ 162 203] -18.564754 silE
re-computed AM score: -4603.678711
=== end forced alignment ===
(略)
---フレーム数はほぼ変化なしですが、n_scoreが少し変わりま...
***IPA音響モデル+CSJのサンプルデータで試す [#db9943be]
-.wavファイルと.transファイルがあれば音素の自動ラベリング...
-ただし以下に注意
--長すぎる.wavファイルは処理できないため、無声部「#」で区...
--音素の記述はIPA音響モデルの形式(phone_m/parms/monophon...
#ref(monophones.txt);
---無音を表す記号は3種類あり、.transの文頭に"/silB/"、文...
---モーラ表は「IT Text 音声認識システム」の p.45 などを参...
-CSJのA06F0075の冒頭約10秒を自動認識してみましょう
--.wavファイル '''[[A06F0075_short.wav:http://shower.huma...
--.TextGridファイル '''[[A06F0075_short.TextGrid:http://s...
--ちなみに、スピーチの内容
0001 00000.279-00000.462 L:
はい & ハイ
0002 00000.531-00002.539 L:
(F えー) & (F エー)
それでは & ソレデワ
始めさせていただきます & ハジメサセテイタダ...
0003 00002.933-00009.229 L:
(F え) & (F エ)
予稿集の & ヨコーシューノ
方 & (W ホ;ホー)
八十二ページからなんですが & ハチジューニページ...
最初に & サイショニ
(F あの) & (F アノ)
申し訳ございませんが & モーシワケゴザイマ...
ミススペルが & ミススペルガ
ございまして & ゴザイマシテ
#ref(segmentation02.png,,50%);
-今回は手動で必要なファイルを揃えます。
-まずは、「#」記号の開始時間~終了時間の間のどこかで .wav...
--'''[[A06F0075_short_1.wav:http://shower.human.waseda.ac...
--「ハイ」と「エーソレデワハジメサセテイタダキマス」の間...
-続いて、.TextGridの音素ラベルを横に並べて.transフォーマ...
--.TextGridファイルをPraatで読み込んで、以下の[[Praatスク...
#geshi(bash){{
# ファイルを読み込む
Read from file... JULIUS/A06F0075_short.TextGrid
select TextGrid A06F0075_short
# 書きだすファイルを初期化
filedelete JULIUS/A06F0075_short.txt
# item[2](seg層)の intervals の総数(seg要素の総数)を...
number_of_intervals = Get number of intervals... 2
# intervals(各要素)を順番に処理していく
for i from 1 to number_of_intervals
select TextGrid A06F0075_short
# item[2] の intervals[i] の text を得る
interval_label$ = Get label of interval... 2 'i'
# ファイルに書き出す
fileappend "JULIUS/A06F0075_short.txt" 'interval_lab...
endfor
select TextGrid A06F0075_short
Remove
}}
---なお、seg層がまだ記述されていない.TextGridファイルなら...
--結果
# h a i # eH s o r e <cl> d e,w,a h a <cl> zj i m e s a ...
---上述したIPA音響モデルの形式とはかなりずれています。こ...
--修正した結果(1発話目)
silB h a i e: s o r e d e w a h a j i m e s a s e t e i ...
#ref(A06F0075_short_1.trans);
※A06F0075_short_2.trans は自作してみて下さい。
-コマンドラインで以下を実行します。
cd JULIUS/segmentation-kit-v4.0
perl segment_julius4.pl JULIUS\A06F0075_short_1.wav JULI...
--A06F0075_short_1.trans.align は以下のようになります。
--- transcription ---
silB h a i e: s o r e d e w a h a j i m e s a s e t e i ...
(略)
=== begin forced alignment ===
-- phoneme alignment --
id: from to n_score unit
----------------------------------------
[ 0 7] -23.644579 silB
[ 8 54] -26.340855 h
[ 55 57] -27.499634 a
[ 58 62] -25.551952 i
[ 63 70] -24.827682 e:
[ 71 79] -23.284899 s
[ 80 82] -28.166138 o
[ 83 85] -25.924316 r
[ 86 88] -26.113281 e
[ 89 93] -25.907177 d
[ 94 97] -27.854980 e
[ 98 100] -27.261719 w
[ 101 103] -31.947754 a
[ 104 110] -24.703440 h
[ 111 115] -24.811621 a
[ 116 123] -26.681671 j
[ 124 126] -28.597412 i
[ 127 131] -23.906055 m
[ 132 134] -28.595215 e
[ 135 146] -25.724039 s
[ 147 149] -27.833578 a
[ 150 159] -25.979931 s
[ 160 164] -27.291992 e
[ 165 170] -25.116373 t
[ 171 174] -24.063599 e
[ 175 179] -25.904882 i
[ 180 187] -25.971191 t
[ 188 191] -25.661865 a
[ 192 197] -26.334229 d
[ 198 204] -27.668247 a
[ 205 215] -26.290794 k
[ 216 218] -27.065430 i
[ 219 226] -24.325378 m
[ 227 232] -25.482422 a
[ 233 245] -23.292480 s
[ 246 248] -26.724447 u
[ 249 270] -22.294079 silE
(略)
---「ハイ」と「エーソレデワハジメサセテイタダキマス」の間...
--A06F0075_short_2.trans.align もやってみて下さい。
***分析パラメータを変更する [#k5094393]
-segment_julius4.pl では、音響モデルファイルを指定するの...
-任意のパラメータファイル(例えば segment.jconf)を指定し...
# パラメータファイル
$paramfile = "./segment.jconf";
-続いて、segment_julius4.pl のコマンド実行行(130行目付近...
$command = "echo $speechfile | $julius4bin -C $paramfile...
**フレーム数データを時間データに変換する [#c56db81c]
-最後に、.trans.align 形式ファイルで出力された開始・終了...
--[[Juliusのデフォルト設定:http://julius.sourceforge.jp/r...
--上記より1サンプルの時間長は 1/16000秒 なので、フレーム...
400サンプル = (1 / 16000) * 400 = 1 / 40 [秒] = 25 [ミリ...
--フレームシフトサイズの時間長は以下のようになります。
160サンプル = (1 / 16000) * 160 = 1 / 100 [秒] = 10 [ミ...
--イメージ図
#ref(julius_framesize.png,,80%);
--したがって、例えば .trans.align ファイルの開始・終了フ...
---【備考】(1)実際のファイルの総時間、(2).trans.align で...
---【備考】上記の計算だと、前の音素の終了時間のほうが、後...
--以上を自動化して、Praat標準の形式で書き出すperlスクリプ...
---単純なCSVで書き出したい場合は &ref(transalign2csv.pl);
-A06F0075_short_1.trans.align を時間情報に変えてみましょ...
終了行:
*音素自動ラベリング((本ページの内容は '''[[理研コーパス班...
-&color(red){最終更新 : 2014/07/17};
#contents
**はじめに [#z8e107b8]
-連続音声ファイルに含まれる音素(分節音)の開始・終了時間...
-最初に用意するもの
--Julius+単語・音素セグメンテーションキット(下でインス...
--下記の教科書「IT Text 音声認識システム」(IPA音響モデル...
--自動ラベリングを行いたい音声ファイルと、発話内容の書き...
---本ページでは[[日本語話し言葉コーパス(CSJ):http://www...
--[[Praat:http://shower.human.waseda.ac.jp/~m-kouki/pukiw...
-教科書
--「IT Text 音声認識システム」, 情報処理学会【編】, 鹿野...
--[[Juliusの使い方/音素セグメンテーション(音素自動ラベリ...
--[[菊池英明, 前川喜久雄, 五十嵐陽介, 米山聖子, 藤本雅子,...
**ソフトウェアのインストール [#be7f9759]
-任意の場所(たとえば、Cygwinのホームディレクトリ直下)に...
-まず、CygwinとPerlの実行環境をインストールします。[[ここ...
-続いて、音声認識エンジン Julius をインストールします。リ...
-続いて、音声認識に使用する情報処理振興事業協会(IPA)フ...
--「IT Text 音声認識システム」付属CD-ROMの phone_m フォル...
-必要に応じて((MiyazawaがTextGridのテキストを整形するため...
**自動ラベリング [#x67087a4]
***Juliusのサンプル音響モデル・テストデータセットで試す [...
-JULIUS/segment_julius4.pl の以下の行を書き換えます。
--JULIUS/bin/julius-*****.exe のバージョン番号に書き換え...
16行目 $julius4bin="./bin/julius-4.1.5";
> $julius4bin="./bin/julius-4.3.1";
---パスの区切り記号は%%「/」でなく「\\」で記述して下さい%...
---絶対パスで記述して下さい。((相対パスは「'.'は、内部コ...
--音響モデルの正しい場所を指定。ご自分の環境に合わせて書...
19行目 $hmmdefs="./models/hmmdefs_monof_mix16_gid.binhmm...
> $hmmdefs="./model/phone_m/hmmdefs_monof_mix16_gid...
-コマンドラインで以下を実行します。
cd JULIUS/
perl segment_julius4.pl JULIUS/sample/sample.wav JULIUS/...
--Array @words missing the @ ... の警告は、69行目の word ...
--ここではパスの区切り記号は「/」でも「\」でも「\\」でもO...
#ref(segmentation01.png,,60%);
--入力データは音声ファイル sample.wav と、書き下しファイ...
---sample.trans の中身
silB ky o: w a i i t e N k i d a silE
---音素の記述形式が、音響モデル hmmdefs_monof_mix16_gid.b...
-成功すれば、JULIUS/sample 以下に sample.trans.log と sam...
--%%sample.trans.align の例%% → .trans.align ファイルには...
(略)
--- transcription ---
silB ky o: w a i i t e N k i d a silE
(略)
=== begin forced alignment ===
-- phoneme alignment --
id: from to n_score unit
----------------------------------------
[ 0 22] -19.594139 silB
[ 23 31] -25.734671 ky
[ 32 55] -20.839849 o:
[ 56 67] -23.585581 w
[ 68 75] -27.564896 a
[ 76 87] -26.436453 i
[ 88 97] -23.435047 i
[ 98 106] -23.542698 t
[ 107 116] -24.730494 e
[ 117 126] -24.588940 N
[ 127 138] -24.642313 k
[ 139 143] -25.039257 i
[ 144 149] -24.957642 d
[ 150 159] -24.341919 a
[ 160 203] -19.249168 silE
re-computed AM score: -4603.678711
=== end forced alignment ===
(略)
---データの詳細は、セグメンテーションキットのReadmeか、[[...
---開始時間・終了時間はフレーム単位([[参考:http://shower...
---n_scoreは音響尤度をあらわし、この値が大きいほど推定結...
***IPA音響モデルで試す [#s201f90b]
-[[IPA音響モデル:http://shower.human.waseda.ac.jp/~m-kouk...
19行目 $hmmdefs="./models/hmmdefs_monof_mix16_gid.binhmm...
> $hmmdefs="./model/phone_m_IPA/model/monof/mix16/f...
--IPA音響モデルの中には、モノフォン4,8,16混合、各種トライ...
-コマンドラインで以下を実行します。
cd JULIUS/
perl segment_julius4.pl JULIUS/sample/sample.wav JULIUS/...
--%%sample.trans.align%% ''sample.trans.log'' は以下のよ...
(略)
=== begin forced alignment ===
-- phoneme alignment --
id: from to n_score unit
----------------------------------------
[ 0 22] -19.406990 silB
[ 23 29] -26.072439 ky
[ 30 55] -21.184967 o:
[ 56 67] -24.465780 w
[ 68 75] -28.106598 a
[ 76 86] -27.601252 i
[ 87 98] -23.418436 i
[ 99 106] -23.046021 t
[ 107 116] -25.631763 e
[ 117 126] -25.530054 N
[ 127 138] -24.519287 k
[ 139 143] -24.817968 i
[ 144 149] -24.728354 d
[ 150 161] -25.318420 a
[ 162 203] -18.564754 silE
re-computed AM score: -4603.678711
=== end forced alignment ===
(略)
---フレーム数はほぼ変化なしですが、n_scoreが少し変わりま...
***IPA音響モデル+CSJのサンプルデータで試す [#db9943be]
-.wavファイルと.transファイルがあれば音素の自動ラベリング...
-ただし以下に注意
--長すぎる.wavファイルは処理できないため、無声部「#」で区...
--音素の記述はIPA音響モデルの形式(phone_m/parms/monophon...
#ref(monophones.txt);
---無音を表す記号は3種類あり、.transの文頭に"/silB/"、文...
---モーラ表は「IT Text 音声認識システム」の p.45 などを参...
-CSJのA06F0075の冒頭約10秒を自動認識してみましょう
--.wavファイル '''[[A06F0075_short.wav:http://shower.huma...
--.TextGridファイル '''[[A06F0075_short.TextGrid:http://s...
--ちなみに、スピーチの内容
0001 00000.279-00000.462 L:
はい & ハイ
0002 00000.531-00002.539 L:
(F えー) & (F エー)
それでは & ソレデワ
始めさせていただきます & ハジメサセテイタダ...
0003 00002.933-00009.229 L:
(F え) & (F エ)
予稿集の & ヨコーシューノ
方 & (W ホ;ホー)
八十二ページからなんですが & ハチジューニページ...
最初に & サイショニ
(F あの) & (F アノ)
申し訳ございませんが & モーシワケゴザイマ...
ミススペルが & ミススペルガ
ございまして & ゴザイマシテ
#ref(segmentation02.png,,50%);
-今回は手動で必要なファイルを揃えます。
-まずは、「#」記号の開始時間~終了時間の間のどこかで .wav...
--'''[[A06F0075_short_1.wav:http://shower.human.waseda.ac...
--「ハイ」と「エーソレデワハジメサセテイタダキマス」の間...
-続いて、.TextGridの音素ラベルを横に並べて.transフォーマ...
--.TextGridファイルをPraatで読み込んで、以下の[[Praatスク...
#geshi(bash){{
# ファイルを読み込む
Read from file... JULIUS/A06F0075_short.TextGrid
select TextGrid A06F0075_short
# 書きだすファイルを初期化
filedelete JULIUS/A06F0075_short.txt
# item[2](seg層)の intervals の総数(seg要素の総数)を...
number_of_intervals = Get number of intervals... 2
# intervals(各要素)を順番に処理していく
for i from 1 to number_of_intervals
select TextGrid A06F0075_short
# item[2] の intervals[i] の text を得る
interval_label$ = Get label of interval... 2 'i'
# ファイルに書き出す
fileappend "JULIUS/A06F0075_short.txt" 'interval_lab...
endfor
select TextGrid A06F0075_short
Remove
}}
---なお、seg層がまだ記述されていない.TextGridファイルなら...
--結果
# h a i # eH s o r e <cl> d e,w,a h a <cl> zj i m e s a ...
---上述したIPA音響モデルの形式とはかなりずれています。こ...
--修正した結果(1発話目)
silB h a i e: s o r e d e w a h a j i m e s a s e t e i ...
#ref(A06F0075_short_1.trans);
※A06F0075_short_2.trans は自作してみて下さい。
-コマンドラインで以下を実行します。
cd JULIUS/segmentation-kit-v4.0
perl segment_julius4.pl JULIUS\A06F0075_short_1.wav JULI...
--A06F0075_short_1.trans.align は以下のようになります。
--- transcription ---
silB h a i e: s o r e d e w a h a j i m e s a s e t e i ...
(略)
=== begin forced alignment ===
-- phoneme alignment --
id: from to n_score unit
----------------------------------------
[ 0 7] -23.644579 silB
[ 8 54] -26.340855 h
[ 55 57] -27.499634 a
[ 58 62] -25.551952 i
[ 63 70] -24.827682 e:
[ 71 79] -23.284899 s
[ 80 82] -28.166138 o
[ 83 85] -25.924316 r
[ 86 88] -26.113281 e
[ 89 93] -25.907177 d
[ 94 97] -27.854980 e
[ 98 100] -27.261719 w
[ 101 103] -31.947754 a
[ 104 110] -24.703440 h
[ 111 115] -24.811621 a
[ 116 123] -26.681671 j
[ 124 126] -28.597412 i
[ 127 131] -23.906055 m
[ 132 134] -28.595215 e
[ 135 146] -25.724039 s
[ 147 149] -27.833578 a
[ 150 159] -25.979931 s
[ 160 164] -27.291992 e
[ 165 170] -25.116373 t
[ 171 174] -24.063599 e
[ 175 179] -25.904882 i
[ 180 187] -25.971191 t
[ 188 191] -25.661865 a
[ 192 197] -26.334229 d
[ 198 204] -27.668247 a
[ 205 215] -26.290794 k
[ 216 218] -27.065430 i
[ 219 226] -24.325378 m
[ 227 232] -25.482422 a
[ 233 245] -23.292480 s
[ 246 248] -26.724447 u
[ 249 270] -22.294079 silE
(略)
---「ハイ」と「エーソレデワハジメサセテイタダキマス」の間...
--A06F0075_short_2.trans.align もやってみて下さい。
***分析パラメータを変更する [#k5094393]
-segment_julius4.pl では、音響モデルファイルを指定するの...
-任意のパラメータファイル(例えば segment.jconf)を指定し...
# パラメータファイル
$paramfile = "./segment.jconf";
-続いて、segment_julius4.pl のコマンド実行行(130行目付近...
$command = "echo $speechfile | $julius4bin -C $paramfile...
**フレーム数データを時間データに変換する [#c56db81c]
-最後に、.trans.align 形式ファイルで出力された開始・終了...
--[[Juliusのデフォルト設定:http://julius.sourceforge.jp/r...
--上記より1サンプルの時間長は 1/16000秒 なので、フレーム...
400サンプル = (1 / 16000) * 400 = 1 / 40 [秒] = 25 [ミリ...
--フレームシフトサイズの時間長は以下のようになります。
160サンプル = (1 / 16000) * 160 = 1 / 100 [秒] = 10 [ミ...
--イメージ図
#ref(julius_framesize.png,,80%);
--したがって、例えば .trans.align ファイルの開始・終了フ...
---【備考】(1)実際のファイルの総時間、(2).trans.align で...
---【備考】上記の計算だと、前の音素の終了時間のほうが、後...
--以上を自動化して、Praat標準の形式で書き出すperlスクリプ...
---単純なCSVで書き出したい場合は &ref(transalign2csv.pl);
-A06F0075_short_1.trans.align を時間情報に変えてみましょ...
ページ名:
既存のページ名で編集する