制約文法(CG )は、自然言語処理(NLP)のための方法論的パラダイムです。言語学者が作成した、文脈依存のルールが文法にまとめられ、実行中のテキスト内の単語やその他のトークンに文法タグ(「読み」)を割り当てます。典型的なタグは、語幹化(語彙素または基本形)、屈折、派生、統語機能、依存関係、項価、格役割、意味タイプなどを扱います。各ルールは、特定の文の文脈において、タグまたは文法タグのセットを追加、削除、選択、または置換します。文脈条件は、文中の任意の単語の任意のタグまたはタグセットに、局所的(距離が定義済み)または全体的(距離が未定義)にリンクできます。同じルール内の文脈条件は、互いにリンク、つまり条件付け、否定、または干渉する単語やタグによってブロックされる場合があります。典型的なCG(制御グループ)は、数千ものルールから構成され、それらのルールは段階的に適用され、より高度な分析レベルを網羅していきます。各レベル内では、ヒューリスティックルールよりも先に安全なルールが使用され、特定の種類の最後の読み取り値を削除するルールは存在しないため、高い堅牢性が確保されます。
CG の概念は、 1990 年にFred Karlssonによって提唱され(Karlsson 1990; Karlsson et al., eds, 1995)、それ以来、さまざまな言語向けに CG タグ付けツールと構文解析ツールが作成され、品詞(単語クラス) の精度 F スコアが 99% を超えることが日常的に達成されています。[ 1 ]いくつかの構文 CG システムでは、構文機能ラベルの F スコアが 95% 前後であることが報告されています。CG システムは、小さな非終端記号ベースの句構造文法または依存文法を追加することで、他の形式体系で完全な構文木を作成するために使用でき、多くのTreebankプロジェクトでは、自動注釈に CG が使用されています。CG 手法は、スペル チェッカーや機械翻訳システムなど、多くの言語技術アプリケーションでも使用されています。
制約文法パーサーは、入力として形態素解析されたトークンのストリームを想定しています。これは通常、有限状態トランスデューサーベースのアナライザー(一般的なものとしては、Xeroxツールのtwolc/lexc/xfst、HFST 、またはApertiumのlttoolboxなど)によって生成されます。各トークンは曖昧で、複数の読み方を持つ可能性があります。すべての読み方を含む表面形式はコホートと呼ばれます。以下は、VISL CG-3が想定する入力形式で「」を分析した例です。「」の分析例です。
「<,>」 "、" cm 「<and>」 「and」接続詞 「<X>」 「X」数値 pl 「X」名詞助詞 「<だった>」 「be」動詞過去形(一人称単数) 「be」動詞過去形(3人称単数) 「<いいね>」 「~のような」形容詞 「~のような」主語 「いいね」pr 「like」動詞の不定形 「like」動詞現在形 「~のような」動詞のインプット 「<“>」 「“」lquot
このスニペットは、それぞれ 1 つ以上の読みを持つ 5 つのコホートを示しています。表面的な語形は で、語幹/基本形は で、引用符なしのタグのセットが続きます。いくつかのコホートには複数の読みがあり、つまり、 は曖昧です ( は6 つの読みの間で曖昧です)。CG パーサーの役割は、1) コンテキストを考慮して安全にできる範囲で、できるだけ多くの誤った読みを削除すること、2) オプションで各コホート (または依存関係) に 1 つ以上の構文機能ラベルを適用すること、3) 適用されたラベル/関係の曖昧さを解消することです。"<anglequotes>""quotes""<like>"
以下は、左側に一人称代名詞がない場合に、「was」の三人称読みを選択する(一人称読みを削除して)ためのルールの例です(VISL CG-3形式)。
削除(動詞 p1)もし (0C (動詞)) (否定 *-1 (prn p1)) ;
(verb p1)削除する読みと一致する必要があるタグのセット (順序は関係ありません) を以下に示します。 の後に 0 個以上の制約IFのリストが続きます。最初の制約は、このコホート (位置 0) では、すべての読み (修飾語、Careful 用) にタグ が付いていることを示しています。 2 番目の制約は、少なくとも 1 語左 (位置、 は1 語より先に進むことができることを意味し、は左を意味します) のコホートがあり、そのコホートが一人称代名詞である場合、制約は一致しない ( ) ことを示しています。Cverb*-1*-NEGATE
CG-3では、ルールに名前を付けることもできます。たとえばSELECT:somename (…) IF、トレース出力に表示されます。
制約条件の下で他のすべての読み取り値が間違っていることが確実な場合、ルールは単一の読み取り値を選択することもできます。
SELECT:quoting ("like" subj) IF (-1 ("<was>")) (1 (lquot) OR (":")) ; このルールでは、タグセット内で語形と基本形の両方を参照できることがわかります(これらは他のタグと同様に扱われ、読みは常にその語形と一致します)。ここで、2 番目の制約はOR2 つのタグセットを結合するために使用されます。このセットが一般的に使用される場合は、名前を付けて、括弧なしで次のように名前を使用できます。
リストの引用符 = lquot ":" ; SELECT:quoting ("like" subj) IF (-1 ("<was>")) (1 引用前) 同等の定義としては、 が挙げられます。SET prequote = (lquot) OR (":") ;
上記のルールを実行すると、最終的に以下のようになります。
「<,>」 "、" cm 「<and>」 「and」接続詞 「<X>」 「X」数値 pl 「X」名詞助詞 「<だった>」 「be」動詞過去形(3人称単数) 「<いいね>」 「~のような」主語 「<“>」 「“」lquot
を使用すると--trace、削除された読み取り値には先頭に が付き;、読み取り値に適用されたルールの名前と行番号が表示されます。
構文関数ラベルを追加するためのルール構文は、「x、y、z の場合にこれを行う」という同様のスキームに従います。
リスト名詞 = 名詞 prn ; 追加 (@SUBJ) IF (負の値 *-1 名目値) (0C (プロペラ)) (1C 有限動詞)
これは「マッピングルール」と呼ばれ、コホートごとに複数のマッピングタグが存在する場合があります。その場合は、同じSELECT/REMOVEルールを使用して曖昧さを解消できます。
最初のCG実装は、1990年代初頭にフレッド・カールソンによって開発されたCGPでした。これは完全にLISPベースであり、構文はLISPのS式に基づいていました(カールソン 1990)。
Pasi Tapanainen の CG-2 実装mdis [ 2 ]は、文法形式の括弧の一部を削除し、速度のために文法を有限状態トランスデューサとして解釈する C++ で実装されました。
CG-2は後に、南デンマーク大学のVISLグループによって(FST法を用いずに)オープンソースのVISL CGとして再実装された。Tapanainenのクローズドソースmdisと同じ形式を維持しています。


VISLプロジェクトは後にVISL CG-3へと発展し、文法形式にさらなる変更と追加が加えられました。例:
LIST gen = m f; SELECT (det) + $$gen IF (1 noun) (1 $$gen);後続の名詞と同じ性別の限定詞を選択しますVISLが開発したCG-3用のシンプルなIDEもあります。構文ハイライト機能があり、文法を記述する際に、入力と出力、および考えられるエラーを確認できます。Emacsモードもあります。cg.el同様の機能とシンプルなコードナビゲーションを備えています。
Tapanainenの実装とは異なり、VISLの実装では有限状態トランスデューサは使用されません。ルールはセクション内で順序付けられているため、文法を作成する際の予測可能性は高まりますが、構文解析が遅くなり、無限ループが発生する可能性が生じます。
小規模な文法の場合、VISL CG-3、場合によってはmdisと同等の速度に達する、FSTベースの実験的なCG-2の再実装がオープンソースで行われている。[ 3 ]