Kaldi에 관한 처리를 일본어 문서로 정리해 보았다 (데이터 준비편) 2
지난번
1 : ぃ tp // m / gu S의 w / ms / c 1440 0 0 8 199 78 c5
데이터 준비편 후편
11 : OpenFst를 사용하여 sil에서 가중 상태 변환기를 만듭니다.
가중 상태 변환기에 대해 가볍게 설명
가중 상태 변환기는 음성 인식, 기계 학습, 문자 인식 등 널리 사용된다. Kaldi도 사용하고 있다.
상세
h tp // w w. 오페인 fst. 오 rg / 토키 / 병 / ぃ 에 w / FST / Fst 쿠이 ck 토르 r
아래와 같이 입력과 출력의 쌍이 있으며, 그 쌍에 대해 가중치가 붙어 초기 상태에서의 변천을 나타낸다.
이번에는
입력이 음소
출력이 단어
다음 명령으로 작성됩니다.
#silのみ出力
utils/make_lexicon_fst_silprob.pl $tmpdir/lexiconp_silprob_disambig.txt $s rcdir/silprob.txt $silphone '#'$ndisambig | \
#置き換え処理
sed 's=\#[0-9][0-9]*=<eps>=g' | \for indirect one, use twice the learning rate
#音素を入力、単語を出力として重み付き状態変換器の作成
fstcompile --isymbols=$dir/phones.txt --osymbols=$dir/words.txt \
--keep_isymbols=false --keep_osymbols=false | \
#14:重み付き状態変換器をソート:下記に例を示す
fstarcsort --sort_type=olabel > $dir/L.fst || exit 1
정렬 예
정렬 전
정렬 후
정렬 전과 정렬 후 출력 라벨의 오름차순으로 정렬되어 있음을 알 수 있습니다.
위 그림에서는 가중치가 표시되지 않습니다.
위의 명령으로 출력 된 fst 파일의 내용을 확인하는 방법
fstprint --isymbols=./data/lang/phones.txt(音素ファイル) --osymbols=./data/lang/words.txt(単語ファイル) ../../../test_japanese/data/lang_test_tg/L.fst(fstファイル) test.txt(出力されるファイル)
출력된 파일의 내용
라벨
다음으로 전환할 라벨
음소
단어
무게
0
1
0.693147182
0
1
SIL
0.693147182
1
1
SIL
!SIL
1
1
SIL_E
'EM
0.693147182
1
2
SIL_E
'EM
0.693147182
1
1
SIL_B
A
0.693147182
1
2
SIL_B
A
0.693147182
1
2
1
SIL
이것들을 그림으로 고치고 싶다면shell-session
fstdraw --isymbols=./data/lang/phones.txt(音素ファイル) --osymbols=./data/lang/words.txt(単語ファイル) ../../../test_japanese/data/lang_test_tg/L.fst(fstファイル) test.dot(dot記述式ファイル)
dot 파일을 이미지 파일로 변환하고 열기
dot -Tjpg test.dot > test.jpg
xli test.jpg
아래와 같이 출력되는
표에 나타낸 라벨, 다음으로 천이하는 라벨, 음소, 단어, 가중치에 대응하는 것을 알 수 있다.
12 : utils / sym2int.pl을 사용하여 다음 파일을 int 형식으로 변환합니다.
oov.txt
phones.txt
roots.txt
word_boundary.txt
13 : disambiguation symbols의 fst 파일을 작성한다.
14: 출력된 디렉토리를 체크한다.
언어 모델에 대해 가중 상태 변환기를 생성합니다.
cat $lmdir/lm.arpa | \
grep -v '<s> <s>' | \
grep -v '</s> <s>' | \
grep -v '</s> </s>' | \
arpa2fst - | fstprint | \
utils/remove_oovs.pl $tmpdir/oovs.txt | \
utils/eps2disambig.pl | utils/s2eps.pl | fstcompile --isymbols=$test/words.txt \
--osymbols=$test/words.txt --keep_isymbols=false --keep_osymbols=false | \
fstrmepsilon | fstarcsort --sort_type=ilabel > $test/G.fst
fstisstochastic $test/G.fst
빈 문자에 대해서도 fst 파일 만들기
awk '{if(NF==1){ printf("0 0 %s %s\n", $1,$1); }} END{print "0 0 #0 #0"; print "0";}' \
< "$lexicon" >$tmpdir/g/select_empty.fst.txt
fstcompile --isymbols=$test/words.txt --osymbols=$test/words.txt \
$tmpdir/g/select_empty.fst.txt | \
fstarcsort --sort_type=olabel | fstcompose - $test/G.fst > $tmpdir/g/empty_words.fst
fstinfo $tmpdir/g/empty_words.fst | grep cyclic | grep -w 'y' &&
echo "Language model has cycles with empty words" && exit 1
rm -rf $tmpdir
이것으로 데이터 준비가 종료됩니다.
다음부터는 데이터로부터의 특징량 추출에 들어갑니다.
Reference
이 문제에 관하여(Kaldi에 관한 처리를 일본어 문서로 정리해 보았다 (데이터 준비편) 2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/GushiSnow/items/a24cad7231de341738ee
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
11 : OpenFst를 사용하여 sil에서 가중 상태 변환기를 만듭니다.
가중 상태 변환기에 대해 가볍게 설명
가중 상태 변환기는 음성 인식, 기계 학습, 문자 인식 등 널리 사용된다. Kaldi도 사용하고 있다.
상세
h tp // w w. 오페인 fst. 오 rg / 토키 / 병 / ぃ 에 w / FST / Fst 쿠이 ck 토르 r
아래와 같이 입력과 출력의 쌍이 있으며, 그 쌍에 대해 가중치가 붙어 초기 상태에서의 변천을 나타낸다.
이번에는
입력이 음소
출력이 단어
다음 명령으로 작성됩니다.
#silのみ出力
utils/make_lexicon_fst_silprob.pl $tmpdir/lexiconp_silprob_disambig.txt $s rcdir/silprob.txt $silphone '#'$ndisambig | \
#置き換え処理
sed 's=\#[0-9][0-9]*=<eps>=g' | \for indirect one, use twice the learning rate
#音素を入力、単語を出力として重み付き状態変換器の作成
fstcompile --isymbols=$dir/phones.txt --osymbols=$dir/words.txt \
--keep_isymbols=false --keep_osymbols=false | \
#14:重み付き状態変換器をソート:下記に例を示す
fstarcsort --sort_type=olabel > $dir/L.fst || exit 1
정렬 예
정렬 전
정렬 후
정렬 전과 정렬 후 출력 라벨의 오름차순으로 정렬되어 있음을 알 수 있습니다.
위 그림에서는 가중치가 표시되지 않습니다.
위의 명령으로 출력 된 fst 파일의 내용을 확인하는 방법
fstprint --isymbols=./data/lang/phones.txt(音素ファイル) --osymbols=./data/lang/words.txt(単語ファイル) ../../../test_japanese/data/lang_test_tg/L.fst(fstファイル) test.txt(出力されるファイル)
출력된 파일의 내용
라벨
다음으로 전환할 라벨
음소
단어
무게
0
1
0.693147182
0
1
SIL
0.693147182
1
1
SIL
!SIL
1
1
SIL_E
'EM
0.693147182
1
2
SIL_E
'EM
0.693147182
1
1
SIL_B
A
0.693147182
1
2
SIL_B
A
0.693147182
1
2
1
SIL
이것들을 그림으로 고치고 싶다면
shell-session
fstdraw --isymbols=./data/lang/phones.txt(音素ファイル) --osymbols=./data/lang/words.txt(単語ファイル) ../../../test_japanese/data/lang_test_tg/L.fst(fstファイル) test.dot(dot記述式ファイル)
dot 파일을 이미지 파일로 변환하고 열기
dot -Tjpg test.dot > test.jpg
xli test.jpg
아래와 같이 출력되는
표에 나타낸 라벨, 다음으로 천이하는 라벨, 음소, 단어, 가중치에 대응하는 것을 알 수 있다.
12 : utils / sym2int.pl을 사용하여 다음 파일을 int 형식으로 변환합니다.
oov.txt
phones.txt
roots.txt
word_boundary.txt
13 : disambiguation symbols의 fst 파일을 작성한다.
14: 출력된 디렉토리를 체크한다.
언어 모델에 대해 가중 상태 변환기를 생성합니다.
cat $lmdir/lm.arpa | \
grep -v '<s> <s>' | \
grep -v '</s> <s>' | \
grep -v '</s> </s>' | \
arpa2fst - | fstprint | \
utils/remove_oovs.pl $tmpdir/oovs.txt | \
utils/eps2disambig.pl | utils/s2eps.pl | fstcompile --isymbols=$test/words.txt \
--osymbols=$test/words.txt --keep_isymbols=false --keep_osymbols=false | \
fstrmepsilon | fstarcsort --sort_type=ilabel > $test/G.fst
fstisstochastic $test/G.fst
빈 문자에 대해서도 fst 파일 만들기
awk '{if(NF==1){ printf("0 0 %s %s\n", $1,$1); }} END{print "0 0 #0 #0"; print "0";}' \
< "$lexicon" >$tmpdir/g/select_empty.fst.txt
fstcompile --isymbols=$test/words.txt --osymbols=$test/words.txt \
$tmpdir/g/select_empty.fst.txt | \
fstarcsort --sort_type=olabel | fstcompose - $test/G.fst > $tmpdir/g/empty_words.fst
fstinfo $tmpdir/g/empty_words.fst | grep cyclic | grep -w 'y' &&
echo "Language model has cycles with empty words" && exit 1
rm -rf $tmpdir
이것으로 데이터 준비가 종료됩니다.
다음부터는 데이터로부터의 특징량 추출에 들어갑니다.
Reference
이 문제에 관하여(Kaldi에 관한 처리를 일본어 문서로 정리해 보았다 (데이터 준비편) 2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/GushiSnow/items/a24cad7231de341738ee텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)