発展的な使い方

English version

ここでは,パワーユーザのために,Enju の使い方・上級編を紹介します.


構文解析結果にアクセスする

Enju の文法は,単一化文法のための高速なパーザ UP を使うように設計されています. UP は,MAYZ ツールキット で提供されているパーザです. 従って,UP のインタフェースを使って,構文解析結果にアクセスし,様々な情報を取り出すことができます. 例えば,HPSG の sign の素性構造や,解析にかかった時間やエッジ数などのプロファイルを得ることができます. さらに,これらを利用する LiLFeS プログラムを書くことで,自分用の出力を出させることができます.

実際,Enju が出力する述語-項関係や XML 出力は,LiLFeS プログラムで計算されています. ソースプログラムはパッケージの "enju/{outputdep.lil,outputxml.lil}" にありますので,そちらを参照して下さい. また,ネットワーク経由で構文解析を行うための HTTP/CGI サーバも,LiLFeS プログラムで書かれています. こちらは,"enju/cgi.lil" を見て下さい.

UP のインタフェースの詳細については,UP のマニュアル を参照してください.


文法を自分で作る

Enju のソースパッケージには,Penn Treebank から文法および確率モデルを作るためのプログラムが含まれています. これらをユーザが書き換えて文法を作り直すことで,文法を改良したり拡張したりすることができます. ただし,文法を一から作り直すにはかなりのマシンパワーと時間が必要です (3.0 GHz Xeon, 8 GByte メモリで約半日).

文法を作るためのプログラムを使いこなすには,MAYZ ツールキットが使える必要があります. 詳しくは,MAYZ ツールキットのマニュアルを参照して下さい. さらに,amis 4.0 以上がインストールされている必要があります.

また,リソースとして Penn Treebank II の .mrg ファイル(POS と木構造の両方が付けられたファイル)と,stemming のために WordNet のデータファイル(index.*, *.exc)が必要です. これらのファイルをそれぞれ penn/combined/wsj ディレクトリ,wordnet/dict ディレクトリの下に置いて下さい. デフォルトの Makefile では,Penn Treebank II のセクション2から21までの.mrg ファイルをまとめた wsj02-21.mrg というファイルを入力することを仮定しています. 別のファイルを使うときは,"Makefile.am" のはじめの部分で定義されている "CORPUS_NAME" 変数などを書き換えてください.

Enju 文法を再構築するためには,configure のオプションに --with-enju-grmmar を加える必要があります.

./configure --with-enju-grammar

このオプションをつけて configure をすると,Makefile に 文法を作るためのターゲットも含まれるようになります. 後は,make を実行すると各ソースファイルのタイムスタンプに応じて,文法および確率モデルを作り直してくれます.

また,GENIA ツリーバンクなど異分野のコーパスを使った再学習を行うときは,configure のオプションに --with-domain-adaptation を加えてください.

./configure --with-enju-grammar --with-domain-adaptation

デフォルトの Makefile では,異分野コーパスとして GENIA ツリーバンクを使うことを想定しています. その場合 genia ディレクトリ以下に {0001-1600}.xml ファイルを置いてください. 別のコーパスを使う場合は,"Makefile.am" のはじめの部分で定義されている "ADAPT_CORPUS_NAME" 変数などを書き換えてください.

Enju の文法開発について詳しくは Enju 開発者マニュアル を参照して下さい.


LiLFeS モジュール

Enju のパッケージには,いくつかの便利な LiLFeS モジュールが提供されています. これらは,enju の "-l" オプションで指定して,構文解析器に読みこみます. (構文解析器の使い方を参照)

述語-項関係を出力する

"enju/outputdep.lil" は,単語の述語-項関係 (predicate-argument relation) をテキスト形式で出力するための LiLFeS モジュールです. enju を引数なしで起動すると,このモジュールが読み込まれ,output_dependency_file が自動的に実行されます.

このモジュールでは以下の述語が利用できます. 出力のフォーマットについては,構文解析器の使い方を参照して下さい.

output_dependency(+$Sentence, +$Stream)
$Sentence入力文(string)
$Stream出力ストリーム(lilfes_stream)
入力文 $Sentence を解析し,predicate-argument relation を $Stream に出力します.解析が失敗した場合は,"Parsing failure"という文字列を出力します.
output_dependency(+$Sentence)
$Sentence入力文(string)
入力文 $Sentence を解析し,predicate-argument relation を標準出力に出力します.解析が失敗した場合は,"Parsing failure"という文字列を出力します.
output_dependency_file(+$Input, +$Output)
$Input入力ファイルの名前
$Output出力ファイルの名前
入力ファイルの各行を解析し,結果を出力ファイルに出力します.
output_dependency_file(+$Input)
$Input入力ファイルの名前
入力ファイルの各行を解析し,結果を標準出力に出力します.
output_dependency_file
標準入力の各行を解析し,結果を標準出力に出力します.

XML 形式で構文解析結果を出力する

"enju/outputxml.lil" は,構文解析結果を XML 形式で出力するための LiLFeS モジュールです. enju に -xml オプションを与えると output_xml_file が,-so オプションを与えると output_so_file が自動的に実行されます.

このモジュールでは以下の述語が利用できます. 出力のフォーマットについては,構文解析器の使い方を参照して下さい.

output_xml_file(+$Input, +$Output)
$Input入力ファイルの名前
$Output出力ファイルの名前
入力ファイル $Input の各行を解析し,結果を $Output に XML 形式で出力します.
output_xml_file(+$Input)
$Input入力ファイルの名前
入力ファイル $Input の各行を解析し,結果を標準出力に XML 形式で出力します.
output_xml_file
標準入力の各行を解析し,結果を標準出力に XML 形式で出力します.
output_so_file(+$Input, +$Output)
$Input入力ファイルの名前
$Output出力ファイルの名前
入力ファイル $Input の各行を解析し,結果を $Output に stand-off 形式で出力します.
output_so_file(+$Input)
$Input入力ファイルの名前
入力ファイル $Input の各行を解析し,結果を標準出力に stand-off 形式で出力します.
output_so_file
標準入力の各行を解析し,結果を標準出力に stand-off 形式で出力します.

構文解析結果を GUI でブラウズする

"enju/moriv.lil" は,XHTML/XSLT をサポートしたウェブブラウザ (FireFox など) や MoriV を使って,構文解析結果の詳細をブラウズするための LiLFeS モジュールです. 構文木や素性構造をグラフィカルに見ることができます.

Enju を起動する時に -moriv オプションを与えると CGI サーバが起動します.

% enju -moriv port_number

次に,Enju を起動したホストの指定したポートの,"/cgi-lilfes/moriv?" にブラウザからアクセスして下さい. 例えば,localhost で Enju を起動した場合は,以下の URL にアクセスします(27109番ポートを指定したと仮定しています).

http://localhost:27109/cgi-lilfes/moriv?

すると,構文解析をブラウズするためのページが表示されます. ページ上部のフォームに文を入力し,"Parse" ボタンを押すと,左下に構文解析結果の概要(単語数,エッジ数,解析時間など)とメニューが表示されます. あとは,メニューの各リンクをクリックすることによって,構文解析結果を様々な形で見ることができます.

"Sign/Tree/Tree (with prob.)" は,それぞれ,ルートノードの sign, 構文木,figure-of-merit (FOM) 付きの構文木を表示します. "Word lattice" は,入力文の word lattice を表示します. "Node list" は構文木中のノードのリストを表示し,さらにそのノードの sign を見ることができます. "Semantics" は述語項構造を表示します. Prolog の term 形式のほか,文中の単語にマウスカーソルを合わせるとその単語の項になる句をハイライトする表示もします.

このほか,ページ上部のリンクをクリックすることで,パーザや文法の様々なデータを表示させることができます.

Parser
上で説明したように,パーザの出力を見るページです.
Chart
構文解析で使われるチャートを表示します.チャートの各セルに格納されているエッジをブラウズできます. 文を入力すると,まずチャートがページ左下に表示されます. 各セルには,そのセルに入っているエッジの数が表示され,リンクになっています. そのリンクをクリックすると,セル中のエッジの一覧がページ右に表示されます. エッジ一覧では,エッジのシンボル(VP, NP など),FOM や,その句を作った子供たちの ID が表示されます. ここでリンクをクリックすることで,エッジに対応する sign を表示することができます.
Grammar
単語に割り当てられている sign を表示することができます. 一つ目のフォームに単語と品詞をスラッシュでつなげて入力する (例えば,"likes/VBZ") と,その単語に割り当てられている語彙項目の一覧がページ左下に表示されます. 数字はその語彙項目の FOM です. ここでリンクをクリックすると,右側にその語彙項目の sign が表示されます. 2つ目のフォームには,直接 lexeme の名前を入力することができます. すると,直接右下に lexeme の sign が表示されます. また,"List of all templates" のリンクをクリックすると,すべての語彙項目テンプレートの一覧が表示されます. 語彙項目テンプレートの数が多い場合,少し時間がかかる場合があります.
Console
LiLFeS のコンソールを別ページに表示します.
Reset
トップページに戻ります.
Manual
Enju のマニュアルを別ページに表示します.
Enju Home Page
Enju Home Page を別ページに表示します.
Exit
Enju を終了します.

以下の例は,Firefox や MoriV などのウェブブラウザで見ることができます.


Enju の使い方 Enju ホームページ 辻井研究室
MIYAO Yusuke (yusuke@is.s.u-tokyo.ac.jp)