juliusの文法辞書作成

前回で音声認識と出力まで行うことができた。
速度の問題は、ラズパイの性能問題が大きいので後回し。

今回は、音声認識の向上ということで、辞書作成に励みます。

参考にさせてもらったサイトは以下です。

Juliusの使い方(version 4.4.2 対応版)~ ラズベリーパイ研究室

Raspberry Pi3×Julius(読みファイルと文法ファイル)

どちらも、mkdfa をコピーしているところがあるので、ここを省かない方が良い。(未検証)

あと、yomi2voca.pl で読み用の辞書ファイルを作成することを記載しているところは、
utf8からeucjpへの変換をかけているけど、ここから下の文法ファイルを作成する際は、文字コードの変換はしなくても動作したことを、一応書いておく。
文法登録は、辞書ファイルと文法ファイルの二つを作成する。
単語登録のファイルを作成して、yomi2voca.pl で、読み方の変換を行ってから作成したらちょっと楽
ファイル名は同一であることが必要

$ cd haro
$ cat haro.voca
% TITLE
ハロ    h a r o
% WO
を      w o
% PLEASE
音楽    o N g a k u
検索    k e N s a k u
おはよう        o h a y o u
こんにちは      k o N n i ch i w a
おやすみ        o y a s u m i
元気    g e N k i
時間    j i k a N
時刻    j i k o k u
終わり  o w a r i
ストップ        s u t o q p u
消して  k e sh i t e
アイカツ        a i k a ts u
% NS_B
[s]     silB
% NS_E
[s]     silE


文法ファイルの作成
$ cat haro.grammar
S       : NS_B TITLE_ PLEASE NS_E
S       : NS_B TITLE_ NS_E
TITLE_  : TITLE
TITLE_  : TITLE WO

参考サイトは「S」の行が先頭の一つだけ。
この場合、「ハロ」と声をかけても、必ず後ろに「元気」とか「検索」とかキーワードが入ってしまう。試しに上記のようにしてみたら、「ハロ」は単体として認識できた。

各ファイルの作成を実施
$ ~/julius/julius-4.4.2/gramtools/mkdfa/mkdfa.pl haro

起動は、単純に辞書ファイルを作成した時と違うので注意。
$ julius -C ~/julius/grammar-kit-v4.1/hmm_mono.jconf -input mic -gram haro -module

「ハロ」と言ってみた場合

<RECOGOUT>
  <SHYPO RANK="1" SCORE="-1939.878174" GRAM="0">
    <WHYPO WORD="[s]" CLASSID="3" PHONE="silB" CM="1.000"/>
    <WHYPO WORD="ハロ" CLASSID="0" PHONE="h a r o" CM="0.894"/>
    <WHYPO WORD="[s]" CLASSID="4" PHONE="silE" CM="1.000"/>
  </SHYPO>
</RECOGOUT>

「ハロ 検索」
<RECOGOUT>
  <SHYPO RANK="1" SCORE="-2968.890869" GRAM="0">
    <WHYPO WORD="[s]" CLASSID="3" PHONE="silB" CM="1.000"/>
    <WHYPO WORD="ハロ" CLASSID="0" PHONE="h a r o" CM="0.964"/>
    <WHYPO WORD="検索" CLASSID="2" PHONE="k e N s a k u" CM="0.477"/>
    <WHYPO WORD="[s]" CLASSID="4" PHONE="silE" CM="1.000"/>
  </SHYPO>
</RECOGOUT>

「ハロ 音楽」
<RECOGOUT>
  <SHYPO RANK="1" SCORE="-2288.977051" GRAM="0">
    <WHYPO WORD="[s]" CLASSID="3" PHONE="silB" CM="1.000"/>
    <WHYPO WORD="ハロ" CLASSID="0" PHONE="h a r o" CM="0.860"/>
    <WHYPO WORD="音楽" CLASSID="2" PHONE="o N g a k u" CM="0.958"/>
    <WHYPO WORD="[s]" CLASSID="4" PHONE="silE" CM="1.000"/>
  </SHYPO>
</RECOGOUT>

「ハロ ストップ」
<RECOGOUT>
  <SHYPO RANK="1" SCORE="-2542.952393" GRAM="0">
    <WHYPO WORD="[s]" CLASSID="3" PHONE="silB" CM="1.000"/>
    <WHYPO WORD="ハロ" CLASSID="0" PHONE="h a r o" CM="0.944"/>
    <WHYPO WORD="ストップ" CLASSID="2" PHONE="s u t o q p u" CM="0.978"/>
    <WHYPO WORD="[s]" CLASSID="4" PHONE="silE" CM="1.000"/>
  </SHYPO>
</RECOGOUT>

CLASSIDは、haro.vocaに記載した構文文字列の順番のよう。
これらをうまく使うと、2語以上の言葉もうまく制御できるだと思う。
それは次回で。

このあと、超気になるページを発見してしまった。非常に勉強になる。ここで使ってる声は良い!
Raspberry pi3をベースにしたAIスピーカをガッツリ作ってみた ~自作して分かった課題と対策~



0 件のコメント:

コメントを投稿