クラスN-gramの使用方法

Rev.3.4 以降のJuliusでは,クラスN-gramがサポートされています. Juliusでは,クラスN-gramを以下の 2 つに分けて記述します.
  1. クラス間のN-gram接続確率…N-gramファイル
  2. クラス内の単語生起確率…単語辞書内に記述
以下にクラスN-gramの記述方法を説明します.

クラス間N-gram

クラス間のN-gram確率は,通常の単語N-gramと全く同様です.クラス名を単位としたN-gramとして学習し,それを与えます.ARPA 形式の前向き2-gramファイルおよび後ろ向き3-gramファイル,あるいはそれらを mkbingram でバイナリ化したバイナリN-gramファイルとして与えることができます.

クラス内単語生起確率

各クラスに属する単語については,そのクラス内での生起確率と読みなどの定義を単語辞書上で定義します.まず通常の単語N-gramの場合は,辞書中の単語エントリは以下のようになっています.
単語表記 [出力文字列] 音素列・・・
クラスN-gramを用いる場合は,これらの前に「属するクラス名」,「クラス内単語生起確率」を以下のように記述します.
クラス間N-gram上のクラス名 @クラス内単語生起確率の対数値 単語表記 [出力文字列] 音素列・・・
第1カラム目の「クラス名」は,クラス間のN-gramでのクラス名を表記します. 第2カラム目の「クラス内単語生起確率の対数値」は,その単語のクラス内での生起確率を,常用対数(log10)で指定します.

認識実行時には,このようにして作成したクラス付き単語辞書を,通常と同様に -v で指定します.形式はJulius側で自動判別されます.もちろん, 同時に使用するクラスN-gramと第1カラム目の名前の対応がとれている必要があります.

部分クラスN-gramについて

Juliusの内部では,単語N-gramとクラスN-gramを明示的に区別しておらず,単語N-gramはすべて「1クラス1単語からなるクラスN-gram」として処理しています.このため,単語エントリとクラスエントリを混在させることが可能です.たとえば単語N-gramにおいて一部の品詞カテゴリのみをクラス化する,といったような部分クラスN-gramを使用することができます.

このような部分クラスN-gramを使用する場合,単語N-gramのエントリは通常と同じように単語辞書で記述し,クラス化されたエントリについてのみ,上記のようにクラスの情報を記述します.以下は,地名が「<地名>」でクラス化されている部分クラスN-gramを想定した場合の辞書の記述例です.

今日+42	[今日]	ky o:
は+16	[は]	w a
<地名> @-2.33251 京都+52 [京都] ky o: t o
<地名> @-1.68893 奈良+52 [奈良] n a r a
<地名> @-2.63574 和歌山+52 [和歌山] w a k a y a m a
出張+6	[出張]	sh u q ch o:
です+67	[です]	d e s u

設定

クラスN-gramサポートはデフォルトで有効になっています.クラスN-gramサポートにより単語辞書のメモリ使用量が(語彙数)x 4byte 増えます.クラスN-gramサポートを無効にしたい場合はconfigure--disable-class-ngramを指定してください.
$Id: classngram.html,v 1.1.1.1 2007/01/10 08:01:57 kudravka_ Exp $