Hatena::Groupnadesiko

雪乃☆雫のなでしこ日和

2017/03/03 (金)

単語リストを作る

| 23:39 | 単語リストを作る - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - 単語リストを作る - 雪乃☆雫のなでしこ日和 単語リストを作る - 雪乃☆雫のなでしこ日和 のブックマークコメント

 Juliusの文法認識キットでは、記述文法による小語彙の認識と、単語リストのみで実行できる孤立単語認識があります

 簡単なのは、もちろん単語リストの方です。

 記述文法の方は・・・文法自体は簡単っぽいんだけど、なんかコンパイルとかしなきゃないらしく・・・コンパイルするにはperlをインストールしなきゃないらしく・・・(*_*)


 単語リストの方は、簡単です。

 こんなの。

#-----------------------------------------------------------
ナコ様				n a k o s a m a
ワニさん			w a n i s a N
くじらさん			k u j i r a s a N
らいおん君			r a i o N k u N
ペンちゃん			p e N ch a N
#-----------------------------------------------------------

 基本ローマ字なんだけど、全部半角スペースで区切らなきゃならないから、手打ちは結構面倒。

 あと、「ん」は大文字の「N」だったり、長音は前のに続けて「:」だったりの法則があるみたいだけど、分かりやすい表みたいなのが無いなあと思っていたら、ひらがなで入れたら変換してくれるヤツがあって、しかもこれまたperl><

 perlは全く分かりませんが、しかし、いちおう中を覗いてみたところ、単に正規表現で順番に置換してるだけっぽい!

 それなら、なでしこさんで出来るね☆

 ・・・っと、作ってみたのがこちら。

#ひらがなをJuliusの音素列に変換
#-----------------------------------------------------------------------
変換辞書とは配列。変換辞書設定。
元ファイルはファイル選択。
//出力ファイルは元ファイルを「.voca」に拡張子変更出力ファイルは元ファイルを「.jdic」に拡張子変更。

元データは元ファイルを開く。
元データはそれの「{タブ}+」を「{タブ}」に正規表現置換。
元データはそれの「  +」を「{タブ}」に正規表現置換。
元データはそれTSV取得。
結果=。

元データで反復
  一時=対象¥1
  もし対象の1文字左部分=「#」または、対象の1文字左部分=「%」でなければ、
    変換辞書で反復
      一時は一時の(対象¥0)を(対象¥1)へ正規表現置換。
  結果は「{結果}{元データ¥(回数-1),0}{タブ}{一時}{改行}」
結果を出力ファイルに保存終わる。

#-----------------------------------------------------------------------
# ひらがな -> Julius 標準モデル用変換辞書(yomi2voca.plより抽出)
#-----------------------------------------------------------------------
*変換辞書設定
  変換辞書=「う゛ぁ," b a"{~}う゛ぃ," b i"{~}う゛ぇ," b e"{~}う゛ぉ," b o"{~}う゛ゅ," by u"
ぅ゛," b u"{~}あぁ," a a"{~}いぃ," i i"{~}いぇ," i e"{~}いゃ," y a"{~}うぅ," u:"{~}えぇ," e e"{~}おぉ," o:"
かぁ," k a:"{~}きぃ," k i:"{~}くぅ," k u:"{~}くゃ," ky a"{~}くゅ," ky u"{~}くょ," ky o"{~}けぇ," k e:"{~}こぉ," k o:"
がぁ," g a:"{~}ぎぃ," g i:"{~}ぐぅ," g u:"{~}ぐゃ," gy a"{~}ぐゅ," gy u"{~}ぐょ," gy o"{~}げぇ," g e:"{~}ごぉ," g o:"
さぁ," s a:"{~}しぃ," sh i:"{~}すぅ," s u:"{~}すゃ," sh a"{~}すゅ," sh u"{~}すょ," sh o"{~}せぇ," s e:"{~}ぉ," s o:"
ざぁ," z a:"{~}じぃ," j i:"{~}ずぅ," z u:"{~}ずゃ," zy a"{~}ずゅ," zy u"{~}ずょ," zy o"{~}ぜぇ," z e:"{~}ぞぉ," z o:"
たぁ," t a:"{~}ちぃ," ch i:"{~}つぁ," ts a"{~}つぃ," ts i"{~}つぅ," ts u:"{~}つゃ," ch a"{~}つゅ," ch u"{~}つょ," ch o"
つぇ," ts e"{~}つぉ," ts o"{~}てぇ," t e:"{~}とぉ," t o:"
だぁ," d a:"{~}ぢぃ," j i:"{~}づぅ," d u:"{~}づゃ," zy a"{~}づゅ," zy u"{~}づょ," zy o"{~}でぇ," d e:"{~}どぉ," d o:"
なぁ," n a:"{~}にぃ," n i:"{~}ぬぅ," n u:"{~}ぬゃ," ny a"{~}ぬゅ," ny u"{~}ぬょ," ny o"{~}ねぇ," n e:"{~}のぉ," n o:"
はぁ," h a:"{~}ひぃ," h i:"{~}ふぅ," f u:"{~}ふゃ," hy a"{~}ふゅ," hy u"{~}ふょ," hy o"{~}へぇ," h e:"{~}ほぉ," h o:"
ばぁ," b a:"{~}びぃ," b i:"{~}ぶぅ," b u:"{~}ふゃ," hy a"{~}ぶゅ," by u"{~}ふょ," hy o"{~}べぇ," b e:"{~}ぼぉ," b o:"
ぱぁ," p a:"{~}ぴぃ," p i:"{~}ぷぅ," p u:"{~}ぷゃ," py a"{~}ぷゅ," py u"{~}ぷょ," py o"{~}ぺぇ," p e:"{~}ぽぉ," p o:"
まぁ," m a:"{~}みぃ," m i:"{~}むぅ," m u:"{~}むゃ," my a"{~}むゅ," my u"{~}むょ," my o"{~}めぇ," m e:"{~}もぉ," m o:"
やぁ," y a:"{~}ゆぅ," y u:"{~}ゆゃ," y a:"{~}ゆゅ," y u:"{~}ゆょ," y o:"{~}よぉ," y o:"
らぁ," r a:"{~}りぃ," r i:"{~}るぅ," r u:"{~}るゃ," ry a"{~}るゅ," ry u"{~}るょ," ry o"{~}れぇ," r e:"{~}ろぉ," r o:"
わぁ," w a:"{~}をぉ," o:"{~}う゛," b u"{~}でぃ," d i"{~}でぇ," d e:"{~}でゃ," dy a"{~}でゅ," dy u"{~}でょ," dy o"
てぃ," t i"{~}てぇ," t e:"{~}てゃ," ty a"{~}てゅ," ty u"{~}てょ," ty o"{~}すぃ," s i"
ずぁ," z u a"{~}ずぃ," z i"{~}ずぅ," z u"{~}ずゃ," zy a"{~}ずゅ," zy u"{~}ずょ," zy o"{~}ずぇ," z e"{~}ずぉ," z o"
きゃ," ky a"{~}きゅ," ky u"{~}きょ," ky o"{~}しゃ," sh a"{~}しゅ," sh u"{~}しぇ," sh e"{~}しょ," sh o"
ちゃ," ch a"{~}ちゅ," ch u"{~}ちぇ," ch e"{~}ちょ," ch o"{~}とぅ," t u"{~}とゃ," ty a"{~}とゅ," ty u"{~}とょ," ty o"
どぁ," d o a"{~}どぅ," d u"{~}どゃ," dy a"{~}どゅ," dy u"{~}どょ," dy o"{~}どぉ," d o:"
にゃ," ny a"{~}にゅ," ny u"{~}にょ," ny o"{~}ひゃ," hy a"{~}ひゅ," hy u"{~}ひょ," hy o"
みゃ," my a"{~}みゅ," my u"{~}みょ," my o"{~}りゃ," ry a"{~}りゅ," ry u"{~}りょ," ry o"
ぎゃ," gy a"{~}ぎゅ," gy u"{~}ぎょ," gy o"{~}ぢぇ," j e"{~}ぢゃ," j a"{~}ぢゅ," j u"{~}ぢょ," j o"
じぇ," j e"{~}じゃ," j a"{~}じゅ," j u"{~}じょ," j o"{~}びゃ," by a"{~}びゅ," by u"{~}びょ," by o"
ぴゃ," py a"{~}ぴゅ," py u"{~}ぴょ," py o"{~}うぁ," u a"{~}うぃ," w i"{~}うぇ," w e"{~}うぉ," w o"
ふぁ," f a"{~}ふぃ," f i"{~}ふぅ," f u"{~}ふゃ," hy a"{~}ふゅ," hy u"{~}ふょ," hy o"{~}ふぇ," f e"{~}ふぉ," f o"
あ," a"{~}い," i"{~}う," u"{~}え," e"{~}お," o"{~}か," k a"{~}き," k i"{~}く," k u"{~}け," k e"{~}こ," k o"
さ," s a"{~}し," sh i"{~}す," s u"{~}せ," s e"{~}," s o"{~}た," t a"{~}ち," ch i"{~}つ," ts u"{~}て," t e"{~}と," t o"
な," n a"{~}に," n i"{~}ぬ," n u"{~}ね," n e"{~}の," n o"{~}は," h a"{~}ひ," h i"{~}ふ," f u"{~}へ," h e"{~}ほ," h o"
ま," m a"{~}み," m i"{~}む," m u"{~}め," m e"{~}も," m o"{~}ら," r a"{~}り," r i"{~}る," r u"{~}れ," r e"{~}ろ," r o"
が," g a"{~}ぎ," g i"{~}ぐ," g u"{~}げ," g e"{~}ご," g o"{~}ざ," z a"{~}じ," j i"{~}ず," z u"{~}ぜ," z e"{~}ぞ," z o"
だ," d a"{~}ぢ," j i"{~}づ," z u"{~}で," d e"{~}ど," d o"{~}ば," b a"{~}び," b i"{~}ぶ," b u"{~}べ," b e"{~}ぼ," b o"
ぱ," p a"{~}ぴ," p i"{~}ぷ," p u"{~}ぺ," p e"{~}ぽ," p o"{~}や," y a"{~}ゆ," y u"{~}よ," y o"
わ," w a"{~}ゐ," i"{~}ゑ," e"{~}を," o"{~}ん," N"{~}っ," q"{~}ー,":"
ぁ," a"{~}ぃ," i"{~}ぅ," u"{~}ぇ," e"{~}ぉ," o"{~}ゎ," w a"{~}ぉ," o"{~}"^ ([a-z])","$1"{~}"\:+",":"」をCSV取得。
#-----------------------------------------------------------------------

 perlがまるっきりいっこも分かんないので移植とは言えませんけど、肝心なのは変換辞書の部分で、これはJuliusに付属している「yomi2voca.pl」から機械的に抜きました。

 たぶんこれを上から順番に、どんどこ置換してってるだけだと思うんだよね~。

 いちおう、うまくいってると思うんだけど・・・

 なんだか、記述文法のvocaファイルでは、「%」がカテゴリのヘッダ、「#」がコメント行となっているようで、のまま出力するようにしてますが、単語リストの場合には、余計なモノは一切入れたらダメみたいです。


 ふりがなではなくて、「読み」なので、「こんにちは」「お姉さん」などは、「こんにちは」「おねえさん」ではなく、「こんにちわ」「おねーさん」みたく、実際の発声に近づけて入れるのがいいみたい。

(「yomi2voca.pl」の中には「助詞の「は」「へ」「を」→「w a」「e」「o」は変換後に手動で直すこと.」・・・て注釈がはいってるんだけど、「を」はちゃんと変換出来ることになっているし、下の「は」「へ」も、ひらがなの段階で、「わ」「え」に直しておくのがイイと思う)


 で、こんなふうに変換して、

#---nako.txt------------------------------------------------
こんにちは			こんにちわ
バイバイ			ばいばい
ナコ				なこ
お姉さん			おねーさん
#-----------------------------------------------------------
 ↓   ↓   ↓
#---nako.jdic-----------------------------------------------
こんにちは	k o N n i ch i w a
バイバイ	b a i b a i
ナコ	n a k o
お姉さん	o n e: s a N
#-----------------------------------------------------------

 「-w nako.jdic(単語リストファイル名)」のオプションを付けて起動します。

 単語リストの拡張子は、別になんでもいいみたい。

 限られた単語の中から判断するので、非常に認識率はいいですが、どんな音を拾っても、近いものに無理矢理割り付けるので困ったもんだというところ;

 カタッというような雑音や、文法認識キットのサンプルにもあったような、「えっと」だの「あのー」だのという言葉を認識させておいて、最終的には無視する・・・的な感じですかね。

めだかめだか 2017/03/06 01:33 お久しぶりです。
最近、久々にゲームにハマってしまってなんにも出来てないめだかです(笑

横から失礼しますが、雑音の方は、言葉とは違って音が1つだったと思います。
音が1つって言うのが、日本語の場合、「ごど」だと、g o・d o ですが、音の場合、同じ「ごど」でも、godoとなっていたと思います。
なので、音の数でいけたはず...です...!
(ものすーごく曖昧な記憶です...なので、信憑性0です(笑))

また、雑音の前後の余白での判別や、定型句に登録されていない(使用率が低い)から、雑音と処理する。みたいなのが出来ると思います。
後は、音の高さで判別するぐらいしか思いつかないです~...

もっと難しい方法を使うとしたら、音の厚さが~...反射が~...とか意味不明な領域にいっちゃうので、当方お手上げです(既に無理です^^;

「あのー」や「えー」や「えっと」などは、定型句登録しておき、その単語で認識された場合、削除などでいいと思います。

ただ、それらの処理がなでしこで可能かと言われると、難しいものがあります...めっぽう音や動画には弱いなでしこちゃんなのでねぇ...(笑

雪乃☆雫雪乃☆雫 2017/03/07 16:13 めだかさん、こんにちは。ありがとうございます☆
あぁ~、ワタシもゲームにはまれば、月単位で帰ってこなくなりますよw
もっとも、長いゲームにはまる気力と体力がもう無いですが;

 えーっと、なでしこさん側でやっているのは、ゆりうすさんが返してよこす文字列をどうこうしてるだけなんで、むしろなでしこさんの得意分野かもしんない。
 音声認識部分は、完全にゆりうすさんに丸投げで、ゆりうすさんのリファレンス自体が全く理解不能で、ワタシなんぞには意味不明な領域ばっかです><;
 この単語リストを使った認識は、Juliusの機能の中でも一番簡便な物で、もう完全に単なる「単語リスト」で、ノイズの概念はなく、余白などの設定も無いし、とにかくどんな音を拾っても、リスト内のどれかに無理矢理割り当てて返してよこすんですよwww

 で、おっしゃってる「雑音だと音が一つ」とゆうことと、同じコトなのかどうか・・・
 擬音語で言うと「カタッ」とか「ガタン」と言うところだけど、実際の音はそうではないですよねぇ。一種の破裂音?的な。
 この手の音については、リストにいくつか適当な単音を登録しておいて、それを無視するのがいいみたい。(Juliusの音素列は、「ごど」ならどうしたって「g o d o」でなくてはならず「godo」などとすると、ゆりうすさん自体が起動しなくなっちゃうヽ(;´Д`)ノ)
 原始的だけど、今、五十音の単語リストを作って、どんな音がどの音素列に割り当てられてくる率が高いか試してみてる~。
 集計して、多いヤツをいくつか登録してやる予定~。

ゲスト



トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20170303