\documentclass[11pt,a4j]{jarticle}
\usepackage{mybox}
\usepackage{ascmac}
\usepackage{graphicx}

%%         (1)孤立単語認識の文法作成・認識（数字認識？）
%%         (2)簡単な文法の作成・認識（test3, 4を使って）
%%         (3)認識率算出（CD-ROM の scoring ツールを使って）
%%         (4)ノイズを挟む/挟まないの効果検証（(2)の文法上で）
%%         (5)音素タイプライターを試してみる
%%         (6)ゆるい文法を試してみる
%%         (7)タスクを決めて文法を作成してもらう．
%%         (8)大語彙の文法を作って試して貰う（辞書は用意する）

\title{ネットワーク文法の作成方法}
\author{李　晃伸}

\begin{document}
\maketitle

\section{連続音声認識パーザ Julian について}

音声認識モジュールは，連続音声認識パーザ Julian に基づいて作成されまし
た．Julian は有限状態文法(DFA)に基づく連続音声認識を行うソフトウェアで
す。与えられた文法規則の元で入力音声に対して最尤の単語系列を探しだし出
力します．

Julian を用いた音声認識システムは，図\ref{fig:julian}のように{\bf タス
ク文法}と{\bf 音響モデル}を Julian に与えることで構成されます．タスク
文法は，その認識システムで扱う入力文のパターンを与えます．音響モデルは
通常音素単位で与えられ，各単語の音響尤度計算に用られます．
\begin{figure}[h]
  \begin{center}
    \includegraphics[scale=.4]{julian_system.eps}
    \caption{Julianを用いた音声認識システム}
    \label{fig:julian}
  \end{center}
\end{figure}

\paragraph{タスク文法}

タスク文法は，語彙を登録する単語辞書 {\bf voca ファイル} と，各単語の構
文上の接続関係を記述した {\bf grammar ファイル} からなります．システム設
計者は，対象とするタスクで発声される内容を受理できるようこれらのファイル
を記述します．これらを専用コンパイラ ``mkdfa.pl'' を使って，それぞれ 
Julian 用の認識辞書と有限状態オートマトン(DFA)ネットワークに変換して使
用します．図\ref{fig:gramnet}にDFA ネットワークの例を示します．Julian
は入力に対して，この DFA ネットワーク上で最尤の系列を見つけて出力します．
なおJulianの扱える最大語彙数は65,535 語です．
\begin{figure}[tb]
  \begin{center}
    \includegraphics[scale=.6]{gramnet.eps}\\
    \small （各シンボルは単語のカテゴリを表す）
    \caption{DFAネットワーク}
    \label{fig:gramnet}
  \end{center}
\end{figure}

\paragraph{認識アルゴリズム}
Julian の認識アルゴリズムは，2パス構成のA*探索です．探索アルゴリズム，
および各パスでの文法の適用について図\ref{fig:algorithm}に示します．まず第1パ
スでは，処理効率を優先して，DFAネットワークをさらに縮退させて単語のカ
テゴリ間の接続関係のみを抽出した「カテゴリ対制約」を用い，高速な時間同
期ビーム探索を行います．この第１パスは入力と平行して処理されます．第2
パスではその結果をヒューリスティックとして参照しながら，本来の
DFA を用いて動的に展開しながら探索を行い，最終的な認識結果を出力します．
\begin{figure}[tb]
  \begin{center}
    \includegraphics[scale=.4]{julian_algorithm.eps}
    \caption{Julianの解探索アルゴリズムと文法の適用}
    \label{fig:algorithm}
  \end{center}
\end{figure}

\section{文法の記述方法}

julian では，タスク文法を，構文制約を単語のカテゴリを終端規則としてBNF
風に記述する grammar ファイルと，カテゴリごとの単語の表記と読み（音素
列）を登録する voca ファイル に分けて記述します．以下，文法の書式から
Julian の起動までを解説します．

\vspace*{-3mm}
\subsection{grammarファイル}

grammar ファイルは1行に1つの書き換え規則を記述します．左辺に書き換えら
れるシンボル， セミコロン``{\tt :}''で区切って右辺に書き換え後のシンボ
ル列を列挙します．開始記号は ``{\tt S}'' です．英数字とアンダースコア
が使用でき，大文字・小文字は区別されます． 

左辺に現れなかったシンボル群がこの文法における終端記号，すなわち単語の
カテゴリ群となります．各カテゴリに属する単語は voca ファイルで記述する
ことになります．

例として，１桁の数字を認識する孤立単語認識タスクのための簡単な grammar 
ファイルを以下に示します．{\tt NUM} の場所に任意の１数字が入ることを想
定しています．{\tt NS\_B} と {\tt NS\_E} はそれぞれ文頭および文末の無
音に対応する単語カテゴリです．この例の場合，voca で定義すべき単語のカ
テゴリは {\tt NS\_B}, {\tt NUM}, {\tt NS\_E} となります．
\begin{screen}
\begin{verbatim}
S :  NS_B NUM NS_E
\end{verbatim}
\end{screen}
なおこの構文制約は形式上CFGのクラスまで記述可能ですが，Julian はオート
マトン，すなわち正規文法のクラスまでしか扱えません．この制限はコンパイ
ル時に自動チェックされます．また再帰性は左再帰性のみ扱えます．

\vspace*{-3mm}
\subsection{vocaファイル}

voca ファイルでは，grammar ファイルで使用する単語カテゴリごとに単語を
登録します．1行に1単語ずつ，表記と発音音素列を登録します．行頭が
``\%'' で始まる行はカテゴリの定義です．定義するカテゴリは 対応する
grammar ファイルと一対一の対応がとれている必要があり，grammar で使用す
るカテゴリが voca で定義されていなかったり，逆に voca で定義されたカテ
ゴリが grammar で現れない場合はエラーとなります．

上記の grammar の例に対する voca ファイルは以下のようになります．
\begin{screen}
{\baselineskip 3.5mm
\begin{verbatim}
% NS_B
<s>       silB
% NS_E
</s>      silE
% NUM
0         z e r o
1         i ch i
2         n i:
3         s a N
4         y o N
5         g o:
6         r o k u
7         n a n a
8         h a ch i
9         ky u:
\end{verbatim}}
\end{screen}

\subsection{Julian 形式への変換}

grammar ファイルと voca ファイルは，専用コンパイラ {\tt ../julian/mkdfa.pl}
を用いてJulian 用の DFA ネットワークファイル(.dfa)と辞書ファイル
(.dict)に変換します．以下はこれまでの例をそれぞれ {\tt sample.grammar}, {\tt
  sample.voca} としたときの実行例です．{\tt dfa}, {\tt dict}, {\tt
  term} の３ファイルが出力されます\footnote{{\tt term}ファイルはカテゴ
  リ番号とカテゴリ名の対応リストで，Julian では用いません．}．
\begin{screen}
{\baselineskip 3.5mm
\begin{verbatim}
% ../julian/mkdfa.pl sample
sample.grammar has 1 rules
sample.voca    has 3 categories and 12 words
---
Now parsing grammar file
Now modifying grammar to minimize states[-1]
Now parsing vocabulary file
Now making nondeterministic finite automaton[4/4]
Now making deterministic finite automaton[4/4] 
Now making triplet list[4/4]
---
-rw-r--r--    1 foo      users          42 Aug 26 01:22 sample.dfa
-rw-r--r--    1 foo      users         155 Aug 26 01:22 sample.dict
-rw-r--r--    1 foo      users          20 Aug 26 01:22 sample.term
\end{verbatim}}
\end{screen}

\subsection{Julian の起動と認識の実行}

以下の要領で Julian を起動できます． {\tt -h} で音響モデル，
{\tt -dfa} で dfa ファイル， {\tt -v} で dict ファイルを指定し
ます．
\begin{screen}
\begin{verbatim}
% julian -h hmmdefs -dfa sample.dfa -v sample.dict
\end{verbatim}
\end{screen}
{\tt -input mic} でマイク入力の直接認識を行えます．また{\tt -input
  rawfile} で音声ファイルの認識も行えます．

{\tt -n} オプションと {\tt -output} オプションで， N ベストの数を指
定できます．無指定の場合は１位の認識結果が得られます．
``{\tt -n N -output N}'' の形で指定します．また{\tt -progout}
で第１パスの認識経過を漸次的に出力することができます．

\end{document}


%%% Local Variables: 
%%% mode: latex
%%% TeX-master: t
%%% TeX-command-default: "pLaTeX"
%%% End: 
