1.1 定義歴史

フレーム表現は、知識を構造化された単位「フレーム」として表現する手法である。1975年、米国の人工知能研究者マービン・ミンスキーが論文「A Framework for Representing Knowledge」において提唱した。ミンスキーは、人間が日常的な状況や物体を認識する際に、典型的な状況の枠組み(フレーム)を活用しているという認知心理学観察に基づき、この表現形式を設計した。フレーム表現は、その後、知識ベースシステム、自然言語理解、コンピュータビジョンなどさまざまな分野に影響を与えた。

1.2 フレームの構成要素

1.2.1 スロット(属性)

各フレームは、複数の「スロット」と呼ばれる属性を持つ。スロットは、対象の特性や関係を記述するための名前付きの位置である。例えば、「机」のフレームには「材質」「高さ」「色」といったスロットが含まれる。スロットには、値の型(文字列、数値、他のフレームなど)や制約を指定できる。

1.2.2 フィラー(値)

スロットに実際に入れられる具体的な値を「フィラー」と呼ぶ。フィラーは単純なリテラル値(「木製」「120cm」)である場合もあれば、別のフレームへの参照(「引き出しフレーム」)である場合もある。フィラーが存在しないスロットには、後述するデフォルト値や後からの代入が利用される。

1.2.3 デフォルト値

フレーム表現の重要な特徴の一つが「デフォルト値」である。スロットに明示的な値が与えられていない場合、あらかじめ設定されたデフォルト値が自動的に適用される。例えば、「鳥」のフレームの「飛ぶ」スロットのデフォルト値は「真」とすることができる。これにより、常に完全な情報を記載しなくても典型的な知識を活用できる。

1.3 フレーム間の関係

1.3.1 継承(is-a関係)

フレーム間には「is-a」関係を用いた階層が構築できる。子フレームは親フレームのすべてのスロットとデフォルト値を継承する。例えば、「鳥」フレームの子として「カラス」フレームを定義すると、「カラス」は「鳥」のスロット(羽、くちばしなど)を引き継ぐ。継承により知識の重複を避け、効率的な表現が可能になる。

1.3.2 部分関係(part-of関係)

「part-of」関係は、フレーム間の構成上の階層を表現する。例えば、「車」フレームは「エンジン」「タイヤ」「ドア」などのフレームを部分として持つ。この関係は、スロットのフィラーとして他のフレームを指定することで実現される。部分関係は全体と部分の知識を構造化するのに有用である。

2.1 フレームの階層構造

2.1.1 親フレームと子フレーム

フレームは木構造またはネットワーク状の階層を形成する。上位のフレーム(親フレーム)は汎用的な知識を保持し、下位のフレーム(子フレーム)はより具体的な知識を追加または上書きする。例えば、「動物」→「哺乳類」→「犬」→「柴犬」という階層が考えられる。

2.1.2 継承の仕組み

継承は、子フレームが親フレームのスロットとそのデフォルト値を受け継ぐ仕組みである。子フレームで同じスロットに異なる値が設定された場合、その値が優先される(上書き)。継承は複数階層にわたってチェーン状に行われる。この仕組みにより、共通の知識を一箇所にまとめ、例外だけを各フレームで定義できる。

2.2 スロットの制約と手続き

2.2.1 値制約

スロットには、取り得る値の範囲や型を制約として指定できる。例えば、「年齢」スロットには「0から150までの整数」という制約を設定できる。これらの制約は、知識ベースの整合性を保ち、不適切な値の入力を防ぐために利用される。

2.2.2 デーモン(付加プロシージャ)

デーモンは、スロットの値が読み書きされる際に自動的に実行される手続きである。代表的なデーモンとして、「if-needed」(値が必要になったときに実行)、「if-added」(値が追加されたときに実行)、「if-removed」(値が削除されたときに実行)などがある。デーモンは、動的な値の計算や整合性チェック、推論トリガーとして機能する。

2.3 フレームの推論機能

2.3.1 マッチングと推論

フレームシステムは、与えられた状況を既存のフレームとマッチングすることで推論を行う。例えば、ある物体の特徴(四本脚、鳴く、しっぽを振る)を基に「犬」フレームをインスタンス化する。マッチングの過程では、スロットの値が既知の情報と一致するか、デフォルト値で補完できるかが評価される。

2.3.2 デフォルト推論

デフォルト推論は、明示的な情報がない場合にデフォルト値を使用して仮定的な結論を導く推論である。例えば、「鳥は飛ぶ」というデフォルト知識に基づき、ペンギンという例外を明示しない限り、ある鳥が飛ぶと推論する。この仕組みは常識的推論を可能にする一方、例外処理の複雑さも伴う。

3.1 プログラミングにおける実装例

3.1.1 LISP系フレーム言語(FRL)

フレーム表現言語(FRL: Frame Representation Language)は、LISPをベースに開発された代表的な実装である。FRLでは、フレームをシンボルとして定義し、スロットをリスト構造で表現する。継承やデーモンはLISPの関数として記述される。この言語は、1970年代から1980年代にかけて多くのエキスパートシステムで使用された。

3.1.2 オブジェクト指向との類似性

フレーム表現は、現代のオブジェクト指向プログラミングと多くの類似点を持つ。フレームはクラスに、スロットはインスタンス変数に、デーモンはメソッドに相当する。継承やカプセル化の概念も共通している。実際、C++やJavaなどのオブジェクト指向言語は、フレーム表現の思想をソフトウェア工学に応用したものとも解釈できる。

3.2 実世界での応用

3.2.1 自然言語理解

自然言語理解の分野では、フレーム表現は文の意味構造を捉えるために利用される。例えば、「太郎が本を読む」という文は、「行為」フレーム(行為者:太郎、対象:本、動作:読む)として表現される。フレームに基づく解析により、文中の省略された情報をデフォルト値で補完できる。

3.2.2 エキスパートシステム

エキスパートシステムでは、診断や設計の知識をフレームで表現する。例えば、医療診断システムでは「疾患」フレームに症状や検査結果をスロットとして定義し、患者データをフレームにマッピングすることで診断を行う。継承により、一般的な疾患の知識から特殊な症例までを効率的に扱える。

3.3 フレーム表現の利点と限界

3.3.1 利点(構造化、継承)

フレーム表現の主な利点は、知識を直感的な単位で構造化できることと、継承による知識の効率的な再利用である。人間の認知パターンに近い表現が可能であり、常識知識の扱いに適している。また、デフォルト値の導入により不完全な情報でも推論が可能である。

3.3.2 限界(例外処理、表現力)

一方、限界として、例外処理の複雑さが挙げられる。継承における例外の扱い(例えば、飛べない鳥の扱い)は多重継承の衝突など問題を引き起こす。また、フレーム表現は論理的推論に必要な厳密な意味論を持たないため、複雑な推論には不向きである。表現力の点では、一階述語論理ほど柔軟ではない。

4.1 セマンティックネットワークとの違い

セマンティックネットワークは、ノードとリンクで知識をグラフ構造で表現する。フレーム表現は、ノード(フレーム)内部に属性と値を持つ点で、より構造化されている。セマンティックネットワークではリンクが主に関係を表現するのに対し、フレームではスロットが属性と関係の両方を担う。また、フレームはデフォルト値やデーモンといった機構を持つ点でより表現力が高い。

4.2 論理表現との対比

一階述語論理は、厳密な形式意味論に基づき、普遍量化や存在量化を用いて知識を表現する。フレーム表現は、論理表現に比べて人間の常識的推論に近いが、論理的完全性や一貫性の保証は弱い。フレームのデフォルト推論は非単調論理(デフォルト論理)の一種として捉えることができるが、論理体系としての厳密さは劣る。

4.3 オブジェクト指向パラダイムとの関係

4.3.1 クラスとフレームの類似性

オブジェクト指向におけるクラスは、フレームの概念とほぼ対応する。クラスの属性はスロット、インスタンスはフィラーに相当する。継承の仕組みも共通しており、親クラス(スーパークラス)と子クラス(サブクラス)の関係はフレームの階層と同一である。

4.3.2 メソッドとデーモンの対応

オブジェクト指向のメソッドは、フレームのデーモンに機能的に対応する。メソッドはオブジェクトの振る舞いを定義する手続きであり、デーモンはスロット操作に付随する手続きである。しかし、デーモンがスロットアクセスのトリガーに特化しているのに対し、メソッドはより一般的な手続き呼び出しの機構である点が異なる。