辞書とテンプレートデータベース

English version

ここでは,Enju が word lattice 内の単語情報をもとに各単語に語彙項目を割り当てる過程について説明します. この節に出てくる述語の実装は "enju/schema.lil" を参照してください.

語彙項目は辞書とテンプレートデータベースを使って割り当てられ,up に伝えられます. 具体的には,まず word lattice 内の単語の文字列や品詞をもとにして辞書から単語に割り当てるべき語彙項目の ID が引かれます.次に ID によってテンプレートデータベースから語彙項目の sign が引かれ up に渡されることになります. この辞書とテンプレートデータベースはMAYZ ツールキットを使った文法開発手法によって作られたものです. MAYZ ツールキットを使って辞書とテンプレートを得る過程については,辞書の抽出の節を見て下さい.

辞書引き

単語に割り当てる語彙項目の sign を up に渡すため,まず単語の情報によって語彙項目辞書が引き,単語に割り当てるべき語彙項目の ID を調べます.

語彙項目辞書には,単語とその単語に対応する語彙項目 ID が,キーの文字列 (単語の品詞や基本形を表す文字列) から語彙項目の ID 文字列への関係として格納されています. Enju の場合,辞書は "Enju.lexicon.tbl" というテキストファイルに格納されています. 辞書を引くには,word lattice 内の単語情報から語彙項目辞書のキーをつくる方法を述語 word_to_lookup_keys/2 によって指定する必要があります. 単語情報は 'word' 型 (単語の 'extent' 型の word 素性の値) として渡されるので,語彙項目辞書のキーとなる文字列を返すように述語を定義してください.

Enju の場合,述語 word_to_lookup_keys/2 は与えられた 'word' 型から単語の品詞 (POS 素性) と基本形 (BASE 素性) を取り出し,"基本計/品詞" という文字列をキーとして返します. また単語が未知のものである場合に備えて、"@UNK@/品詞","@UNK@/NN" という文字列もキーの候補として加えて返します.

up は述語 word_to_lookup_keys/2 が返したキーを使って語彙項目辞書を順番に引いていき,辞書内にエントリがある最初のキーの語彙項目 ID を採用します.

ここで使われる語彙項目辞書は,文法開発によって作られた辞書を内容を変えずに加工したものです. 元の辞書 "Enju.lexicon" には,LiLFeS データベースの形式で 'word' 型 から 'lex_template' 型への対応が格納されています. 辞書引きの段階で使われる語彙項目辞書は,元の辞書の 'word' 型を表す文字列をキーにして,元の辞書の 'lex_template' 型を表す文字列を引くものになっています.

語彙項目テンプレートの取得

単語に割り当てる語彙項目の sign を up に渡すための次の段階では,先ほど得られた語彙項目 ID からテンプレートデータベースを引いて語彙項目の sign を生成します. その処理は述語 lexical_entry_sign/2 を使って指定しています.

Enju の場合,述語 lexical_entry_sign/2 はまずテンプレートデータベースを引くために MAYZ で提供されている述語 lookup_template/2 を使います. 次にデータベースから引いてきた素性構造に単語固有の情報などを足して sign を作り,up に渡しています.

述語 lexical_entry_sign/2 には入力として 'lex_entry' 型で表わされた語彙項目 ID が渡されます.この 'lex_entry' 型の LEX_TEMPLATE 素性は,先ほど求めた文字列の語彙項目 ID を述語 string_to_lex_template/2 で 'lex_template' 型の素性構造に変換したものになっています. テンプレートデータベースは,'lex_template' 型で表わされた語彙項目 ID と語彙項目 sign の対応表であり,LiLFeS データベースファイル "Enju.templates" に格納されています. つまり,Enju の述語 lexical_entry_sign/2 では入力の LEX_TEMPLATE 素性の値を lookup_template/2 に渡してデータベースを引いています.

上記のようにしてテンプレートデータベースから引いてきた素性構造は,sign から単語固有となる情報を除いたものになっています. よってEnju の述語 lexical_entry_sign/2 では,素性構造にPHON 素性の値や,確率モデルで使う情報を加えて sign を完成させ up に返しています. ここで使われる単語固有の情報は,入力として与えられる 'lex_entry' 型の LEX_WORD 素性に格納された単語の 'word' 型を利用して取り出しています.


Enju 開発者用マニュアル Enju ホームページ 辻井研究室
MIYAO Yusuke (yusuke@is.s.u-tokyo.ac.jp)