文法の記述方法

Julian における文法の記述方法について概説します.詳しくは別途配布のツールキット「Julian 文法キット」をご覧下さい.

タスク文法

Julian では Julius と異なり,認識対象とする音声の構文構造や語彙を人の手で明示的に記述します.Julian は与えられた文法で許される範囲のみで最尤解探索を行い,入力を最も良く説明できる文字列を結果として出力します.

この構文制約や語彙は,通常システムが対象とするタスクごとに記述します.これをここでは「タスク文法」と呼びます.

文法の記述

タスク文法は,構文制約を単語のカテゴリを終端規則としてBNF風に記述する grammar ファイルと,カテゴリごとの単語の表記と読み(音素列)を登録する voca ファイルに分けて記述します.

構文制約は,形式上はCFGのクラスまで記述可能ですが,Julian は正規文法のクラスまでしか扱えません.この制限はコンパイル時に自動チェックされます.また再帰性は左再帰性のみ扱えます. 以下,例として,以下のような文章を受理する文法を考えます.

この文を受理する grammar ファイルは以下のように書けます.シンボル "S" が固定の開始記号です.NS_B, NS_E, NOISE はそれぞれ始端,終端,文中の無音区間(ポーズ)に対応します.
S          : NS_B CHGCOLOR_S NS_E
S          : NS_B QUIT_S NS_E
CHGCOLOR_S : COLOR_NP NI NOISE SURU_VP
COLOR_NP   : COLOR_N
COLOR_NP   : COLOR_N IRO_N
SURU_VP    : SURU_V
SURU_VP    : KUDASAI_V
QUIT_S     : QUIT_V SURU_V
左辺に出てこなかったシンボル(上図中赤文字)が終端記号,すなわち単語カテゴリとなります.voca ファイルではその各単語カテゴリごとに単語を登録します.
% COLOR_N
赤            a k a
白            sh i r o
黄緑	     k i m i d o r i
青            a o
% IRO_N
色            i r o
% SURU_V
します        sh i m a s u
% KUDASAI_V
してください  sh i t e k u d a s a i
% QUIT_V
終了          sh u: ry o:
% NI
に            n i
% NS_B
silB          silB
% NS_E
silE          silE
% NOISE
sp            sp

Julian 形式への変換

grammar ファイルと voca ファイルは,専用コンパイラ "mkdfa.pl" を用いて決定性有限状態オートマトンファイル(.dfa)と辞書ファイル(.dict)に変換します.
(grammarファイル=sample.grammar, vocaファイル=sample.voca の場合)
% mkdfa.pl sample
sample.grammar has 8 rules
sample.voca    has 9 categories and 12 words
---
Now parsing grammar file
Now modifying grammar to minimize states[0]
Now parsing vocabulary file
Now making nondeterministic finite automaton[10/10]
Now making deterministic finite automaton[10/10] 
Now making triplet list[10/10]
---
-rw-r--r--    1 foo      users         134 Aug 17 17:50 sample.dfa
-rw-r--r--    1 foo      users         212 Aug 17 17:50 sample.dict
-rw-r--r--    1 foo      users          75 Aug 17 17:50 sample.term

Julian の起動

変換したファイルを使って以下の要領で Julian を起動できます.

% julian -dfa sample.dfa -v sample.dict...
文法以外に音響モデルも指定する必要があります.また探索パラメータも設定できます.すべての設定を jconf ファイルに書いておくこともできます.
このあたりのやり方は Julius と全く同じです.

以上です.


$Id: julian_dfa.html,v 1.3 2002/09/11 21:00:39 ri Exp $