Netzdeducer− System FAS Antwortkernsuche Axiome, Theorembeweiser operationale Semantik NLI Transformationskomponente prozedurale Semantik Abbildung 31: Einordnung der inferentiellen Dienste von MWR 5 Unterstützung für Fragebeantwortung und Inferenzen Das MWR-System enthält mehrere Methoden, die zur Unterstützung von Inferenzen in M ULTI N ET dienen und dabei aufeinander aufbauen (vgl. Abb. 31). Die zentrale Komponente ist der Netzdeducer, der ein System von objektorientierten Methoden zur Unterstützung der Ableitung von M ULTI N ET-Ausdrücken aus der Wissensbasis bereitstellt (Kap. 5.3). 5.1 Allgemeine Einordnung Begriff der Wissensbasis. Es sei zunächst an die Definition der Wissensbasis aus Kap. 1.2 erinnert. Danach besteht eine M ULTI N ET-Wissensbasis im weiteren Sinne aus dem mehrschichtigen semantischen Netz (dies sind in der logischen Sichtweise die Fakten) und weiteren axiomatischen Zusammenhängen, die in M ULTI N ET als R-Axiome und BAxiome bezeichnet werden. Diese haben typischerweise die Gestalt einer Implikation: L1 ∧ L2 ∧ . . . ∧ Ln → ∃v1 , v2 , . . . : C1 ∧ C2 ∧ . . . ∧ Cm (Li und Cj seien Literale, vk Variablen und 1 ≤ i ≤ n, 1 ≤ j ≤ m) Während im logischen Sinne das Faktenwissen zusammen mit den in Form von Implikationen ausgedrückten Zusammenhängen den axiomatischen Unterbau von Inferenzen darstellt, werden im Folgenden das semantische Netz und die R-/B-Axiome aber als separate Komponenten der Wissensbasis betrachtet (dies ist nur eine andere Sichtweise, die aber nichts an der logischen Interpretation von Fakten und R-/B-Axiomen ändert). Der Begriff der Wissensbasis wird nachfolgend im engeren Sinne dahingehend verwendet, daß er sich nur auf die Netzkomponente bezieht. Sofern hingegen die Wissensbasis aus der logischen Sichtweise gemeint ist, wird dies besonders betont (z.B. durch “Wissensbasis inkl. der Axiome”). In jedem Fall sind mit “Axiomen” stets nur die R- und B-Axiome von M ULTI N ET gemeint. Aufgabe des Netzdeducers. Die Aufgabe des Netzdeducers besteht darin, die Ableitung eines M ULTI N ET-Ausdrucks aus der Wissensbasis unter Zuhilfenahme des Axiomsystems zu unterstützen. Der abzuleitende M ULTI N ET-Ausdruck stellt im Allgemeinen 119 U NTERST ÜTZUNG F ÜR F RAGEBEANTWORTUNG UND I NFERENZEN ein semantisches Netz dar, in dem einige Knoten durch Variablen ersetzt worden sind, für die passende Belegungen gefunden werden müssen. Diese logischen Variablen sind nicht Teil des M ULTI N ET-Paradigmas, d.h. sie treten nur in M ULTI N ET-Ausdrücken auf, die im Kontext der Durchführung von Inferenzen mit Hilfe des Netzdeducers verwendet werden. Typischerweise werden logische Variablen an denjenigen Stellen von M ULTI N ETAusdrücken eingesetzt, an denen üblicherweise “innere Knoten”, also Repräsentanten von nicht lexikalisierten Konzepten stehen würden. Diese Ersetzungen werden entweder manuell vom Wissensingenieur vorgenommen, was zum Beispiel bei der Eingabe von Axiomen der Fall ist, oder sie werden automatisch unter Befolgung bestimmter Richtlinien und Konventionen in einem M ULTI N ET-Ausdruck vorgenommen. Die entsprechenden Umformungen des Fragemusters bei der Fragebeantwortung (Kap. 5.4) sind ein Beispiel für den letzteren Fall. Einen speziellen Fall der oben genannten M ULTI N ET-Ausdrücke stellen die linken und rechten Seiten von Regeln dar, die nach der in Kap. 5.2 entwickelten Regelsprache formuliert werden können. Die Regelsprache stellt eine Obermenge der Sprache der R- und B-Axiome dar, wobei in Regeln zusätzliche prozedurale Komponenten sowie Hilfsprädikate zugelassen werden, die nicht Teil des M ULTI N ET-Paradigmas sind. Da der Netzdeducer die M ULTI N ET-Ausdrücke der linken und rechten Regelseiten verarbeiten kann, stellt er unter anderem den deduktiven Kern für die Anwendung von M UL TI N ET-Axiomen sowie die Grundlage für die Auswertung von prozeduralen Regeln über M ULTI N ET dar. Anwendung in Frage-Antwort-Systemen. Die Aufgabe eines Frage-Antwort-Systems (FAS) besteht darin, eine natürlichsprachliche Anfrage über einer gegebenen Wissensbasis zu beantworten (zur ausführlichen Diskussion siehe Kap. 5.4). Die Frage liegt zunächst in natürlichsprachlicher Form vor (Beispiel: “Wer hat in Deutschland den ersten elektronischen Rechner entwickelt?”) und wird in Form eines M ULTI N ET-Ausdrucks, der auch als Fragemuster bezeichnet wird, von dem System verarbeitet. Derjenige Netzknoten, der im obigen Beispiel den “Wer”–Teil der Frage repräsentiert, stellt den Fragefokus (das Hauptinteresse des Fragenden) dar. Zur Beantwortung der Frage muß das Fragemuster, das die semantische Repräsentation der Frage enthält, über dem Hintergrundwissen, das in Form eines semantischen Netzes gegeben ist, bewiesen werden. Die Substitution, die das Beweisverfahren bei geeigneter Wissensbasis für den Fragefokus liefert (“Konrad Zuse”), wird als Antwortkern bezeichnet. Sie liefert im vorliegenden Fall – einer Ergänzungsfrage40 – den Ausgangspunkt für die Beantwortung. Der Fall, daß das gesamte Fragemuster isomorph zu einem Teilnetz der Wissensbasis ist, kommt eher selten vor. Typischerweise kann während des Beweisprozesses nur ein kleiner Teil des Fragemusters direkt aus dem Hintergrundwissen abgeleitet werden, während der übrige Teil der Frage erst durch Hinzuziehen von Axiomen geeignet bewiesen werden muß. In Kapitel 5.4 werden zwei derartige Verfahren vorgestellt, die sich intensiv auf den Netzdeducer und die Methoden zur Anwendung von Axiomen abstützen. 40 Siehe auch Kap. 5.4 zu einer Aufstellung verschiedener Fragetypen und ihrer Behandlung bei der Antwortfindung. 120 5.1 Allgemeine Einordnung Frage−Antwort−System Wissensbasis: − semantisches Netz (Fakten) Natürlichsprachliches Interface Generierung formaler DB−Anfragen (z.B. in SQL) − Axiome Inferenzen Transformation Frage Frage (als zu beweisender Ausdruck) (als prozedurale Handlungsaufforderung) Abbildung 32: Unterschiede zwischen FAS und NLI aus Sicht der Fragebeantwortung Mit den bisher genannten Methoden wird ein Anwendungsbereich repräsentiert, der die Nutzung der operationalen Semantik (siehe auch Kap. 2.1.4) von M ULTI N ET in den Vordergrund stellt und in der linken Seite von Abb. 31 zusammengefaßt ist. Anwendung in natürlichsprachlichen Interfaces. Ein natürlichsprachliches Interface (NLI) erlaubt es dem Benutzer, natürlichsprachliche Anfragen an eine Datenbank zu stellen, wie z.B. die Anfrage “Gibt es Bücher von Nilsson über Expertensysteme?” an eine bibliographische Datenbank. Im NLI werden also ebenfalls natürlichsprachliche Anfragen des Benutzers beantwortet, aber die Grundlage der Antwort wird nicht über einer dem NLI eigenen Wissensbasis ermittelt (s. Abb. 32). Stattdessen wird die Nutzeranfrage im NLI regelbasiert in eine formale Datenbankanfrage transformiert, und deren Anfrageergebnis liefert schließlich den Ausgangspunkt der Fragebeantwortung. Im Gegensatz zum FAS steht im NLI also eine prozedurale Deutung der Anfrage im Vordergrund: Die im NLI vorkommenden Transformationsregeln dienen der Suche nach Teilnetz-Strukturen, auf die im Erfolgsfall mit bestimmten prozeduralen Aktionen (z.B. dem Generieren eines Teils einer SQL-Anfrage und schließlich dem Durchführen einer Datenbankanfrage) reagiert wird. Somit besteht auch bei der Verarbeitung von Transformationsregeln die Notwendigkeit, nach Teilnetzen zu suchen und axiomatische Zusammenhänge auszunutzen. Deshalb spielt das Netzdeducer-System auch im NLI eine wichtige Rolle. Im nächsten Kapitel wird eine Transformationskomponente vorgestellt, die sich wie in der rechten Seite in Abb. 31 gezeigt in den Gesamtkomplex der Inferenzen einordnet. Tatsächlich besteht die Transformationskomponente auch nicht als eigenständige Einheit, sondern sie wird mit Hilfe der objektorientierten Bausteine des Netzdeducers realisiert. Dabei dient eine Untermenge der Regelsprache zur Formulierung der Transformationsregeln. In den folgenden Abschnitten wird zunächst eine Form des deduktiven Schließens in M ULTI N ET formalisiert und dann mit dem Netzdeducer ein System von objektorientierten Methoden vorgestellt, die diese Schlußweise realisieren. Aufbauend auf diesen Methoden werden zwei Verfahren zur Fragebeantwortung vorgestellt. 121 U NTERST ÜTZUNG F ÜR F RAGEBEANTWORTUNG UND I NFERENZEN 5.2 Anforderungen und Syntax von Axiomen und Regeln Zunächst werden einige grundlegende Schreibweisen und Konventionen festgelegt. Der Begriff des Matchings und der Ableitung von Literalen wird eingeführt; dabei werden auch die Unterschiede zur Interpretation von Literalen in der klassischen Logik aufgezeigt. Auf diese Begriffe aufbauend werden in Abschnitt 5.2.2 die formale Regelsprache beschrieben und schließlich in Unterkapitel 5.3 das Verfahren des Netzdeducers erläutert. 5.2.1 Terminologie und Konventionen Def.: Variablen und Konstanten Konstanten sind in Anführungszeichen eingeschlossene Bezeichner von Lexemen, die der im Computerlexikon benutzten Konvention folgen, mit der Homographen und verschiedene Sememe zu einem und demselben Wort durch das Hintenanstellen zweier Indizes “wort.n.m” unterschieden werden (vgl. das einführende Kap. 2.1.4). Sofern die “.n.m”Extension zum Verständnis von Beispielen nicht notwendig ist, entfällt im Folgenden ihre Angabe zur Vereinfachung der Darstellung. Bsp: “Haus.1.2”, “politisch”, “Rede”, ... Alle anderen Bezeichner, die nicht in Anführungszeichen stehen, werden als logische Variablen aufgefaßt. Bsp: A, B, arg1, ... Def.: Literale Literale sind Relationen oder funktionale M ULTI N ET-Ausdrücke mit Konstanten und Variablen als Argumente. Es wird eine Prädikatsschreibweise sowohl für Relationen als auch für Funktionen verwendet, d.h. rel(arg1 , arg2 ) für Relationen bzw. *fkt(arg0, arg1 , . . . , argn ) für Funktionen. Diese Verallgemeinerung ergibt sich daraus, daß sich eine n-stellige Funktion als eine (n+1)-stellige Relation auffassen läßt. Als Konvention repräsentiert das erste Argument arg0 bei Funktionen den Ergebnisknoten der Funktion, so daß sich in Funktionsschreibweise arg0 = *fkt(arg1 , . . . , argn ) ergeben würde. Ein Literal l kann durch Voranstellen von “not” negiert werden: not(l). Bsp.: SUB(A, B), not(SUB(A, B)), SUB(A, “haus.1.1”), *IN(O2, “Hagen.1.1”), *PMOD(C4, “politisch”, “Rede”) Literale, in denen nur konstante Argumente vorkommen, werden als Grundliterale bezeichnet. 122 5.2 Anforderungen und Syntax von Axiomen und Regeln Def.: Axiome Axiome verfügen über eine linke und eine rechte Seite, die durch einen Junktor verbunden sind. Die linken und rechten Seiten werden jeweils durch eine konjunktiv verknüpfte Folge von Literalen gebildet, die nicht leer sein darf. Als Junktoren zwischen der linken und rechten Seite sind nur die Implikation “→” und die Äquivalenz “↔” zulässig, deren genaue Interpretation später definiert wird. In den Literalen der rechten Seite können ferner existenzquantifizierte Variablen vorkommen, die explizit zu Beginn der rechten Seite ausgewiesen werden. Damit ergibt sich (am Beispiel der Implikation) die folgende Form von Axiomen: L1 ∧ L2 ∧ . . . ∧ Ln → ∃v1 , v2 , . . . : C1 ∧ C2 ∧ . . . ∧ Cm (Li und Cj seien Literale, vk Variablen und 1 ≤ i ≤ n, 1 ≤ j ≤ m) Innerhalb der linken und rechten Seiten von Axiomen gilt die Konjunktionskonvention, d.h. Literale gelten darin als konjunktiv verknüpft, sofern keine anderen Junktoren explizit angegeben werden. Beispiel: PARS(A,B) PARS(B,C) → PARS(A,C) steht abkürzend für: PARS(A,B) ∧ PARS(B,C) → PARS(A,C) Def.: G-Matching von Literalen Der Vergleich von Literalen wird auf den Mustervergleich (Matching) zurückgeführt. Der Matchingalgorithmus entspricht mit einer Ausnahme dem üblichen Verfahren der Instantiierung von Variablen und dem stellenweisen Vergleich der Literalkomponenten: Durch einen geschickten Aufbau der später entwickelten Ableitungsstrategien, die auf dem Matching basieren, wird sichergestellt, daß einer der zu matchenden Partner stets ein Grundliteral ist. Dadurch braucht in der nachfolgenden Definition der Fall des Matchings zweier Variablen gegeneinander nicht berücksichtigt werden. Diese Vereinfachung wirkt sich günstig auf die Komplexität der resultierenden Algorithmen aus. Um die Abgrenzung vom allgemeinen Fall des Matchings zu erzielen, wird das hier verwendete Matching als “G-Matching” (Ground-Matching) bezeichnet. Im folgenden ist immer diese Version des Matchings gemeint, wenn nichts anderes angegeben ist. Insgesamt ergibt sich folgendes Matchingverfahren für zwei Literale l1 und l2 , wobei das zweite Literal l2 o.B.d.A. ein Grundliteral darstellt und eventuelle Variablensubstitutionen bereits durchgeführt worden seien: Zwei Literale l1 ≡ rel(arg1 , arg2) und l2 ≡ rel0 (const1 , const2 ) matchen genau dann, wenn 1. rel ≡ rel’ gilt und für i=1,2: 2. entweder argi ≡ consti gilt, wobei argi ebenfalls eine Konstante ist, 3. oder argi eine Variable ist. In diesem Fall wird die Substitution {consti /argi} der Liste der Substitutionen hinzugefügt. Anderenfalls ist kein Matching möglich. 123 U NTERST ÜTZUNG F ÜR F RAGEBEANTWORTUNG UND I NFERENZEN Das Matching von funktionalen Termen beliebiger Stelligkeit geschieht analog, indem der Laufbereich des Index i entsprechend erweitert wird. Def.: Direkte Ableitung eines einzelnen Literals Die direkte Ableitung eines Literals wird auf G-Matching zurückgeführt. Gegeben sei ein semantisches Netz SN. Ein Literal l ist dann direkt aus SN ableitbar, wenn es mit einem relationalen oder funktionalen Tupel aus dem Netz SN matcht. Def.: Direkte Ableitung einer Folge von Literalen Unter einer Folge l1 , . . . , ln von Literalen wird eine Konjunktion mehrerer Literale (z.B. Fragemuster, linke Axiomseiten) verstanden. Die direkte Ableitbarkeit von Literalen wird iterativ auf eine Folge von Literalen ausgeweitet, indem die einzelnen Literale li der Folge nacheinander abgeleitet werden. Dabei sind bei der Ableitung eines Literals li die Substitutionen, die bereits beim G-Matching von l1 , . . . , li−1 entstanden sind, derart zu berücksichtigen, daß für gleiche Variablennamen auch die gleichen Substitutionen durchgeführt werden. Aus der konjunktiven Verknüpfung der Literale ergibt sich, daß die gesamte Folge nicht ableitbar ist, wenn die Ableitung eines beliebigen Literals li der Folge nicht möglich ist. Def.: Indirekte Ableitung eines Literals über Axiome Gegeben seien ein semantisches Netz SN sowie eine Menge von Axiomen AX. Ein Literal l ist indirekt mit Hilfe eines Axioms X ∈ AX ableitbar, wenn 1. die Folge der Literale in der Prämisse von X entweder direkt nach der obigen Definition ableitbar ist oder wenn sie rekursiv, also wiederum indirekt mit Hilfe weiterer Axiome abgeleitet werden kann, 2. und danach die Konklusion von X nach Durchführung der Variablensubstitutionen, die aus der Ableitung der Prämisse stammen, ein Grundliteral lG enthält, das mit l matcht. Die Hauptbausteine bei der Ausdeutung von Axiomen der Form A → B sind somit der modus ponens sowie das “commitment principle”, das folgendes besagt: Wenn die Prämisse A als gültig akzeptiert wird, dann ist auch die Konklusion B als gültig zu akzeptieren. Falls jedoch A nicht gültig ist, dann ist im Unterschied zur klassischen Logik über die Implikation nichts ausgesagt. Axiome werden in der Inferenzkomponente also wie Transformationsregeln verwendet, die aus gültigen Aussagen andere gültige Aussagen ableiten. Insbesondere ist es wichtig hervorzuheben, daß die Implikation im hier verwendeten Matching-Sinn nicht wahrheitsfunktional gedeutet wird. Für die Behandlung von Axiomen mit negierten Literalen wird eine “offene Welt” angenommen, d.h. ein negiertes Literal kann nur dann abgeleitet werden, wenn eine passende Relation oder Funktion explizit in negierter Form in der Wissensbasis enthalten oder aus ihr ableitbar ist. 124 5.2 Anforderungen und Syntax von Axiomen und Regeln Dach S PAR Dachziegel PAR S Haus ax1: PARS(A,B) PARS(B,C) > PARS(A,C) Abbildung 33: Beispiel zum Ableiten von Literalen Def.: Interpretation der Äquivalenz “↔” Die Bedeutung von Axiomen der Form A ↔ B ergibt sich ebenfalls aus dem “commitment principle”. Wenn die Prämisse A akzeptiert wird, dann ist auch die Konklusion B zu akzeptieren und umgekehrt. Im Kontext des Inferenz-Prozesses kann ein Axiom A ↔ B durch zwei einzelne Axiome A → B und B → A ersetzt werden, ohne die Semantik des Gesamtaxiomsystems zu verändern. Def.: Allgemeiner Ableitungsbegriff Im vielen Fällen kommt es nicht darauf an zu betonen, ob ein Literal direkt oder indirekt ableitbar ist. Daher ist im Folgenden, wenn nichts weiter angegeben ist, mit der Ableitbarkeit eines Literals gemeint, daß es zumindest eine Möglichkeit gibt, das Literal direkt oder indirekt nach den vorangegangenen Definitionen abzuleiten. So gilt z.B. für das Netz und das angegebene Axiom aus Abb. 33, daß die folgenden Literale ableitbar sind (die ersten beiden direkt, das dritte indirekt mit Hilfe des Axioms ax1): PARS(Dachziegel, Dach), PARS(Dach, Haus), PARS(Dachziegel, Haus). Die Begriffe “ableitbar” und “beweisbar” werden bezüglich der hier behandelten Literale, Axiome und der später noch eingeführten Regeln synonym behandelt. Es ist dann stets die vorliegende Definition der Ableitbarkeit gemeint. 5.2.2 Die formale Regelsprache Der folgende Abschnitt dient der Einführung der innerhalb von MWR verwendeten Regelsprache, die wie bereits erwähnt eine Obermenge der Sprachen der R- und B-Axiome sowie der Transformationsregeln des NLI darstellt. Dazu wird eine halb-formale Beschreibung der Regelsprache gegeben, die sich an ihrer Verwendung in den Beispielen und Methoden dieses Kapitels orientiert. Eine vollständige formale Darstellung der Regelsprache in Backus-Naur-Form (BNF) findet sich im Anhang 11.2.1. 125 U NTERST ÜTZUNG F ÜR F RAGEBEANTWORTUNG Anforderungen an die Regelsprache. malen Regelsprache umgesetzt: UND I NFERENZEN Die folgenden Überlegungen wurden in der for- • Gute Lesbarkeit und Verwaltbarkeit. Da M ULTI N ET-Axiome und die Transformationsregeln zur Zeit ausschließlich durch einen Wissensingenieur von Hand eingegeben und gepflegt werden, ist ein gut strukturiertes und lesbares Format erforderlich. Für die linken und rechten Regelseiten ist es außerdem wünschenswert, wenn sie weitgehend dem textuellen M ULTI N ET-Format (s. Kap. 4.2.3) entsprechen, das auch in der WCFA und im Computerlexikon eingesetzt wird. Regelnamen sind ein Teil der Beschreibungssprache, wodurch die Verwaltung des Regelsystems und die Verfolgung von Inferenzschritten (Debugging etc.) erleichtert wird. • Prozedurale Restriktionen. Linke und rechte Regelseiten werden unterteilt in eine Literalkomponente, die ausschließlich M ULTI N ET-Relationen und -Funktionen enthält, und eine prozedurale Komponente zur Formulierung komplexer Prädikate oder Restriktionen. Diese Struktur ermöglicht eine Aufteilung der Regelanwendung in eine Grobverifikation, an der nur die Literalkomponente teilnimmt, und in eine Feinverifikation, in der mittels der prozeduralen Anteile z.B. Sorten- und Layerstrukturen miteinander verglichen werden. Ein derartiges Vorgehen ist insbesondere bei der Fragebeantwortung vorteilhaft. Unter Verwendung von prozeduralen Komponenten ist es auch möglich, mit Hilfe von arithmetischen Prädikaten mathematische Zusammenhänge zu formulieren wie z.B. die Umrechnung von Euro/DM-Werten oder kg/g-Maßeinheiten, wodurch die Fragebeantwortung erheblich leistungsfähiger wird. • Wohlgeformtheit hinsichtlich der logischen Variablen. Um die Verwendung der Regeln in logischen Beweisverfahren zu ermöglichen, müssen Regeln korrekt quantifiziert sein. Freie Variablen auf der linken Regelseite gelten per Konvention als allquantifiziert; alle anderen freien Variablen müssen in einem speziellen Deklarationsteil explizit existenzquantifiziert werden. Die entsprechenden Angaben sind auch für den Netzdeducer wichtig, da sie Aufschluß über die Behandlung freier Variablen während des Ableitungsprozesses geben. • Effiziente Implementierbarkeit. Dazu zählt insbesondere die Beschränkung von Disjunktionen auf einen effizient handhabbaren Umfang. Per Konvention sind Literale innerhalb einer Regelseite konjunktiv verknüpft und keine Disjunktionen innerhalb einer Regelseite möglich. Innerhalb von Literalen sind jedoch sogenannte “innere Disjunktionen” zugelassen, die es erlauben, statt einer bestimmten M UL TI N ET-Relation oder eines bestimmten konstanten Arguments eine Liste von alternativen Relationen bzw. Argumenten anzugeben. Auf diese Weise wird ein guter Kompromiß zwischen Ausdrucksfähigkeit und Effizienz erreicht. • Unterstützung der Wiederverwendbarkeit des Netzdeducers. Die Regelsprache legt die Obermenge aller denkbaren Anwendungen des Netzdeducers fest; dadurch entfällt das Pflegen mehrerer anwendungsspezifischer Regelsprachen innerhalb des Inferenzsystems. Die Teilsprachen für Axiome bzw. Transformationsregeln verwenden jeweils ca. 90% des Sprachumfangs der Regelsprache, wobei auf die spezifischen Einschränkungen der betreffenden Untersprachen noch eingegangen wird. 126 5.2 Anforderungen und Syntax von Axiomen und Regeln Grundstruktur der Regelsprache. Die Grundstruktur einer Regel besteht aus dem Regelnamen sowie zwei Regelseiten, die einen Regeloperator in Infixnotation enthalten. Die gesamte Regel ist in runde Klammern eingefaßt: ( <Regelname> <Regelseite> <Regeloperator> <Regelseite> ) Um auf einzelne Komponenten der formalen Beschreibung im Text Bezug zu nehmen, wird der Name der Komponente im Text kursiv geschrieben. Bezeichnungen wie “Regelname”, “des Regelnamens” u.s.w. beziehen sich also auf die Komponente <Regelname>. Der Regelname besteht aus einer beliebigen Folge von Buchstaben, Ziffern und Sonderzeichen, die in der BNF aus dem Anhang 11.2.1 spezifiziert sind. Als Regeloperator sind die Implikation “→” und die Äquivalenz “↔” erlaubt. Regelseiten unterteilen sich in drei weitere Komponenten, wobei aufgrund der Kommutativität des Äquivalenzoperators die Teilsprachen für die linke und rechte Regelseite identisch sind: <Regelseite> ≡ <Quant-Liste> <Literal-Liste> <prozedurale Restriktion> Für die Syntax von Variablen und Konstanten gelten die Konventionen aus Abschnitt 5.2.1; die genau zulässigen Buchstaben und Sonderzeichen sind dem Anhang zu entnehmen. In der Quant-Liste werden diejenigen ungebundenen Variablen angegeben, die als existenzquantifiziert zu betrachten sind. Die Quant-Liste wird durch das Schlüsselwort “ex” eingeleitet, dem die betreffenden Variablen durch Leerzeichen getrennt folgen. Die gesamte Quant-Liste wird durch runde Klammern eingeschlossen: Bsp.: (ex A B Arg1) Falls in einer Regel keine existenzquantifizierten Variablen vorkommen, entfällt der gesamte Quant-Listen-Ausdruck. Die Literal-Liste besteht aus einer nichtleeren Abfolge von Literalen (s. Abschn. 5.2.1). Für die Textdarstellung wird für Literale die Prädikatnotation (Bsp.: SUB(A, “Auto”)) aus den übrigen Kapiteln beibehalten41. In der Literal-Liste kommen keine weiteren Klammerungen oder Trennzeichen vor: Bsp.: AGT(s, a) SUBS(s, “fahren”) INSTR(s, b) Prozedurale Restriktionen sind ebenso wie die Existenzquantifizierung optional, d.h. der Ausdruck kann als Ganzes weggelassen werden. Prozedurale Restriktionen werden durch das Schlüsselwort “proc” eingeleitet, gefolgt von einer Liste von Prozeduraufrufen, die dem folgenden Format genügen müssen (das “=”-Symbol gehört nicht zur metasprachlichen Beschreibung): <Prozeduraufruf> ≡ ( r1 , r2 , . . . , rn = Prozedurname arg1 , arg2 , . . . , argm ) 41 Abweichend von der Textdarstellung wird in der formalen Regelsprache der Name der Relation/Funktion in den Klammerausdruck mit hineingezogen und Argumente werden nicht durch Kommata getrennt. Das im Text geschriebene Literal würde also in einer “echten” Regel als (SUB A “Auto”) dargestellt werden. Die unterschiedlichen Schreibweisen sind auch bei der Betrachtung der BNF aus Anhang 11.2.1 zu berücksichtigen. 127 U NTERST ÜTZUNG F RAGEBEANTWORTUNG F ÜR UND I NFERENZEN Die argi stellen Konstanten dar oder sie sind Variablen, die nach der Ableitung der Literalkomponente der Prämisse instantiiert werden können. Mit den ri werden Variablen für die Rückgabewerte des Prozeduraufrufs spezifiziert. Bsp.: (∗ weist c den Wert 100∗x zu ∗) proc (c = times 100 x) Beispiele. Eine “minimale” Regel mit einem Literal auf jeder Seite: (ax1 AFF(v, o) → SUBS(v, “verändern”)) Mehrere Literale auf einer Seite und Literal-Negation: (ax21 SUB(a, c1) COMPL(c1, c2) → not(SUB(a, c2))) Existenzquantifizierung: (ax57 SUB(o1, o2) ATTR(o2, a1) → (ex a2) ATTR(o1, a2) SUB(a2, a1)) Äquivalenz und Umrechnung von Maßeinheiten mittels prozeduraler Restriktionen: (ax201 *QUANT(m, kg, “kilogramm”) proc (kg = div g 1000) ↔ *QUANT(m, g, “gramm”) proc (g = times kg 1000)) Innere Disjunktionen. Die bisherigen Erfahrungen beim Aufbau von Regelsystemen zeigen, daß häufig Regeln vorkommen, die bis auf ein bestimmtes Literal identisch sind. Um die Formulierung dieser Regeln zu vereinfachen, verfügt die Regelsprache über sog. “innere Disjunktionen42”, bei denen innerhalb eines Literals mehrere Alternativen für eine M ULTI N ET-Relation oder für ein konstantes Argument in Form einer in runde Klammern eingeschlossenen Liste angegeben werden: (rel1 . . . reln )(A B) rel((“k1 ” . . . “kn ”) B) steht für: steht für: rel1 (A B) ∨ . . . ∨ reln (A B) rel(“k1 ” B) ∨ . . . ∨ rel(“kn ” B) Beispiel: (ax79 SUBS(a, (“handeln” “unternehmen” “machen”)) → SUBS(a, “Handlung”)) steht für drei Einzel-Regeln: (ax79-1 SUBS(a, “handeln”) (ax79-2 SUBS(a, “unternehmen”) (ax79-3 SUBS(a, “machen”) → SUBS(a, “Handlung”)) → SUBS(a, “Handlung”)) → SUBS(a, “Handlung”)) Bei mehreren inneren Disjunktionen ergibt sich eine entsprechende Kombinatorik. 42 Falls innere Disjunktionen auf der rechten Seite einer Regel vorkommen, ist die Ableitbarkeit der betreffenden Literale im allgemeinen nicht garantiert. Solche Regeln sind dennoch sinnvoll, um z.B. Integritätsbedingungen in einer kompakten Form aufschreiben zu können. 128 5.2 Anforderungen und Syntax von Axiomen und Regeln Teilsprachen für Axiome und Transformationsregeln. Die Regelsprache läßt in Literalen auch Hilfsprädikate zu, die keinen M ULTI N ET-Ausdrucksmitteln entsprechen, also beispielsweise Regeln der Form: (autor3 fokus(F) PRED(F, “buch.1.1”) autor-von(N, F) → sql-autor(N)) In den unterstrichenen Literalen sind Hilfsprädikate enthalten, die nicht Teil der im M UL TI N ET-Paradigma definierten Relationen und Funktionen sind. Während die Benutzung derartiger Hilfsprädikate aus formalen Gründen in der Teilsprache für Axiome nicht zulässig ist, werden sie in Transformationsregeln häufig eingesetzt; zur Motivation siehe die Kapitel 5.3.5 und 6. In der Teilsprache für Transformationsregeln ist hingegen der Regeloperator “↔” nicht zulässig. Die rechte Seite von Transformationsregeln darf außerdem keine inneren Disjunktionen und keine Existenzquantifizierungen von Variablen enthalten. Anhang 11.2.1 spezifiziert die Einschränkungen in der BNF, um die genaue Syntax für Axiome und Transformationsregeln zu erhalten. Erweiterungen für k-types. Literale können durch die Angabe von zwei zusätzlichen konstanten Argumenten eingeschränkt werden, mit denen die k-types der zugehörigen Relation oder des funktionalen Ausdrucks beschrieben werden. Dabei gilt in M ULTI N ET die Konvention, daß sich das erste Argument auf den “Startknoten”43 der zugehörigen Relation bezieht und das zweite Argument auf den (oder im Fall mehrstelliger Funktionen auf die) “Zielknoten”. Bei mehrstelligen Funktionen werden daher aus Sicht der Funktionsargumente-Knoten keine individuellen k-types angegeben. Der zu Beginn dieses Unterkapitels eingeführte Matching-Begriff wird beim Auftreten von k-type-Argumenten entsprechend dahingehend erweitert, daß zwei Literale nur dann matchen, wenn ihre k-types gleich sind. Da nur konstante k-type-Argumente zugelassen sind, erzeugt die Hinzunahme von k-types keine weiteren Substitutionen. Bsp.: SUB(A,B,situa,categ) matcht mit SUB(c1, c2, situa, categ), aber nicht mit SUB(c1, c2, situa, situa). Um Kollisionen mit dem Namensraum von Knotenvariablen zu vermeiden, sind keine Knotenvariablen mit dem Namen von k-type-Attributen erlaubt. Erweiterungen für Sorten und Layers. Für Sorten und Layers existieren spezielle Hilfsprozeduren SORT, GENER, REFER, VARIA, QUANT, CARD und ETYPE, die innerhalb der prozeduralen Erweiterung einer Regel verwendet werden können, um auf Sorten oder Layer-Merkmale von Knoten zuzugreifen. Die Hilfsprozeduren haben genau einen Rückgabewert w sowie genau ein Knotenargument k, so daß innerhalb des “proc”-Teils der Regeln Aufrufe nach folgendem Schema gebildet werden können (das Gleichheitszeichen ist nicht Teil der metasprachlichen Beschreibung): 43 “Startknoten” und “Zielknoten” beziehen sich auf die graphische Darstellung der Kanten durch Pfeile. Formal ist der Startknoten das erste Argument der repräsentierten Relation oder Funktion, und alle übrigen Knotenargumente stellen Zielknoten dar. 129 U NTERST ÜTZUNG F ÜR F RAGEBEANTWORTUNG UND I NFERENZEN proc (w1 = Hilfsprozedur k1 ) (w2 = Hilfsprozedur k2 ) . . . oder als konkrete Beispiele: proc (S1 = SORT c1) (“con” = VARIA c2) (“1” = CARD c2) Die Parameter k1 , k2 , . . . sind Knotenvariablen, wie sie auch in normalen Literalen vorkommen. Die Werte w1 , w2 , . . . müssen entweder Variablen sein oder Konstanten aus den zulässigen Wertebereichen für Sorten bzw. Layer-Merkmale darstellen; für Konstanten gelten die Konventionen aus der Beschreibung des abstrakten Datentyps aus Kap. 4.1.1, Abbildung 4. Im Beispiel ist S1 eine Variable und “con”, “1” sind Konstanten. Die Interpretation der “proc”-Ausdrücke ist die folgende: Wenn wi eine Variable ist, so wird diese durch die entsprechende Sorte oder das Layer-Merkmal von ki substituiert. Für konstante wi wird der “proc”-Ausdruck hingegen so interpretiert, daß die linke Seite des “=”-Zeichens (der wi - Wert) eine Vorgabe darstellt, der der Knoten ki auf der rechten Seite nach den unten stehenden Kriterien genügen muß. Genügt der Knoten dieser Vorgabe nicht, so ist die Regel, die den betreffenden proc-Ausdruck enthält, mit den aktuellen Substitutionen nicht anwendbar, und die Inferenzmaschine muß eine andere Substitution für ki suchen. Die Überprüfungskriterien für die Knoten hängen von den jeweils angegebenen Merkmalen ab: Bei der Vorgabe eines konstanten Layer-Merkmal-Wertes für wi muß der durch die Knotenvariable ki bezeichnete Knoten entweder ebenfalls das Layer-Merkmal wi aufweisen oder im Spezialfall des Layer-Merkmals CARD eine Kardinalität besitzen, die innerhalb des durch wi angegebenen Intervalls liegt. Im Falle eines konstant vorgegebenen Sortenargumentes muß der Knoten ki entweder die Sorte wi aufweisen oder eine ihrer Untersorten besitzen. 130 5.3 Arbeitsweise des Netzdeducers Fragezentrierung Netzdeducer − System Literaldeducer deduktiver Inferenzteil Fragebeantwortung über Netzdeducer (rel A B) Fragezentr.− Heuristik Teilnetzdeducer Heuristische Steuerung (rel1 A B)(rel2 C D) ... (rel n X Y) Regelanwender (rel1 A B)...(rel n X Y) −−> (rel1 A B)...(relm X Y) Axiom−Verwaltung Transformationskomp. Axiom−Liste Transformations− Regelanwendung Axiom−GUI Prozedurale Steuerung Abbildung 34: Architektur des Netzdeducers und seiner Anwendungen 5.3 Arbeitsweise des Netzdeducers Die in MWR integrierte Inferenzmaschine basiert auf dem sog. Netzdeducer-System, das mit Hilfe eines objektorientierten Aufbaus die im vorangegangenen Kapitel beschriebenen Ableitungen durchführt. Der Netzdeducer bildet den Kern eines deduktiven Systems, auf den die übrigen inferenzbasierten Methoden aufbauen. Abbildung 34 zeigt die Architektur des Netzdeducers und die Verwendung seiner Komponenten in den übrigen Anwendungen. Der Netzdeducer besteht aus drei objektorientiert realisierten Funktionsblöcken, die aufeinander aufbauen. Als Grundbaustein des Beweisverfahrens dient der Literaldeducer, der ein Objekt zur Ableitung von Literalen anbietet. Das Literaldeducer-Objekt berechnet alle Ableitungen eines als Beweisziel vorgegebenen Literals mittels einer exhaustiven Suche über der Wissensbasis unter Zuhilfenahme der Axiome. Zur Verkleinerung des Hypothesenraumes kann die Menge der bei der Ableitung einsetzbaren Axiome eingeschränkt werden sowie eine Liste von bereits bestehenden Variablensubstitutionen angegeben werden. Da die Suche nach allen Lösungen gegebenenfalls sehr lange dauert, verfahren alle Objekte des Netzdeducers nach der Konvention, pro Aufruf nur eine bisher noch nicht erzeugte Lösung zu ermitteln. Auf diese Weise kann die Suche nach dem Erreichen der ersten Lösung abgebrochen werden, wenn die konkrete Inferenzaufgabe keine alternativen Lösungen benötigt. Anderenfalls können alle möglichen Lösungen durch iteriertes Aufrufen des Objektes berechnet werden. Die nächsthöhere Stufe des Netzdeducer-Systems wird durch den Teilnetzdeducer gebildet. Seine Aufgabe besteht darin, ein Teilnetz abzuleiten, das aus einer Folge von Literalen besteht, die konjunktiv verknüpft sind. Falls in verschiedenen Literalen des Teilnet131 U NTERST ÜTZUNG F ÜR F RAGEBEANTWORTUNG UND I NFERENZEN zes gleiche Variablennamen vorkommen, so müssen diese mit den gleichen Konzeptknoten substituiert werden. Das Teilnetzdeducer-Objekt erzeugt intern für jedes Literal ein Literaldeducer-Objekt, und liefert bei jedem Aufruf die nächste mögliche Ableitung für die gegebene Literalfolge (oder das Symbol der leeren Menge, wenn alle Beweismöglichkeiten erschöpft sind). Mit dem Regelanwender wird die abschließende Stufe des Netzdeducer-Systems gebildet. Regelanwender-Objekte bearbeiten komplette Regeln, die der formalen Sprache aus Kap. 5.2.2 genügen müssen. Das Regelanwender-Objekt nutzt ein Teilnetzdeducer-Objekt zur Ableitung der linken Regelseite, enthält zusätzliche Methoden zur Anwendung der prozeduralen Restriktionen und liefert schließlich die komplett instantiierte rechte Regelseite, solange sich neue Belegungen beweisen lassen. Verwaltung des Regelsystems. Das für den Regelanwender zur Verfügung stehende Regelsystem wird über die Komponente “Axiom-Verwaltung” gepflegt, in der die Liste der zur Verfügung stehenden Axiome verwaltet und in der graphischen Benutzeroberfläche (s. Kap. 3.6.1) zugänglich gemacht wird. Auf ein explizites Einzeichnen einer Verbindung zwischen der Axiomverwaltung und den übrigen inferenzbasierten Komponenten (zur Transformation oder Fragebeantwortung) wurde verzichtet, da die Axiomverwaltung über das Netzdeducer-System automatisch allen Modulen zur Verfügung steht, die eines der Objekte des Netzdeducers einsetzen. Einbindung der Anwendungen. Die Anwendungen des Netzdeducers sind an verschiedenen Stellen in die Objekthierarchie eingebunden. Die Regelauswertung der Transformationskonponente wird direkt aus einer Instanz des Regelanwenders objektorientiert konstruiert, da es bei der Transformation hauptsächlich darum geht, Regeln anzuwenden und ihre rechten Seiten prozedural auszuwerten. In der Fragebeantwortung mit Hilfe des Netzdeducers wird versucht, das Fragemuster nach einer kurzen heuristischen Umformung aus dem Hintergrundwissen unter Hinzuziehung der Axiome abzuleiten. Da das Fragemuster formal die Struktur eines semantischen (Teil-)Netzes mit Variablen aufweist, wird diese Ableitung mit Hilfe eines Teilnetzdeducer-Objektes durchgeführt (s. Kap. 5.4.1). Die Fragezentrierung läßt sich nicht direkt auf eine Komponente des Netzdeducers abbilden, da sie einige Heuristiken enthält, die sich von den Strategien des Netzdeducers zur Ableitung von Teilnetzen und zur Anwendung von Axiomen unterscheiden. Insbesondere die Steuerung des Beweisweges innerhalb des Fragemusters unterscheidet sich von der Suchstrategie des Netzdeducers. Der Beweis von Literalen geschieht bei der Fragezentrierung jedoch analog, so daß Literaldeducer-Objekte im deduktiven Teil der Fragezentrierung eingesetzt werden können. Konventionen zur Beschreibung der Netzdeducer-Algorithmen. Bei der algorithmischen Beschreibung der Netzdeducer-Komponenten ist der objektorientierte Aufbau zu berücksichtigen. Jedes Objekt verfügt über eine “init”-Methode, die bei seiner Erzeugung einmal ausgeführt wird, um beispielsweise lokale Variablen zu initialisieren und 132 5.3 Arbeitsweise des Netzdeducers damit den internen Zustand des Objektes festzulegen. Die Hauptarbeit wird in der “infer”Methode geleistet, die pro Aufruf des Objektes einmal aktiv wird. Der interne Zustand des Objektes nach der Bearbeitung der “infer”-Methode bildet den Ausgangszustand für den nächsten Aufruf der “infer”-Methode. Ferner verfügt jedes Objekt über einen “input”Block, in dem die Eingabeparameter des Objektes vereinbart werden. Um von den technischen Details der Erzeugung von Objekten zu abstrahieren, wird im Folgenden für jedes Objekt vom Typ obj-name ein Konstruktor create-obj-name(inputParameter) angenommen, der ein neues Objekt vom angegebenen Typ erzeugt, es mit den “input-Parametern” initialisiert, die dem “input”-Teil des Objektes entsprechen, und die “init”-Methode ausführt. Für den Aufruf der übrigen Objekt-Methoden gilt die übliche “Punktnotation”; siehe dazu auch das nachfolgende Beispiel, in dem eine neue Instanz des unten definierten Literaldeducer-Objektes erzeugt und anschließend dessen “infer”Methode aufgerufen wird: new obj ← create-literal-deducer(literal, subst-list, rule-list) result ← new obj.infer(); Die algorithmischen Komponenten der Netzdeducer-Objekte werden mit Hilfe einer Pascal-artigen Pseudocode-Sprache beschrieben. Zuweisungen werden durch den linken Pfeil (“ a ← b”) ausgedrückt. Variablen werden automatisch erzeugt und typisiert. Für die übrigen Sprachelemente wie if ... then ... else ... fi und Vergleichsoperatoren wie “=”, “<=” etc. gelten die Standardinterpretationen. 5.3.1 Literaldeducer Literaldeducer-Objekt input: complex-literal subst-list rule-list (* zu beweisendes Literal mit inneren Disjunktionen (* Liste bereits bestehender Substitutionen (* zum Beweis hinzuziehbare Regeln (* Die Wissensbasis kann man sich virtuell als eine Liste von Knoten (* und Kanten vorstellen, zu denen es die folgenden Funktionen gibt: (* first(list) : liefert das erste Listenelement (* rest(list) : liefert list ohne das erste Element (* node-out-edges(node) : liefert die Liste der ausgehenden (* Kanten eines Knotens init: *) *) *) *) *) *) *) *) *) ← Liste aller Knoten der Wissensbasis; ← node-out-edges(first(nodes)); ← rest(nodes); ← erste Kombination aus innerer Disjunktion von complex-literal; vgl. die nachf. Bemerkungen zu Punkt 6 der Infer-Methode literal ← substitute(literal, subst-list); (* Subst. in literal einarbeiten *) remaining-rules ← rule-list; (* Laufzeiger in Regelliste *) cache-used ← false; rule-applier-object ← Ø; (* Objekt für aktuell in Auswertung *) (* befindliche Regel *) nodes edges nodes literal 133 U NTERST ÜTZUNG F ÜR F RAGEBEANTWORTUNG UND I NFERENZEN Literaldeducer-Objekt (Fortsetzung) infer: (* Versuche Matching mit dem Kopf der aktuellen Kantenliste *) (* Die match–Prozedur wird am Ende des Unterkapitels definiert. *) 1 if edges 6= Ø then test-literal ← first(edges); edges ← rest(edges); new-substitutions ← match(literal,test-literal,subst-list); if new-substitutions 6= Ø then return new-substitutions; (* Matching war erfolgreich *) else retry infer; (* kein Matching, von vorne anfangen *) fi; fi; (* Die aktuelle Kantenliste ist leer. Gehe zum nächsten Knoten über und (* initialisiere die Kantenliste neu. 2 if nodes 6= Ø then edges ← node-out-edges(first(nodes)); nodes ← rest(nodes); retry infer; fi; (* von vorne anfangen *) (* Alle Knoten und Kanten des Hintergrundwissens abgesucht. Versuche, (* ein Matching mit einem bereits abgeleiteten Literal aus dem Cache zu (* finden (s. Punkt 4 aus Kap. 5.3.3 zur Erzeugung der Cache-Einträge (* und Kap. 5.3.5 zum generellen Cache-Verfahren). 3 134 *) *) *) *) if cache-used = false then cache-used ← true; edges ← Liste der Literale aus dem Cache; retry infer; (* von vorne anfangen *) fi; (* Falls bereits eine Regel mit Hilfe eines Regelanwender-Objektes (* ausgewertet wird, teste zunächst, ob das Objekt eine weitere (* Instantiierung der Regel liefern kann. Wenn diese Instantiierung neue (* Literale liefert, übernimm die Literale als neue Kantenliste (* und versuche damit erneut ein Matching. 4 *) *) *) *) *) *) *) if rule-applier-object 6= Ø (* Objekt existiert *) then inferred-literals ← rule-applier-object.infer(); (* Objekt aufrufen *) if inferred-literals = Ø then rule-applier-object ← Ø; (* Objekt und Regel verbraucht*) else edges ← inferred-literals; (* neue Kantenliste *) fi; retry infer; (* von vorne anfangen *) fi; 5.3 Arbeitsweise des Netzdeducers Literaldeducer-Objekt (Ende) (* Wenn die aktuelle Regel verbraucht ist, versuche eine neue Regel zu (* finden und erzeuge dazu ein neues Regelanwender-Objekt. (* Das Prädikat rule-applicable(literal,rule) prüft, ob in rule eine (* Relation/Funktion enthalten ist, die auf literal paßt. Anderenfalls (* kann die Regel gleich verworfen werden. 5 if remaining-rules 6= Ø then test-rule ← first(remaining-rules); remaining-rules ← rest(remaining-rules); if rule-applicable(literal,test-rule) (* s. obige Erläuterung *) then rule-applier-object ← (* neues Objekt erzeugen *) create-rule-applier-object(test-rule, Ø, rules); fi; retry infer; (* von vorne anfangen mit neuer Regel *) fi; (* Alle Regeln verbraucht. Wenn aus der inneren Disjunktion noch nicht (* alle Kombinationen probiert worden sind, initialisiere das Objekt (* mit der nächsten Kombination neu. 6 *) *) *) *) *) *) *) *) if <noch nicht alle Kombinationen der inneren Disjunktion probiert> then nodes ← Liste aller Knoten der Wissensbasis; edges ← node-out-edges(first(nodes)); nodes ← rest(nodes); literal ← nächste Kombination aus innerer Disjunktion; literal ← substitute(literal, subst-list); remaining-rules ← rule-list; cache-used ← false; rule-applier-object ← Ø; retry infer; fi; (* Wenn auch alle Kombinationen der inneren Disjunktionen verbraucht (* sind, existieren keine weiteren Ableitungen mehr. *) *) return Ø; In der “infer”-Methode befindet sich die eigentliche Arbeitsschleife des LiteraldeducerObjektes. Die Grundidee des Verfahrens besteht darin, das gegebene Literal gegen eine Liste von M ULTI N ET-Relationen bzw. Funktionen zu matchen (Stufe 1 ). Diese Liste enthält eine Menge von Grundliteralen, die als potentielle Matching-Kandidaten zu überprüfen sind. Wenn in der Liste ein geeigneter Matchingkandidat gefunden wurde, war das Objekt erfolgreich und die resultierende Substitutionsliste wird zurückgegeben. Anderenfalls wird die Liste weiter durchlaufen bzw. aus verschiedenen Quellen (Stufen 2 bis 6 ) wieder aufgefüllt: 135 U NTERST ÜTZUNG F ÜR F RAGEBEANTWORTUNG UND I NFERENZEN 1 Hauptschleife des Literaldeducers (Versuch der direkten Ableitung des Literals). Das vorgegebene Literal wird gegen den Kopf der Liste edges nach dem in Kap. 5.2.1 beschriebenen und am Ende dieses Unterkapitels formalisierten Verfahren gemacht. Im Erfolgsfall wird die aus dem Matching resultierende Substitutionsliste zurückgegeben; anderenfalls geht die Suche im Rest der Liste weiter. 2 Abarbeiten der Wissensbasis. Wenn die edges–Liste leer ist, gehe zum nächsten Knoten der Wissensbasis über und fülle die Liste aus dessen ausgehenden Kanten wieder auf. Auf diese Weise werden alle Relationen/Funktionen der Wissensbasis dem Matching zugeführt. 3 Wenn alle Knoten der Wissensbasis abgearbeitet sind, fülle die edges–Liste aus dem Cache der bereits abgeleiteten Literale (s. Kap. 5.3.5). 4 Abarbeiten einer Regel (Versuch der indirekten Ableitung des Literals). Falls bereits eine Regel mit Hilfe eines Regelanwender-Objektes ausgewertet wird, und dieses Objekt eine weitere Instantiierung der Regel liefern kann, wird versucht, das gegebene Literal mit Hilfe der Konklusion abzuleiten. Zu diesem Zweck wird die edges-Liste mit der instantiierten Konklusion der Regel neu aufgefüllt. Insgesamt werden durch diesen Schritt alle Möglichkeiten überprüft, die aktuelle Regel zum Beweis des Literals zu verwenden. 5 Abarbeiten der Regelmenge. Liefert das Regelanwender-Objekt keine weiteren Instantiierungen, so initialisiere ein neues Regelanwender-Objekt aus dem Rest der Regelmenge. Regeln, die keine zu dem Literal passende Relation oder Funktion in der Konklusion besitzen, werden von vorneherein nicht berücksichtigt. 6 Behandlung von inneren Disjunktionen. Das Verfahren behandelt innere Disjunktion so, daß es eine “ausmultiplizierte” Liste aller möglichen Kombinationen erzeugt und jedes darin enthaltene Literal einzeln abzuleiten versucht. Wenn alle vorangegangenen Stufen für ein Literal dieser Liste ausgeschöpft worden sind, beginnt der Inferenzprozeß für das nächste Literal ab Stufe 2 erneut44 . Nach dem Durchführen einer der Stufen 2 bis 6 fährt das Verfahren mit Stufe 1 fort. Die entsprechende “retry infer”–Anweisung kann man sich als einen Sprungbefehl an die “infer”-Marke oder als eine zusätzliche, nicht explizit angegebene äußere while-Schleife vorstellen. Der innere Zustand des Objektes, also z.B. die Werte aller verwendeten Variablen, bleibt zwischen zwei Aufrufen der “infer”-Methode erhalten. Damit ist sichergestellt, daß der Inferenzprozeß genau nach der Stelle fortgesetzt wird, an der die letzte Ableitung erzielt wurde. Wenn das Objekt n-mal aufgerufen werden kann, bevor es ein Fehlschlagen der Ableitung signalisiert, bedeutet dies, daß genau n Ableitungen für das gegebene Literal existieren und daß jede Ableitung davon genau einmal zurückgeliefert worden ist. 44 Würde man die Behandlung der inneren Disjunktionen in die anderen Stufen mit einarbeiten, so ergäben sich dort viele zusätzliche Fallunterscheidungen und Umformungen, die sich in realen Programmen in Bezug auf die Laufzeit negativ auswirken. Da Literale mit inneren Disjunktionen relativ selten auftreten, und die “Programmlogik” zur Wiederholung der Stufen 1 bis 5 effizient realisierbar ist, ergeben sich unter realen Einsatzbedingungen für die hier gezeigte Struktur des Algorithmus substantielle Zeitvorteile. 136 5.3 Arbeitsweise des Netzdeducers Abschließend für dieses Unterkapitel sei die formale Definition der “match”–Funktion gegeben, die eine zentrale Rolle in Stufe 1 spielt: G-Matching zweier Literale (* Matchen von zwei Literalen nach dem Verfahren von Kap. 5.2.1 (* edge-rel(literal) : liefert den Relations/Funktionsnamen von literal. (* edge-args(literal) : liefert die Argumenteliste von literal. *) *) *) match(literal, test-literal, subst-list) lit-rel ← edge-rel(literal); lit-args ← edge-args(literal); test-rel ← edge-rel(test-literal); test-args ← edge-args(test-literal); (* Übereinstimmung der Relationen und der Länge der Argumentelisten *) (* sind triviale Bedingungen für ein Matching. *) if lit-rel 6= test-rel ∨ |lit-args| = 6 |test-args| then return Ø; (* kein Matching *) fi; (* Führe explizites Matching der einzelnen Argumente durch. *) return match-args(lit-args, test-args, subst-list); end match; (* Vergleichen zweier Argumentelisten. (* constant?(arg) : soll “true” liefern, (* wenn arg ein konstantes Argument ist. match-args(lit-args, test-args, subst-list) if lit-args = Ø then return subst-list; fi; *) *) *) (* rekursive Abbruchbedingung *) (* Matching erfolgreich *) l-arg ← first(lit-args); (* nächstes Argumentepaar extrahieren *) t-arg ← first(test-args); if constant?(l-arg) (* s. obige Bemerkung *) then if l-arg = t-arg then match-args(rest(lit-args), rest(test-args), subst-list); else return Ø; (* kein Matching *) fi; else subst-list ← subst-list ∪ { t-arg/l-arg }; (* l-arg ist Variable *) match-args(rest(lit-args), rest(test-args), subst-list); fi; 137 U NTERST ÜTZUNG F ÜR F RAGEBEANTWORTUNG UND I NFERENZEN Besondere Eigenschaften des Literaldeducer-Objektes. • Die Menge der zum Beweis eines Literals hinzuziehbaren Regeln kann explizit über den rule-list–Parameter gesteuert werden. Dadurch lassen sich spezielle Heuristiken zur Beschränkung der Rekursionstiefe (z.B. bei Transitivitäts-Axiomen) realisieren, indem jede Regel mit einem Aufrufzähler und einem Limit versehen wird, nach dessen Erreichen sie aus der Liste entfernt wird (entsprechende Abfragen sind aus Gründen der Vereinfachung nicht im vorseitig beschriebenen Algorithmus aufgeführt). Weiterhin läßt sich der Literaldeducer durch diese Eigenschaft je nach Beweisziel mit einer speziellen Teilmenge von Regeln einsetzen. Dies wird z.B. vom Transformationsverfahren des NLI ausgenutzt, das für jedes Datenbankattribut als Beweisziel eine vorsortierte Teilmenge von Regeln einsetzt. Auf diese Weise werden die Fälle verringert, in denen Regeln probiert werden, die den Ableitungsprozeß nicht vorantreiben. • Es können beliebig viele Instanzen des Literaldeducers erzeugt werden. Die Anzahl der gleichzeitig aktiven Instanzen des Literaldeducers ist nicht beschränkt, da sich die Literaldeducer-Objekte nicht gegenseitig beeinflussen. Im Teilnetzdeducer des nächsten Kapitels werden z.B. zum Beweis eines Teilnetzes mit n Literalen entsprechend n Literaldeducer-Objekte eingesetzt, um das Teilnetz mit Hilfe einer Tiefensuche abzuleiten. Im Verlauf der Knotenentwicklung der Fragezentrierung (Kap. 5.4.2) ist es sogar möglich, daß mehrere Literaldeducer-Objekte zu dem gleichen Literal (aber in verschiedenen Phasen des Ableitungsprozesses) existieren, wenn im Suchbaum Frageknoten mehrfach vorhanden sind. • Steuerbarkeit der Ableitungsstrategie. Das Literaldeducer-Objekt gibt bei jedem Aufruf genau eine weitere Ableitung des gegebenen Literals zurück. Dadurch kann in Abhängigkeit von der konkreten Anwendung entschieden werden, ob der Ableitungsprozeß nach der ersten Lösung unterbrochen wird oder eine vollständige Berechnung aller Ableitungen (durch wiederholten Aufruf des Objektes bis zum Fehlschlagen neuer Ableitungen) vorgenommen wird. Dies ermöglicht eine feinere Steuerung des Ableitungsprozesses als z.B. in Prolog-Systemen, die den Lösungsraum vollständig absuchen. Das Fragezentrierungsverfahren (s. Kap. 5.4.1), bei dem es nur auf eine Lösung ankommt bzw. nur eine Lösung existiert, läßt sich daher auf der Grundlage der Literaldeducer-Objekte effizienter realisieren als innerhalb einer Prolog-artigen Architektur. 5.3.2 Teilnetzdeducer Der objektorientierte Aufbau des Teilnetzdeducers entspricht dem Aufbau des Literaldeducers mit dem Unterschied, daß eine Liste (Folge) von Literalen als Beweisziel verarbeitet wird. Eine erfolgreiche Ableitung des Teilnetzes wird durch die Rückgabe der entsprechenden Substitutionsliste angezeigt. Auf der nächsten Seite wird zunächst eine Pseudocode-Version des Teilnetzdeducers angegeben, gefolgt von einer Beschreibung der generellen Vorgehensweise beim Ableiten von Teilnetzen. 138 5.3 Arbeitsweise des Netzdeducers Teilnetzdeducer-Objekt input: net-literals subst-list rule-list (* zu beweisendes Teilnetz (eine Liste von Literalen) *) (* Liste bereits bestehender Substitutionen *) (* zum Beweis hinzuziehbare Regeln *) (* Für Listen seien zusätzlich zu den in Kap. 5.3.1 verwendeten Opera(* toren ein Satz von Operatoren gegeben, um die Listen Stack-artig (* einzusetzen: *) *) *) (* top(list) (* pop(list) (* push(list,item) *) *) *) : liefert das erste Listenelement : verkürzt die Liste um das erste Element : fügt item als erstes Listenelement ein (* Zur Motivation der Initialisierungen in der “init”-Methode siehe die (* Ausführungen im nachfolgenden Text. *) *) init: litdeducer-stack ← push(Ø, create-literal-deducer(first(net-literals), subst-list, rule-list); proven-literals ← push(Ø, first(net-literals)); net-stack ← rest(net-literals); infer: while literal-stack 6= Ø 1 do litdeducer-obj ← top(litdeducer-stack); new-substitutions ← litdeducer-obj.infer(); (* Versuche eine weitere *) (* Ableitung für akt. Literal *) 2 if new-substitutions = Ø (* aktueller Literal-Deducer verbraucht *) then pop(litdeducer-stack); (* Backtracking *) push(net-stack, top(proven-literals)); pop(proven-literals); retry infer; (* while-Schleife neu beginnen *) fi; 3 if net-stack = Ø then return new-substitutions; (* Teilnetz-Ableitung erfolgreich *) 4 litdeducer-stack ← push(litdeducer-stack, create-literal-deducer(first(net-stack), new-substitutions, rule-list)); proven-literals ← push(proven-literals, first(net-stack)); pop(net-stack); od; (* Ende der while-Schleife *) 5 return Ø; (* keine weiteren Ableitungen mehr möglich *) Die Ableitung des Teilnetzes wird mit Hilfe von Stacks gesteuert. Auf dem net-stack werden die noch unbewiesenen Literale des Teilnetzes gespeichert, während auf litdeducer-stack und proven-literals die Literaldeducer-Objekte und die zugehörigen Literale abgelegt werden, für die bereits eine Ableitung gefunden worden ist. 139 U NTERST ÜTZUNG F ÜR F RAGEBEANTWORTUNG UND I NFERENZEN In der “init”-Methode wird für das erste Netzelement ein Literaldeducer-Objekt erzeugt und der litdeducer-stack sowie proven-literals entsprechend initialisiert. Diese Vorinitialisierung ist notwendig, da im späteren Verlauf des Algorithmus durch litdeducer-stack = Ø angezeigt wird, daß kein weiteres Backtracking und damit keine weiteren Ableitungen des Teilnetzes mehr möglich sind. Der net-stack wird dementsprechend mit der um das erste Element verkürzten Liste der Teilnetz-Literale initialisiert. Die eigentliche Ableitung des Teilnetzes findet in der “infer”-Methode statt, die jedesmal aktiv wird, wenn das Teilnetzdeducer-Objekt aufgerufen wird. In der “infer”-Methode wird zunächst geprüft, ob noch weitere Ableitungen des Teilnetzes möglich sind (litdeducer-stack 6= Ø). Anschließend werden die folgenden Schritte ausgeführt: 1 Zunächst wird das oberste Literaldeducer-Objekt vom litdeducer-stack geholt und aufgefordert, eine neue Ableitung “seines” Literals zu liefern. Da in dem Algorithmus die Invariante gilt, daß alle Vorgänger eines Objektes bereits “ihre” Literale abgeleitet haben, wird durch diesen Schritt die Ableitung des Teilnetzes um ein Literal vorangetrieben. 2 Wenn das Literaldeducer-Objekt keine Ableitung liefern konnte (new-substitutions = Ø), ist der Ableitungsprozeß an dieser Stelle in eine Sackgasse geraten. Es wird nun ein Backtracking-Schritt durchgeführt: Das Objekt wird vom litdeducer-stack entfernt und das zugehörige Literal gilt wieder als unbewiesen, d.h. es wird erneut auf den net-stack gelegt. Anschließend wird die while-Schleife wiederholt, wodurch das darunterliegende Literaldeducer-Objekt aufgefordert wird, eine alternative Ableitung des Vorgänger-Literals abzugeben. Auf diese Weise schreitet das Backtracking entweder fort (erneutes Zutreffen von Fall 2 auf das Vorgängerliteral im zu beweisenden Ausdruck) oder der Beweis des Teilnetzes wird in einem anderen Beweiszweig fortgeführt (Fall 4 ). 3 Falls net-stack = Ø gilt, so wurde in Schritt 1 das letzte fehlende Literal des Teilnetzes abgeleitet. Da die Literaldeducer-Objekte so aufgebaut sind, daß sie der Eingabesubstitutionsliste ihre eigenen Substitutionen hinzufügen, sind in newsubstitutions alle Substitutionen gesammelt, die zur Ableitung des Teilnetzes benötigt wurden, und new-substitutions wird daher als Ergebnis zurückgegeben. 4 Wenn in Schritt 1 ein Literal erfolgreich abgeleitet wurde, aber noch weitere Literale zu beweisen sind, wird in diesem Schritt ein neues Literaldeducer-Objekt für das nächste zu beweisende Literal erzeugt und die Stacks werden entsprechend angepaßt. Anschließend startet ein neuer Durchlauf der while-Schleife. 5 Die while-Schleife wird verlassen, wenn im Zuge des Backtrackings das letzte Objekt vom litdeducer-stack entfernt worden ist. In diesem Fall sind alle Literalkombinationen probiert worden und keine weiteren Ableitungen des Teilnetzes sind mehr möglich. 140 5.3 Arbeitsweise des Netzdeducers 5.3.3 Regelanwender Der Regelanwender weist die gleiche objektorientierte Struktur wie die übrigen Netzdeducer-Objekte auf. Der Regelanwender akzeptiert Regeln als Eingabe und liefert die vollständig instantiierte Konklusion der Regel als Ausgabe, wenn sich die linke Regelseite ableiten ließ. Durch mehrmaliges Aufrufen des Regelanwenders lassen sich alle Instantiierungen der Regel erhalten. Im Gegensatz zu den anderen Objekten ist der Regelanwender sequentiell (d.h. ohne innere Schleifen) aufgebaut, da er im Wesentlichen über den Teilnetzdeducer eine Ableitung der linken Regelseite anfordert und die erhaltenen Substitutionen weiterverarbeitet. Der nachfolgende Algorithmus behandelt nur den Fall einer Implikation, da der Fall A ↔ B auf zwei Regeln A → B und B → A zurückführbar ist (s. Kap. 5.2.1). Regelanwender-Objekt input: rule subst-list rule-list (* zu bearbeitende Regel *) (* Liste bereits bestehender Subst. *) (* zur Ableitung rekursiv hinzuziehbare Regeln *) (* Regeln seien gemäß der Regelsprache aus Kap. 5.2.2 geeignet codiert. (* Prämisse, Konklusion sowie die prozeduralen Restriktionen der Kon(* klusion seien über entsprechende Zugriffsfunktionen premise, (* conclusion, und conclusion-procs erreichbar. init: *) *) *) *) net-deducer-obj ← create-net-deducer(premise(rule), subst-list, rule-list); infer: new-substitutions ← net-deducer-obj.infer(); 1 if new-substitutions = Ø then return Ø; fi; (* keine weitere Ableitung möglich *) 2 instantiated-conclusion ← substitute-literals(conclusion(rule), new-substitutions); instantiated-conclusion ← treat-ex-quantif(instantiated-conclusion, rule); 3 proc-list ← conclusion-procs(rule); if proc-list 6= Ø then proc-substitutions ← apply-procs(rule, new-substitutions); instantiated-conclusion ← substitute-literals(instantiated-conclusion, proc-substitutions) fi; cache-literals(instantiated-conclusion); return instantiated-conclusion; 4 5 Die einzige Funktion der “init”–Methode des Regelanwenders besteht darin, ein Teilnetzdeducer-Objekt zur Ableitung der linken Regelseite zu erzeugen. Das TeilnetzdeducerObjekt dient gleichzeitig als Zustandsspeicher zwischen den einzelnen Regelanwender141 U NTERST ÜTZUNG F ÜR F RAGEBEANTWORTUNG UND I NFERENZEN Aufrufen, da es intern den Fortschritt der Ableitung der linken Regelseite vermerkt. In der “infer”-Methode fordert der Regelanwender zunächst eine bzw. die nächste Ableitung der linken Regelseite von dem Teilnetzdeducer-Objekt an. Ist die Ableitung leer, so scheitert die Regelauswertung an dieser Stelle (Schritt 1 ). Anderenfalls wurde durch die Ableitung der linken Regelseite eine Substitutionsliste geliefert, mit deren Hilfe nun die Variablen der rechten Regelseite instantiiert werden können (Schritt 2 ). Die entsprechende Prozedur substitute-literals, die Variablennamen gegen Konstanten gemäß der Substitutionsliste austauscht, ist trivial und wird an dieser Stelle nicht weiter ausgeführt. Bei existenzquantifizierten Regeln ist es möglich, daß die Konklusion nach Einarbeitung der Substitutionen noch freie existenzquantifizierte Variablen enthält. Ein typisches Beispiel ist ein Axiom, das aus einer Handlung ableitet, daß es einen zugehörigen Agenten geben muß. Der konkrete Agent muß aber nicht in der Wissensbasis enthalten sein bzw. aus der Wissensbasis inferierbar sein. Wenn der Agent nicht nachgewiesen werden kann, wird für ihn stellvertretend eine beliebige, aber eindeutige und feste Konstante mit Hilfe der Prozedur treat-ex-quantif eingesetzt. Das Beispiel zur Fragebeantwortung über den Netzdeducer (Kap. 5.4.1) enthält einen konkreten Anwendungsfall. Auf diese Weise liefert der Regelanwender stets Konklusionen, die keine Variablen mehr enthalten, und genügt damit der Invariante aus der Beschreibung des Matching-Verfahrens in Kap. 5.2.1, nach der nur Grundliterale aus der Anwendung einer Regel hervorgehen dürfen. Für den Fall, daß die Regelkonklusion prozedurale Restriktionen enthält (Fall 3 , proclist 6= Ø), müssen diese noch in die Konklusion eingearbeitet werden. Das entsprechende Verfahren apply-procs ist sehr stark implementierungsabhängig und wird daher hier nur umgangssprachlich beschrieben: Die prozeduralen Restriktionen kann man sich analog zu einem Teilnetz als eine Liste von Prozedur-Literalen vorstellen, die sequentiell abgearbeitet wird. Bevor eine Prozedur aufgerufen wird, werden ihre Aufrufparameter mit der Substitutionsliste new-substitutions unifiziert. Auf diese Weise erhält die aufzurufende Prozedur aktuelle Parameter, die sich aus der Ableitung der linken Regelseite ergeben (und aus der Auswertung prozeduraler Restriktionen, die weiter links in der Liste stehen). Nach dem Aufruf der Prozedur werden die Wertebelegungen ihrer Rückgabeparameter der Substitutionsliste hinzugefügt, so daß eine neue Substitutionsliste proc-substitutions entsteht. Da sich die neuen Substitutionen möglicherweise auf die M ULTI N ET-Literale der Konklusion auswirken, muß die Konklusion nach der Auswertung der prozeduralen Restriktionen erneut einer Variablensubstitution anhand dieser Liste unterzogen werden. Schließlich nimmt der Regelanwender die jetzt vollständig instantiierten Literale der Konklusion in den Cache der bereits abgeleiteten Literale auf (Schritt 4 , siehe auch Kap. 5.3.5 zum Literal-Cache), und die instantiierte Konklusion wird als Ergebnis der durchgeführten Ableitung zurückgegeben. 142 5.3 Arbeitsweise des Netzdeducers c9 DIRCL Hagen (2) AG T BS SU (1) (3) beweglich Fahrrad Peter fahren c1 SUB (7) (5) SUB SUB c4 OP INSTR OP PR PR (9) (8) PROP T AG SU BS (6) Fahrzeug (4) Auto Beweisziel z = PROP(o, “beweglich”) Axiom ax55: SUB(o1,o2) ∧ PROP(o2,p) → PROP(o1,p) Hilfsregel bax23: AGT(s,a) ∧ SUBS(s,”fahren”) ∧ INSTR(s,b) → SUB(b,”Fahrzeug”) Abbildung 35: Eine einfache Inferenzaufgabe für den Netzdeducer 5.3.4 Komplexbeispiel: Anwendung als Theorembeweiser Das Zusammenwirken der Netzdeducer-Komponenten soll an einem komplexen Beispiel demonstriert werden. Als Grundlage für den Inferenzprozeß dient das semantische Netz aus Abb. 35. Das linke Teilnetz enthält die Sachverhalte c9 = “Peter fährt nach Hagen” und c1 = “Peter fährt mit dem Fahrrad”. Zwischen c1 und c9 besteht inhaltlich kein Zusammenhang; die gemeinsamen Knoten “Peter” und “fahren” ergeben sich aus der Objektzentriertheit von M ULTI N ET, nach der jeder Begriffsrepräsentant nur einmal im Netz vorkommen darf. Der Sachverhalt c1 wird im Verlauf des Ableitungsprozesses zu einer Lösung beitragen, während der Sachverhalt c9 so konstruiert wurde, daß das System in eine Sackgasse gerät und das Backtracking demonstriert werden kann. Das rechte Teilnetz beschreibt, daß Autos Fahrzeuge sind und daß Fahrzeuge beweglich (im Sinne einer möglichen örtlichen Veränderung) sind. Die gestrichelten “PROP”- und “SUB”-Kanten werden erst im Verlauf des Ableitungsprozesses durch ax55 bzw. bax23 erzeugt und dienen nur der Illustration des Ziels der Inferenzaufgabe. Als Beweisziel z dient die Frage “Welche Objekte sind beweglich?”, oder formal z = PROP(o,”beweglich”). Da die Konklusion von ax55 ein passendes Literal zu dem Beweisziel enthält, beginnt der Beweisprozeß damit, die Anwendung dieses Axioms zu versuchen. ax55 beschreibt die Vererbung einer Eigenschaft (PROP) über die Subordinationsbeziehung. Zur Ableitung der Prämisse von ax55 darf das Bedeutungspostulat bax23 hinzugezogen werden, in dem ausgesagt wird, daß das Instrument in einem Vorgang des Fahrens ein Fahrzeug darstellt. Um die Funktionsweise des Literaldeducers nachzuvollziehen, muß die Reihenfolge fest143 U NTERST ÜTZUNG F ÜR F RAGEBEANTWORTUNG UND I NFERENZEN R1: ax55: SUB(o1,o2) PROP(o2,p) --> PROP(o1,p) PROP("Auto","beweglich") T1: SUB(o1,o2) PROP(o2,p) L1: SUB(o1,o2) k4: SUB("Auto",Fahrzeug") L2: PROP("Fahrzeug",p) k5: PROP("Fahrzeug","beweglich") Abbildung 36: Entwicklung der ersten Lösung für ax55 gelegt werden, in der das semantische Netz nach passenden Literalen abgesucht wird. Der Literaldeducer sucht die Wissensbasis knotenweise ab und betrachtet für jeden Knoten die ausgehenden Kanten (vgl. Schritte 2 und 1 im Literaldeducer-Objekt). Die Reihenfolge der Knoten in der Wissensbasis sei “Hagen, c9, Auto, Fahrzeug, beweglich, Fahrrad, c4, fahren, Peter, c1”. Von dieser Knotenreihenfolge ausgehend ist die in Abbildung 35 in “( )” angegebene Kantennumerierung eine mögliche Variante, die in der Wissensbasis enthaltenen Relationen abzusuchen. Diese Reihenfolge wird für die nachfolgende Diskussion vorausgesetzt, die sich hauptsächlich an den Diagrammen aus Abb. 36 und 37 orientiert, um die Entwicklung des Beweisprozesses und der daran beteiligten Objekte zu beschreiben. Als Ergänzung ist eine formale Darstellung mit Verweisen auf die jeweils relevanten Teile des Algorithmus und auf die verwendeten Datenstrukturen im Anhang 11.3 enthalten. Eine direkte Ableitung des Beweisziels ergibt sich durch PROP(“Fahrzeug”, ”beweglich”) über die entsprechende Kante des semantischen Netzes aus Abb. 35 und soll hier nicht weiter ausgeführt werden. Zur indirekten Ableitung weiterer PROP(o,”beweglich”)Literale muß zunächst ein Axiom mit einer passenden Konklusion ermittelt werden. Im vorliegenden Beispiel kann hierzu nur ax55 gewählt werden, und der Ableitungsprozeß beginnt damit, daß ein Regelanwender R1 zur Anwendung von ax55 erzeugt wird (oberstes Objekt in Abb. 36). In der Abbildung sind für die verschiedenen Netzdeducer-Objekte die entsprechenden Axiome, Teilnetze oder Literale angegeben, die zur Erreichung der jeweiligen Teilziele bearbeitet werden müssen. R1 zieht seinerseits einen Teilnetzdeducer T1 heran, um eine Ableitung für die linke Seite von ax55 zu finden. In T1 wird zunächst ein Literaldeducer L1 erzeugt, um das erste Literal des Teilnetzes abzuleiten. Dies gelingt mit Kante 4 bzw. SUB(“Auto”,”Fahrzeug”), und es wird ein weiterer Literaldeducer L2 für das noch fehlende Literal erzeugt. L2 liefert ebenfalls eine Ableitung unter Verwendung von Kante 5. Damit hat T1 alle Literale des Teilnetzes bewiesen und die Liste der dazu benötigten Substitutionen {“Fahrzeug”/o2, “Auto”/o1, “beweglich”/p } wird an den Regelanwender R1 zurückgegeben. Dieser wendet die Substitutionen auf die Konklusion von ax55 an und erhält damit PROP(“Auto”, “beweglich”) als Lösung für das Ziel z. Um weitere Lösungen zu erhalten, wird der Regelanwender R1 erneut aufgerufen und dadurch der Ableitungsprozeß bei Literaldeducer L2 fortgesetzt. Abbildung 37 beschreibt 144 5.3 Arbeitsweise des Netzdeducers PROP("c4","beweglich") R1: ax55: SUB(o1,o2) PROP(o2,p) --> PROP(o1,p) T1: SUB(o1,o2) PROP(o2,p) L1: SUB(o1,o2) k4: SUB("Auto",Fahrzeug") L2: PROP("Fahrzeug",p) BT k5: PROP("Fahrzeug","beweglich") Fortsetzung der Ableitung nach erster Lösung k6: SUB("c4","Fahrrad") L3: PROP("Fahrrad",p) L1 hat alle Kanten probiert Anwendung von bax23 BT (kein Ergebnis) R2: bax23: AGT(s,a) SUBS(s,"fahren") INSTR(s,b) --> SUB(b,"Fahrzeug") T2: AGT(s,a) SUBS(s,"fahren") INSTR(s,b) L4: AGT(s,a) k1: AGT("c9","Peter") L5: SUBS("c9","fahren") k3: SUBS("c9","fahren") L6: INSTR("c9",b) BT BT (kein Ergebnis) (kein weiteres Ergebnis) k9: AGT("c1","Peter") L7: SUBS("c1","fahren") k8: SUBS("c1","fahren") L8: INSTR("c1",b) k7: INSTR("c1","c4") SUB("c4","Fahrzeug") -- Abgeleitet über R2 bzw. bax23 L9: PROP("Fahrzeug",p) k5: PROP("Fahrzeug","beweglich") Abbildung 37: Entwicklung der zweiten Lösung für ax55 145 U NTERST ÜTZUNG F ÜR F RAGEBEANTWORTUNG UND I NFERENZEN den weiteren Verlauf der Ableitung nach der gestrichelten horizontalen Linie. Da L2 nach Kante 5 keine weitere Ableitung mehr finden kann, findet ein Backtracking (BT) zu L1 statt. L1 schlägt als nächste Kante 6 vor, die sich aber als Sackgasse erweist, da sich über L3 kein dazu passendes “PROP”–Literal finden läßt. Nach einem erneuten Backtracking-Schritt hat L1 alle Kanten aus der Wissensbasis für eine direkte Ableitung probiert. Da die Konklusion von bax23 jedoch auf das zu beweisende Literal paßt, versucht L1 noch eine indirekte Ableitung von SUB(o1,o2) über diese Regel. Dazu erzeugt es Regelanwender R2, der seinerseits den Teilnetzdeducer T2 zum Beweis der linken Seite von bax23 hinzuzieht. Die Anwendung von bax23 verläuft analog zur Anwendung der übergeordneten Regel. Zunächst versucht das System, die linke Seite von bax23 mit dem durch “c9” gegebenen Sachverhalt mit Hilfe der Literaldeducer L4 bis L6 zu instantiieren. Dies scheitert jedoch an dem fehlenden “INSTR”-Literal in L6 und verursacht ein Backtracking zurück zu L4. L4 versucht anschließend das “richtige” Literal “c1”, wodurch die Prämisse von bax23 mit Hilfe der Literaldeducer L7 und L8 instantiiert werden kann. Die resultierenden Substitutionen {“c1”/s, “Peter”/a, “c4”/b} werden von R2 auf die Konklusion SUBS(b,”Fahrzeug”) von bax23 angewendet, woraus sich SUB(“c4”, “Fahrzeug”) ergibt, das von R2 an den Aufrufer L1 weitergegeben wird. Damit hat der Literaldeducer L1 eine weitere Beweismöglichkeit gefunden und der Ableitungsprozeß kann in T1 weiter vorangetrieben werden. Mit L9 wird die Instantiierung der linken Seite von Axiom 55 komplettiert und durch Substitution der Konklusion von ax55 als weitere Lösung PROP(“c4”, “beweglich”) abgeleitet, d.h. es wurde inferiert, daß das von Peter benutzte Fahrrad beweglich ist. Ein dritter Aufruf von R1 ergibt keine weitere Lösung (ohne Darstellung im Diagramm). L9 kann keine weitere Ableitung liefern; dadurch erfolgt Backtracking zu L1. Der Versuch von L1, eine weitere Ableitung über R2 zu erhalten scheitert, da L8, L7 und L4 ebenfalls keine Ableitungen mehr liefern können. Da L1 über keine weiteren anwendbaren Regeln mehr verfügt, wird der Ableitungsprozeß in T1 und damit auch in R1 ergebnislos beendet. 5.3.5 Optionale Erweiterungen: Literal-Cache und Hilfsprädikate Das Netzdeducer-System verfügt über zwei spezielle Erweiterungen, die zur Optimierung des Regelsystems und der Regelanwendungen eingesetzt werden können. Die Erweiterungen umfassen das Zwischenspeichern von Literalen, die über Regeln abgeleitet wurden, und das Zulassen von Hilfsprädikaten, die ein kompakteres Formulieren von Regeln erlauben und in Verbindung mit dem Zwischenspeichern von Literalen Performanzvorteile ergeben. Der Einsatz beider Erweiterungen ist optional und kann je nach den Erfordernissen der konkreten Anwendung vorgenommen werden. Zwischenspeichern von Literalen. Während des Ableitungsprozesses kann es aufgrund von Backtracking und dem anschließenden Verfolgen von alternativen Beweiswegen dazu kommen, daß einige Literale einer Regel wiederholt mit den gleichen Belegungen abgeleitet werden müssen. Solange das betreffende Literal direkt aus der Wissensbasis abgeleitet werden kann, ist dies unproblematisch, da dieser Fall effizient realisierbar ist. Falls jedoch das Literal nur indirekt durch die Anwendung einer anderen Regel 146 5.3 Arbeitsweise des Netzdeducers Ball c1 SU B SU B Farbe ATTR c6 SU B SUB PRO P ball1 VA L PROP PROP blau ball2 Axiom ax55: SUB(o1,o2) ∧ PROP(o2,p) → PROP(o1,p) Hilfsregel ax11: ATTR(o1,o2) ∧ VAL(o2,w) → PROP(o1,w) proc (“P” = SORT w) Abbildung 38: Einsatz des Literal-Caches abgeleitet werden kann, verursacht die wiederholte Ableitung des Literals einen hohen unnötigen Laufzeitaufwand. In logischen Beweisverfahren wird als Lösung eine sog. Saturierung der Wissensbasis durchgeführt, d.h. einmal abgeleitete Literale werden als neue Fakten permanent der Wissensbasis hinzugefügt. Dadurch wird es vermieden, eine Regel mehr als einmal für das gleiche Beweisziel auszuwerten, da das Resultat ab dem zweiten Mal direkt in der Wissensbasis steht. Als Voraussetzung für die Saturierung in logischen Verfahren sind die Widerspruchsfreiheit der abgeleiteten Fakten (dies muß per Konstruktion gelten) sowie die Beschränkung auf monotone Schlußweisen erforderlich, da anderenfalls aufwendige Revisionen der Wissensbasis notwendig werden. Obwohl beide Voraussetzungen mit dem Netzdeducer in einer M ULTI N ET-Wissensbasis erfüllbar sind, erscheint es sinnvoller, Resultate der Inferenz nur für den Kontext der aktuellen Inferenzaufgabe zu behalten und danach wieder zu verwerfen. Da die Resultate jederzeit wieder aus dem Regelsystem erschließbar sind, wird so ein Aufblähen der Wissensbasis vermieden, und die Widerspruchsfreiheit bzw. Monotonie der benutzten Schlüsse muß strenggenommen nur lokal gelten. Das Hauptziel, redundante Beweiswege im Zuge des Backtrackings zu vermeiden, wird auf diese Weise trotzdem erreicht. Das Netzdeducer-System vermerkt die inferierten Literale daher in einem sog. LiteralCache, der einen separaten Teil der Wissensbasis darstellt. Der Literaldeducer greift auf den Literal-Cache zu, nachdem alle direkten Ableitungsmöglichkeiten mit der Wissensbasis erschöpft sind, aber noch bevor das Regelsystem zur indirekten Ableitung herangezogen wird (Stufe 3 im Algorithmus von Kap. 5.3.1). Das Auffüllen des Literal-Caches geschieht im Regelanwender, nachdem die rechte Seite einer Regel vollständig instantiiert worden ist (Stufe 4 in Kap. 5.3.3). Für den Zeitpunkt des Löschens der inferierten Lite147 U NTERST ÜTZUNG F ÜR F RAGEBEANTWORTUNG UND I NFERENZEN rale gibt es keine feststehende Heuristik. Es ist der Anwendung selbst überlassen, ob sie den Literal-Cache direkt nach der Auswertung einer Regel oder erst nach der Bearbeitung mehrerer Regeln löscht. Auf diese Weise kann der Wirkungsbereich der gespeicherten Literale beliebig gesteuert werden. Beispiel. Das Beispiel aus Abb. 38 verdeutlicht die Verwendung des Literal-Caches. In dem Beispielnetz sind zwei blaue Bälle ball1 und ball2 beschrieben. Mit Hilfe der Axiome 55 und 11 sollen in der Wissensbasis Objekte nachgewiesen werden, denen die Eigenschaft “blau”, also PROP(o,”blau”) zukommt. ax55 ist bereits aus Kapitel 5.3.4 bekannt, während ax11 aus einem Attribut/Wert-Paar eines Objektes eine Eigenschaft des gleichen Objektes folgert. ax11 ist aber nur gültig, wenn die Eigenschaft w die Sorte p (“property”) aufweist, also eine Eigenschaft im engeren Sinne darstellt. Die entsprechende Einschränkung des Axioms wird durch eine prozedurale Restriktion vorgenommen; dies ist aber für die weitere Diskussion nicht wichtig. Die in Abb. 38 gestrichelten “PROP”-Kanten sowie die gepunktete Kante, die den Einsatz des Literal-Caches darstellt, sind zu Anfang nicht in der Wissensbasis enthalten. Die Beweisführung startet mit dem Beweisziel “PROP(o,”blau”)” sowie mit der Anwendung von Axiom 55: [1] SUB(o1,o2) ∧ PROP(o2,“blau”) → PROP(o1,“blau”), Subst. {“blau”/p}. Zur Ableitung des ersten Literals wird o.B.d.A. zunächst die Substitution {“ball1”/o1} gewählt, so daß sich folgender Zwischenstand des Beweisverfahrens ergibt: [2] SUB(“ball1”,“c1”) ∧ PROP(“c1”,”blau”) → PROP(“ball1”,“blau”), Subst. {“blau”/p, “ball1”/o1, “c1”/o2}. Das zweite Literal der linken Regelseite kann nicht direkt aus der Wissensbasis abgeleitet werden; es läßt sich jedoch mit Hilfe von Axiom 11 ableiten. Nachstehend ist nur der Endzustand der Anwendung von Axiom 11 aufgeführt: [3] ATTR(“c1”,“c6”) ∧ VAL(“c6”,“blau”) → PROP(“c1”, “blau”), Subst. {“c1”/o1, “c6”/o2, “blau”/w} Entscheidend ist dabei die Ableitung von PROP(“c1”,“blau”), mit dessen Hilfe die Instantiierung der Prämisse von Axiom 55 komplettiert wird. Das Literal PROP(“c1”, “blau”) wird in den Literal-Cache eingetragen und steht damit anschließend in Form der gepunkteten Kante aus Abb. 38 direkt zur Verfügung45 . Unter der Annahme, daß alle blauen Objekte in der Wissensbasis nachgewiesen werden sollen, ist mit der Ableitung von PROP(“ball1”,“blau”) über Axiom 55 bzw. PROP(“c1”, “blau”) über Axiom 11 erst ein Teilziel erreicht. Nach der Durchführung von Backtracking wird in Axiom 55 mit der Substitution {“ball2”/c1} schließlich ein alternativer Beweisweg versucht: [4] SUB(“ball2”,“c1”) ∧ PROP(“c1”,”blau”) → PROP(“ball2”,“blau”), Subst. {“blau”/p, “ball2”/o1, “c1”/o2}. 45 Das Resultat von Axiom 55, PROP(“ball1”, “blau”) wird natürlich auch in den Literal-Cache eingetragen, da das Verfahren nicht voraussehen kann, welche Literale später noch einmal benötigt werden. 148 5.3 Arbeitsweise des Netzdeducers Damit befindet sich der Beweisprozeß in der gleichen Situation wie in Schritt [2], nämlich daß “PROP(“c1”,“blau”)” zur Instantiierung der Prämisse von Axiom 55 zu beweisen ist. Bei einer naiven Durchführung des Verfahrens würde jetzt erneut die Ableitung von “PROP(“c1”,“blau”)” indirekt über Axiom 11 durchgeführt und damit letztendlich der gesamte Aufwand von Schritt [3] dupliziert werden. Tatsächlich nutzt der Literaldeducer an dieser Stelle aber aus, daß sich das Literal “PROP(“c1”,“blau”) bereits im LiteralCache befindet, und führt die Ableitung direkt aus. Beurteilung des Verfahrens. Das Literal-Caching bringt immer dann Vorteile, wenn im Beweisprozeß intensives Backtracking betrieben wird. Falls links von dem im Cache zwischengespeicherten Literal mehrere andere Literale stehen, ist es leicht möglich, daß durch die Kombinatorik beim Backtracking eine signifikante Anzahl von Regelauswertungen eingespart wird. Dies gilt auch für den Fall, daß das Beweisverfahren nur an einer Lösung interessiert ist, d.h. daß kein Backtracking bis zum endgültigen Fehlschlagen einer Regelanwendung durchgeführt wird. Zwar wäre der Literal-Cache im obigen Beispiel nicht verwendet worden, wenn das Verfahren nach der ersten Lösung “PROP(“ball1”, “blau”)” gestoppt hätte. Bei komplexeren Regeln ist es aber möglich, daß das Beweisverfahren einige Male über das zwischengespeicherte Literal hinaus in eine Sackgasse läuft, bevor die erste Lösung erreicht wird. Allgemein ist also zu erwarten, daß das Zwischenspeichern von Literalen auch dann vorteilhaft ist, wenn es nicht auf ein erschöpfendes Absuchen aller inferierbaren Möglichkeiten ankommt. Hilfsprädikate. Die zweite Erweiterung des Netzdeducers besteht in der Zulassung von Hilfsprädikaten, also von Relationsnamen, die nicht Teil des M ULTI N ET-Paradigmas sind. Bei der Konstruktion großer Regelbasen kommt es vor, daß sich sogenannte “Regelfamilien” bilden, in denen sich ein großer Teil der Prämisse nicht unterscheidet. Insbesondere in dem Transformationsregelsystem, das nach bestimmten Mustern in dem Fragenetz sucht, ist dieser Effekt häufig zu beobachten. Dort bilden sich Regelfamilien nach dem Schema: REL1 (a,b) ∧ REL2 (b,c) ∧ REL3 (c,d) ∧ RELn (d,e) → REL(a,e) REL1 (a,b) ∧ REL2 (b,c) ∧ REL3 (c,d) ∧ RELm (a,e) → REL(d,e) REL1 (a,b) ∧ REL2 (b,c) ∧ REL3 (c,d) ∧ RELo (a,e) → REL(d,e) u.s.w. wobei RELn , RELm und RELo jeweils paarweise voneinander verschieden sind. Selbstverständlich können sich die Prämissen im allgemeinen Fall auch durch mehr als ein Literal unterscheiden. Im Verlauf des Beweisverfahrens führt diese Regelstruktur zu Ineffizienzen, da die Literale “REL1 (a,b) ∧ REL2 (b,c) ∧ REL3 (c,d)” für jede Regel erneut bewiesen werden müssen. Für den Wissensingenieur wird es außerdem schwieriger, die Gemeinsamkeiten zwischen den Regeln zu erkennen und die Wissensbasis zu pflegen. Eine Möglichkeit, dieses Problem zu beheben besteht darin, das Regelsystem automatisch zu analysieren und zu Regelklassen zusammenzufassen, vgl. dazu das Rete-Verfahren [For84]. Für den Netzdeducer ist eine entsprechende automatische Optimierung des Regelsystems nicht durchführbar, ohne die Regelsprache stark zu erweitern und damit den Ableitungsprozeß 149 U NTERST ÜTZUNG F ÜR F RAGEBEANTWORTUNG UND I NFERENZEN zu erschweren. Jedoch kann das Regelsystem unter Verwendung von Hilfsprädikaten so optimiert werden, daß die beschriebenen Probleme vermieden werden. Um dies zu erreichen, werden die gleichlautenden Komponenten einer Regelfamilie zu einer eigenen Regel zusammengefaßt, die als Ergebnis ein Literal mit einem Hilfsprädikat ableitet. Dieses Hilfsprädikat wird anstelle der ursprünglichen Literale in der Regelfamilie eingesetzt: REL1 (a,b) ∧ REL2 (b,c) ∧ REL3 (c,d) → HPRED(a,d) HPRED(a,d) ∧ RELn (d,e) → REL(a,e) HPRED(a,d) ∧ RELm (a,e) → REL(d,e) HPRED(a,d) ∧ RELo (a,e) → REL(d,e) Die Erzeugung von Hilfsprädikaten und deren Einsatz im Regelsystem wird momentan von Hand durch den Wissensingenieur vorgenommen. Eine automatische Erzeugung von Hilfsprädikaten ist denkbar, wenn das Regelsystem iteriert aufgebaut wird, indem für jede neu hinzukommende Regel zunächst Übereinstimmungen mit bereits in der Wissensbasis enthaltenen Regeln ermittelt werden. Für die Übereinstimmungen können automatisch Hilfsprädikate erzeugt werden und entsprechende Ersetzungen in den Regeln vorgenommen werden. Ein großer Nachteil automatischer Vorgehensweisen besteht aber darin, daß bei zufälligen Gemeinsamkeiten zwischen zwei Regeln Hilfsprädikate generiert werden, die semantisch keine Bedeutung haben bzw. Ableitungsregeln für Hilfsprädikate entstehen, zwischen deren Literalen kein semantischer Zusammenhang besteht. Derartige Regeln sind jedoch aufgrund der fehlenden kognitiven Adäquatheit (vgl. die Bemerkungen zur Implikation in Kap. 5.2) problematisch. Beurteilung des Verfahrens. Zusammen mit dem Literal-Cache aus dem vorherigen Abschnitt läßt sich die Verarbeitung von Regelfamilien deutlich effektivieren. Statt die einzelnen Literale “REL1 (a,b) ∧ REL2 (b,c) ∧ REL3 (c,d)” für jede Regel erneut zu beweisen, genügt die einmalige Ableitung des Literals “HPRED(a,d)”, das anschließend im Literal-Cache zur Verfügung steht. Durch die Verwendung von “sprechenden” Namen für Hilfsprädikate wird die Lesbarkeit des Regelsystems deutlich erhöht. Einschränkend muß aber gesagt werden, daß sich das Verfahren nicht uneingeschränkt für M ULTI N ET-Axiome einsetzen läßt, da die Hilfskonzepte keine gültigen M ULTI N ETRelationen darstellen. Es wäre allerdings formal kein Widerspruch, Hilfskonzepte und -regeln als “innere Regeln” zur Vereinfachung der linken Seiten von Axiomen einzusetzen, da die Hilfskonzepte formal durch die linke Seite der entsprechenden Hilfsregel substituiert werden können. Gedanklich kann diese Substitution soweit vorangetrieben werden, bis wieder alle Literale des Axioms durch “echte” M ULTI N ET-Relationen und -Funktionen rückersetzt worden sind. Auf diese Weise würden Hilfskonzepte zwar innerhalb des Literal-Caches erzeugt werden, aber nie außerhalb des Inferenzprozesses bzw. in der Wissensbasis sichtbar werden. Für das Transformationsregelsystem gelten diese Einschränkungen natürlich nicht; dort wird auf beiden Seiten der Regeln reger Gebrauch von Hilfskonzepten gemacht. 150 5.4 Fragebeantwortung 5.4 Fragebeantwortung Das in den vorhergehenden Abschnitten vorgestellte Netzdeducer-System sowie die nachfolgend diskutierten Methoden zur Fragebeantwortung liefern einen wichtigen Beitrag zur Entwicklung eines Frage-Antwort-Systems (FAS). Ein Frage-Antwort-System (FAS) ist der Lage, mit einem menschlichen Benutzer in einen natürlichsprachlichen Dialog zu treten, wobei Fragen des Benutzers mit Hilfe einer umfangreichen Wissensbasis vom System beantwortet werden, die ebenfalls automatisch aus natürlichsprachlichen Informationen aufgebaut wurde. Nach [Hel01] verfügt ein FAS über die folgenden Hauptkomponenten: 1. Eine natürlichsprachliche Analyse, mit deren Hilfe eine natürlichsprachliche Anfrage in eine semantische Repräsentation wie z.B. M ULTI N ET übersetzt wird. Diese Komponente stützt sich auf ein umfangreiches Computerlexikon. 2. Eine Assimilationskomponente, um neue M ULTI N ET-Strukturen der Wissensbasis redundanzfrei und ohne lokale Widersprüche hinzuzufügen. Auf diese Weise kann das FAS natürlichsprachlich “belehrt” und seine Wissensbasis ausgebaut werden. 3. Die Wissensbasis, in der die semantischen Repräsentationen von Informationen aus den Belehrungsphasen sowie weiteres Hintergrundwissen abgelegt sind. 4. Eine Antwortfindungskomponente, die mit Hilfe von Inferenzprozessen zu einer Anfrage die passenden Strukturen in der Wissensbasis findet. 5. Die Antwortgenerierung, um die gefundenen Antwortstrukturen wieder in natürlichsprachliche Sätze zurückzuübersetzen. Punkt 1 ist weitgehend durch die WCFA [HH97] und das Computerlexikon HaGenLex [Sch99] abgedeckt. Für die Assimilation (Punkt 2) liefern die vorliegende Arbeit und [Mar02] einige Grundlagen. Die in MWR vorhandene Assimilationshilfe (vgl. Kap. 3.4.2) stellt einen ersten Ansatz zur rechentechnischen Unterstützung des Assimilationsprozesses dar, während das Netzdeducer-System den deduktiven Kern für komplexe, vollautomatische Assimilationsprozesse liefern kann. In Richtung der automatischen Assimilation sind jedoch noch umfangreiche Nachfolgearbeiten zu leisten: Zum Beispiel ist eine Subsumptionsfunktion, die entscheidet, ob ein Konzept durch ein anderes Konzept subsumiert wird, in M ULTI N ET deutlich komplexer aufgebaut als in anderen Wissensrepräsentationssystem wie z.B. in KL-ONE mit seinem Classifier [vLOK91]. Während in KL-ONE die Beziehungen zwischen Konzepten nur durch eine eingeschränkte Anzahl von RelationsKanten (im Wesentlichen “Role”, “V/R” und “Restr”) ausgedrückt werden, gibt es in M ULTI N ET mehrere Relationen, die zur Berechnung potentieller Subsumptionen interpretiert werden müssen. Direkte Konzepthierarchien können durch die Relationen SUB, SUBM, PARS entstehen sowie durch die Relation LOC erzeugt werden in Verbindung mit funktionalen Termen, die lokale Präpositionen (*IN, *AUF, ...) darstellen. Eigenschaften, anhand derer Konzepte bezüglich einer möglichen Subsumption vergleichbar werden, können u.a. durch Relationen wie ATTR, CHPA, CHPS, CHSA, DUR, ELMT, FIN, 151 U NTERST ÜTZUNG F ÜR F RAGEBEANTWORTUNG UND I NFERENZEN INIT, PROP, QMOD, STRT, TEMP, VAL und VALR46 beschrieben werden; dies stellt einen wesentlich komplexeren Apparat von Darstellungsmitteln dar als die “V/R”- und “Restr”Mechanismen von KL-ONE. Schließlich existieren in M ULTI N ET Relationen, mit denen Konzepte untereinander in Beziehung gesetzt oder voneinander abgegrenzt werden; u.a. durch ASSOC, ATTCH, CNVRS, COMPL, CONTR, CORR, CTXT, DISTG und EQU. Es ist möglich, aber noch nicht genügend untersucht, daß auch diese Relationen Einfluß auf die Subsumption von Konzepten haben. Bei dem Vergleich von Konzepten untereinander ist in der Subsumptionsfunktion außerdem die Mehrdimensionalität von M ULTI N ET zu berücksichtigen. Insbesondere die Eigenschaft von Konzepten, zusätzlich Sorten und Layer-Attribute zu tragen, erfordert gegenüber einfacheren Wissensrepräsentationen mit “atomaren” Konzepten eine differenziertere Herangehensweise. Auf dem Gebiet der Erkennung von Redundanzen und von lokalen Widersprüchen in der Wissensbasis sind ebenfalls noch umfangreiche Arbeiten zu leisten. Hier ist besonders zu beachten, daß die Einstufung einer Information als “wahr” oder “falsch” nur zwei Extremwerte darstellt, die allenfalls in begrenzten Sachdomänen realistisch ist. Im Normalfall wird ein Verband verschiedener Glaubwürdigkeiten benötigt (s. [Hel01] Kap. 13), anhand dessen die Informationen der Wissensbasis eingestuft werden und in Konfliktfällen unterschiedlich priorisiert werden. Zur Realisierung und Wartung einer umfangreichen Wissensbasis (Punkt 3) steht das MWR-System zur Verfügung. Grundlegende Aufgaben der Antwortfindung (Punkt 4) werden durch zwei spezielle Systemkomponenten unterstützt, die in den folgenden Abschnitten vorgestellt werden. Zur Antwortgenerierung existieren bereits theoretische Überlegungen in [Hel01], aber zur Zeit noch keine Implementierungen. Allgemeine Aspekte der Antwortfindung. Die grundlegende Problemstellung der Antwortfindung besteht darin, zu einer natürlichsprachlichen Nutzeranfrage die relevanten Informationen in der Wissensbasis zu finden. Während die Wissensbasis durch ein semantisches Netz gegeben ist, stellt die semantische Repräsentation der Frage einen speziellen M ULTI N ET-Ausdruck dar, der auch als Fragemuster bezeichnet wird. Dies soll an dem folgenden Beispiel erläutert werden: Es sei die Wissensbasis aus Abb. 39 gegeben, die den folgenden Sachverhalt ausdrückt: Die Bank in Hagen verkauft Peter eine Münze, die von der Prägeanstalt in Wien aus 1 Feinunze Gold hergestellt worden ist.” Eine passende Frage dazu lautet: “Aus wieviel Gramm Gold besteht die Münze, die Peter von der Bank in Hagen gekauft hat?”. Das Fragemuster (die semantische Repräsentation der Frage) ist in Abbildung 40 wiedergegeben. Im Fragemuster werden typischerweise alle nicht lexikalisierten “inneren” Knoten (die normalerweise mit ci beschriftet sind) als logische Variablen aufgefaßt. Dahinter steht die Idee, daß lexikalisierte Knoten aufgrund der Objektzentriertheit von M ULTI N ET Anknüpfungspunkte zwischen der Wissensbasis und dem Fragemuster darstellen, während die inneren Netzstrukturen hingegen im Fragemuster und im Hintergrundwissen 46 Nicht alle diese Relationen werden in dieser Arbeit beschrieben; zu einer vollständigen Beschreibung aller Relationen siehe [Hel01] 152 5.4 Fragebeantwortung Gold Münze Feinunze SUB SUB Bank SUB c0 c28 herstellen INIT LT RS C LO *QUANT c2 SU B c22 1 S SUB T Prägeanstalt OBJ AG c29 QMOD ORIGM c5 AGT c23 SUB *IN S SUB Hagen verkaufen c19 OR LOC c24 NT c26 Peter Wien *IN bax1: SUBS(H, “verkaufen”) ∧ AGT(H,N) ∧ OBJ(H,O) ∧ ORNT(H,Z) → (ex SKH) SUBS(SKH, “kaufen”) ∧ (AGT SKH Z) ∧ (OBJ SKH O) ∧ (AVRT SKH N) bax3: *QUANT(P, U, “Feinunze”) → *QUANT(P, G, “g”) proc (G = TIMES 31.04 U) Abbildung 39: Hintergrundwissen und Axiome zur Fragebeantwortung unterschiedlich sein können und gegebenenfalls nur über Inferenzen ineinander überführbar sind. So müssen in dem Beispiel die lexikalisierten Knoten “Gold” sowohl im Hintergrundwissen als auch in der Frage das gleiche Konzept repräsentieren, und dies wird bei der Antwortfindung auch entsprechend ausgenutzt. Andererseits sind die Knoten “c19” im Hintergrundwissen und “?v3” im Fragemuster zwar beide Nachbarknoten von “Peter”, aber sie verfügen darüber hinaus zum Teil über unterschiedliche Kanten. Dies liegt daran, daß “c19” einen Verkaufensvorgang repräsentiert, während “?v3” einen Kaufensvorgang darstellt. Diese Vorgänge werden semantisch unterschiedlich repräsentiert und können aber zum Beispiel mit Hilfe von Axiom bax3 ineinander überführt werden. Dies ist jedoch nur möglich, wenn die im Fragemuster umzuformenden Teilnetze logische Variablen aufweisen. Die Erzeugung des Fragemusters aus der M ULTI N ET-Repräsentation einer Frage, die z.B. von NatLink geliefert wird, kann normalerweise durch eine einfache Umbenennung der inneren ci -Knoten in logische Variablen geschehen. Als Konvention gilt hierbei, daß logische Variablen durch ein vorangestelltes “?” hervorgehoben werden. Der Fragefokus (das Hauptinteresse des Fragenden) stellt eine besondere logische Variable dar, die mit “!F” gekennzeichnet wird. Seine Ermittlung ist nicht trivial und findet während der Analyse des natürlichsprachlichen Ausdrucks in NatLink statt. 153 U NTERST ÜTZUNG F RAGEBEANTWORTUNG F ÜR UND I NFERENZEN Gold Münze g SUB SUB Bank SUB ?v5 ?v6 SU B ?v2 C LO QMOD ORIGM *QUANT ?v7 ?v4 !F RT OBJ AV ?v1 *IN S SUB Hagen kaufen ?v3 AGT Peter Abbildung 40: Ein Fragemuster zum Hintergrundwissen Einige Teilziele bei der Antwortfindung sind bereits aus der Beschreibung des Netzdeducers bekannt. Dazu gehören das Ableiten von Teilnetzen, die Anwendung von Bedeutungspostulaten (z.B. um den Zusammenhang zwischen “kaufen” und “verkaufen” zu erschließen) sowie die Auswertung prozeduraler Elemente (z.B. das Umrechnen von Feinunzen in Gramm). Aus diesem Grund ist das vorgestellte Netzdeducer-System ein wichtiger Grundbaustein für die nachfolgend beschriebenen Verfahren. Abgesehen von diesen Teilzielen, die praktisch immer in der Fragebeantwortung enthalten sind, ist der komplette Inferenzprozeß zur Antwortfindung jedoch in hohem Maße von dem Typ der zugrundeliegenden Frage abhängig. In [Hel01] wird ein System zur Frageklassifizierung entwickelt, das drei Hauptklassen von Fragen enthält: • Entscheidungsfragen. Dies ist der einfachste Typ von Fragen, der nur mit “Ja” oder “Nein” beantwortet werden muß (Typ ENT). Bsp.: “Hat Peter bei der Bank in Hagen eine Münze aus Gold gekauft?” Zur Beantwortung dieses Fragetyps muß geprüft werden, ob das Fragemuster aus der Wissensbasis ableitbar ist. Es gibt allerdings auch Entscheidungsfragen mit Existenzcharakter (Typ ENTEX) wie “Gibt es eine Prägeanstalt, die Münzen aus 1 Feinunze Gold herstellt?”. In diesem Fall ist eine kooperative Antwort im Sinne von “Ja, in Wien.” einer einfachen “Ja/Nein”-Antwort vorzuziehen, sofern von der Analyse bereits in der Fragestruktur ein Fragefokus (s.u.) gekennzeichnet worden ist. • Ergänzungsfragen. Ergänzungsfragen zeichnen sich durch einen zusätzlichen Fragefokus aus, der das Interesse des Fragenden kennzeichnet. Typischerweise ist es die Aufgabe der Analyse, den Fragefokus bei der Übersetzung der natürlichsprachlichen Frage in einen M ULTI N ET-Ausdruck herauszufinden. 154 5.4 Fragebeantwortung Bsp.: “Aus wieviel Gramm Gold besteht die Münze, die Peter von der Bank in Hagen gekauft hat?”, s. Abb. 40. In dem in Abb. 40 dargestellten Netz ist der Fragefokus der Knoten “!F”, der als Variable für das “Wieviel Gramm...” der Frage steht. Die Antwortfindung hat hier neben der Ableitung des Fragemusters aus der Wissensbasis noch zusätzlich eine Variablenbelegung für den Fragefokus zu finden (z.B. !F = 31.04), damit das System eine kooperative Antwort wie “31.04 Gramm.” liefern kann. Neben den reinen Ergänzungsfragen (Typ ERG) gibt es auch noch Zählfragen (“Wieviele Prägeanstalten stellen Goldmünzen her?”, Typ COUNT) und operationale Fragen (“Wieviel Gramm Gold besitzt Peter insgesamt?”, Typ OPERG). Der letzte Typ ist nur dann sinnvoll zu beantworten, wenn Informationen über alle Goldmünzen vorliegen, die Peter besitzt. • Essayfragen. Zur Beantwortung dieses Fragetyps wird ein kleiner Antworttext (Essay) benötigt, d.h. es gibt keinen Fragefokus und keinen einfachen Netzknoten, der den Kern der Antwort darstellt. Der Antwortkern besteht aus einem Teilnetz, das natürlichsprachlich zu reformulieren ist. Bsp.: “Was weißt Du über die Prägeanstalt in Wien?” Eine Diskussion der verschiedenen Untertypen von Essayfragen unterbleibt an dieser Stelle, da dieser Fragetyp im Folgenden nicht weiter berücksichtigt wird. Die in den nächsten Unterkapiteln beschriebenen Methoden widmen sich der Beantwortung der grundlegenden Fragetypen ENT, ENTEX und ERG. Als Ergebnis der Antwortfindung wird die Ableitbarkeit des Fragemusters aus der Wissensbasis angegeben (Ja/Nein, für die Typen ENT und ENTEX) sowie die gefundene Instantiierung des Fragefokus für die Fragetypen ENTEX und ERG. Beide Methoden sind in ihrem Funktionsumfang bezüglich der Fragebeantwortung gleich mächtig; sie verfolgen jedoch unterschiedliche Inferenzstrategien. 5.4.1 Fragebeantwortung über den Netzdeducer Fragemuster stellen formal Teilnetze dar, in denen ausschließlich gültige M ULTI N ETRelationen und funktionale Terme als Literale vorkommen. Im Gegensatz zu Netzen aus der Wissensbasis enthält das Fragemuster aber wie oben erwähnt an einigen Stellen Variablen als Argumente von Relationen und funktionalen Termen. Das Beweisziel besteht bei der Fragebeantwortung darin, zunächst das Fragemuster aus der Wissensbasis abzuleiten und anschließend gegebenenfalls die Substitution für den Fragefokus zu bestimmen. Beides sind Teilaufgaben, die direkt mit Hilfe des Teilnetzdeducers gelöst werden können (s. Kap. 5.3.2). Das Fragemuster wird analog zur Ableitung der linken Seite einer Regel als Beweisziel an den Teilnetzdeducer übergeben und es wird eine Ableitung für das Fragemuster angefordert. Als Hilfsregelsystem ist ein für die Fragebeantwortung geeignetes System von Rund B-Axiomen anzugeben. Der Teilnetzdeducer versucht anschließend, die Literale des Fragemusters vor dem Hintergrund der Wissensbasis und der Axiome zu beweisen und liefert im Erfolgsfall die resultierende Substitutionsliste. Mit Hilfe einer einfachen Suchprozedur läßt sich die Ersetzung für den Fragefokus aus der Substitutionsliste bestimmen. 155 U NTERST ÜTZUNG F ÜR F RAGEBEANTWORTUNG UND I NFERENZEN SUB(?v4, ?v5), OBJ(?v3, ?v4), LOC(?v2, ?v1), AVRT(?v3, ?v2), QMOD(?v6, ?v7), ORIGM(?v5, ?v6), SUB(?v2, “Bank”), SUBS(?v3, “kaufen”), AGT(?v3, “Peter”), SUB(?v6, “Gold”), SUB(?v5, “Münze”), ∗IN(?v1, “Hagen”), ∗QUANT(?v7, “!F” “g”) Abbildung 41: Eine ungünstige Literal-Reihenfolge für den Ableitungs-Prozeß Probleme einer naiven Implementierung. Eine naive Implementierung des oben beschriebenen Verfahrens ergibt jedoch unter bestimmten Randbedingungen ein sehr ineffizientes Vorgehen des Teilnetzdeducers. Die Beweisstrategie des Teilnetzdeducers besteht im Wesentlichen darin, das gegebene Teilnetz (in diesem Fall also das Fragemuster) Literal für Literal mit Hilfe einer Tiefensuche abzuleiten. Treten nun in den ersten Beweisschritten verstärkt Literale auf, die nur logische Variablen enthalten, so führt dies später zu verstärktem Backtracking. Abbildung 41 enthält eine solche ungünstige Anordnung für das Fragemuster aus Bild 40. Die Literale sind so sortiert, daß zunächst alle Literale abgeleitet werden müssen, die nur logische Variablen enthalten. Da diese Literale potentiell mit allen denjenigen Kanten in der Wissensbasis gematcht werden können, die mit der passenden Relation oder Funktion markiert sind, wird das Beweisverfahren einige Male in eine Sackgasse laufen, bevor es jeweils die richtige Kante findet. Zur Ableitung der ersten SUB-Kante aus dem Fragemuster gibt es z.B. fünf potentielle Kandidaten in der Wissensbasis aus Abb. 39. Heuristische Verbesserung des Verfahrens. Das Beweisverfahren kann durch die Anwendung einer speziellen “Startheuristik” optimiert werden, die bereits in [Hel77] bei der Fragezentrierung (s. nächstes Unterkapitel) eingesetzt wurde. Die Grundidee stützt sich auf die folgende Beobachtung: Es ist nicht möglich, eine Anfrage derart zu formulieren, daß in dem Fragemuster nur Literale mit logischen Variablen auftreten. Die Begründung liegt darin, daß man keine natürlichsprachliche Frage formulieren kann, ohne nicht mindestens ein Nomen, Verb oder Adjektiv zu gebrauchen. Jeder dieser Satzbestandteile führt aber zu einem lexikalisierten Knoten und damit zu einer Konstante im Fragemuster. Daraus folgt, daß es im Fragemuster mindestens ein Literal mit einer Konstante geben muß. Aufgrund der Objektzentriertheit von M ULTI N ET gilt weiterhin, daß es zu jedem Konzept genau einen Knoten geben darf (es sind also nicht mehrere Knoten mit dem gleichen “Namen” erlaubt). Wenn es also im Fragemuster ein Literal mit einer Konstante gibt, und ein Konzeptknoten zu dieser Konstante auch in der Wissensbasis gefunden wird, dann hat man einen gemeinsamen Knoten des Fragemusters und des Netzes der Wissensbasis gefunden. Eine Verbesserung des Beweisverfahrens ergibt sich also dadurch, die Literale des Fragemusters zunächst so vorzusortieren, daß alle Literale mit mindestens einer Konstante 156 5.4 Fragebeantwortung SUB(?v2, “Bank”), SUBS(?v3, “kaufen”), AGT(?v3, “Peter”), SUB(?v6, “Gold”), SUB(?v5, “Münze”), ∗IN(?v1, “Hagen”), ∗QUANT(?v7, “!F” “g”), SUB(?v4, ?v5), OBJ(?v3, ?v4), LOC(?v2, ?v1), AVRT(?v3, ?v2), QMOD(?v6, ?v7), ORIGM(?v5, ?v6) Abbildung 42: Eine effiziente Literal-Reihenfolge für den Ableitungs-Prozeß zuerst abgeleitet werden47 . Dies entspricht dem Ansatz der Fragezentrierung, den Suchgraphen mit terminalen Knoten aus dem Fragemuster vorzuinitialisieren. Unter Ausnutzung der Objektzentriertheit von M ULTI N ET wird auf diese Weise sichergestellt, daß der Teilnetzdeducer den Beweis an den Stellen beginnt, an denen sich das Fragemuster und die Wissensbasis überlappen. Für jeden gemeinsamen konstanten Knoten muß es mindestens eine ableitbare Kante geben, die den Beweisprozeß fortführt; anderenfalls existiert keine Ableitung des Fragemusters aus der Wissensbasis. Dadurch hängt der Aufwand zum Beweis der betreffenden Literale nur von der Anzahl der Kanten des konstanten Knotens in der Wissensbasis ab (und natürlich der zum Beweis hinzuziehbaren Axiome), wodurch ein deutlich geringerer Aufwand im Vergleich zum “naiven” Matching gegen alle passenden Kanten der Wissensbasis resultiert. Für die erste SUB-Kante aus der effizient sortierten Anordnung in Abb. 42 ergibt sich beispielsweise nur noch eine Auswahlmöglichkeit; bei einer komplexeren Wissensbasis wären hier im schlechtesten Fall nur noch alle SUBKanten zu überprüfen, die in den “Bank”-Knoten laufen, aber nicht mehr alle möglichen SUB-Kanten in der Wissensbasis. Da im Verlauf des Beweisprozesses logische Variablen durch bereits abgeleitete Konstanten substituiert werden, ist es zudem möglich, daß sich bei der Ableitung der ersten “teilkonstanten” Literale (Literale mit einer Konstante und einer Variable) bereits genügend viele Substitutionen ergeben, so daß auch in den späteren “variablen” Literalen wie AVRT(?v3,?v2) schon vor dem Matching einige Variablen durch Konstanten ersetzt werden können. Nach der Ableitung von SUB(?v2, “Bank”) mit {“c22”/?v2} folgt bereits beispielsweise AVRT(?v3,“c22”). Empirische Untersuchungen haben ergeben, daß auf diese Weise der Fall eines isolierten “variablen” Literals im Ableitungs-Prozeß nur sehr selten auftritt und der Teilnetzdeducer in den meisten Fällen sehr zielstrebig auf den Beweis des Gesamtnetzes zusteuert bzw. sich maximal ein bis zwei Kanten in eine falsche Richtung “verläuft”. Algorithmus zum Einsatz des Teilnetzdeducers in der Fragebeantwortung. Der Algorithmus ist in Abb. 43 dargestellt. Das Teilnetzdeducer-Objekt wird in einen prozeduralen Kontext eingebunden, der das Vorsortieren der Literale sowie die Auswertung des Fragefokus übernimmt. Die entsprechenden Hilfsprozeduren sind trivial und werden nicht weiter ausgeführt. Als Ergebnis liefert der Algorithmus die leere Menge, wenn keine Ableitung des Fragemusters aus der Wissensbasis erzielt werden konnte. Anderenfalls hängt das Resultat vom Typ der Frage ab, der vereinfachend durch die Präsenz bzw. 47 Eine zusätzliche Verbesserung ergibt sich ggf. dadurch, die Knoten hinsichtlich der Anzahl ihrer einund ausgehenden Kanten vorzusortieren; diese Heuristik wird in Kap. 5.4.2 weiter diskutiert. 157 U NTERST ÜTZUNG F ÜR F RAGEBEANTWORTUNG UND I NFERENZEN Fragebeantwortung über Teilnetzdeducer input: fragemuster fragefokus rule-list (* zum Beweis hinzuziehbare Axiome *) proc: (* eigentlicher Prozedurkörper *) 1 sorted-literals ← Sortiere das Fragemuster, so daß Literale mit Konstanten vorne in der Liste stehen 2 net-deducer-object ← create-net-deducer-object(sorted-literals,Ø, rule-list); substitutions ← net-deducer-object(); 3 if substitutions = Ø then return Ø; (* keine Ableitung, Frage nicht beantwortbar *) else if fragefokus 6= Ø then subst-fokus ← substitute(fragefokus,substitutions); return subst-fokus; else return true; fi; fi; Abbildung 43: Fragebeantwortung über den Teilnetzdeducer Nicht-Präsenz des Fragefokus angezeigt wird. Wenn ein Fragefokus existiert, wird die entsprechende Substitution zurückgegeben; diese repräsentiert den Antwortkern. Anderenfalls wird nur der Wahrheitswert “true” zurückgegeben um anzuzeigen, daß die Entscheidungsfrage positiv beantwortet werden soll. Beispiel. Als Beispiel wird die Beantwortung des Fragemusters aus Abb. 40 vor dem Hintergrund der Wissensbasis von Abb. 39 betrachtet. Die Darstellungen und Voraussetzungen sind analog zu dem Komplexbeispiel aus Kap. 5.3.4. Aus Gründen der Vereinfachung enthält das nachfolgende Beispiel keine Backtracking-Fälle (diese würden analog zu Kap. 5.3.4 behandelt); damit entfällt auch die Notwendigkeit einer Kantennumerierung in der Abbildung, da sich die jeweils gewählten Kanten eindeutig zuordnen lassen. In Schritt 1 erfolgt zunächst die Sortierung der abzuleitenden Literale. Abgesehen von der Sortierung der Literale nach konstanten und nicht-konstanten Knoten ist die Abfolge beliebig bzw. durch die Reihenfolge bestimmt, in der das Netz in die Wissensbasis eingetragen wurde. Für die folgende Diskussion wird das nachstehende Sortierergebnis für das Fragemuster angenommen: sorted-literals → { SUB(?v6,“Gold”), ∗QUANT(?v7,!F,“g”), SUB(?v5,“Münze”), AGT(?v3,“Peter”), SUBS(?v3,“kaufen”), SUB(?v2,“Bank”), ∗IN(?v1,“Hagen”), QMOD(?v6,?v7), ORIGM(?v5,?v6), SUB(?v4,?v5), OBJ(?v3,?v4), AVRT(?v3,?v2), LOC(?v2,?v1) } 158 5.4 Fragebeantwortung Als Schreibweisen-Konvention werden im Fragemuster logische Variablen durch ein vorangestelltes “?” hervorgehoben und der Fragefokus mit “!F” bezeichnet. Abbildung 44 skizziert den Ablauf der Fragemuster-Bearbeitung durch den Teilnetzdeducer. Zunächst wird ein Teilnetzdeducer T1 zur Ableitung des gesamten Fragemusters erzeugt. Die Ableitung des ersten Literals des Fragemusters gelingt direkt über den Literaldeducer L1. Für das zweite Literal läßt sich kein passender Eintrag in der Wissensbasis finden, da nach einer anderen Maßeinheit (Gramm statt Feinunzen) gefragt wurde. Der zuständige Literaldeducer L2 stellt jedoch fest, daß in der Konklusion von bax3 ein passendes Literal enthalten ist, und versucht die Anwendung von bax3 mit Hilfe von R1. Regelanwender R1 versucht deshalb die linke Seite von bax3 zu instantiieren, was mit Hilfe von T2 und L3 gelingt, da das Literal ∗QUANT(“c2”, “1”, “Feinunze”) in der Wissensbasis enthalten ist. Unter Verwendung der daraus resultierenden Substitutionen erhält R1 als vorläufige Instantiierung der rechten Regelseite: ∗QUANT(“c2”, G, “g”) proc (G = TIMES 31.04 “1”). Damit läßt sich die prozedurale Komponente der Regel auswerten und G= “31.04” berechnen. Ein erneutes Instantiieren der Konklusion mit dem errechneten Wert ergibt ∗QUANT(“c2”, “31.04”, “g”) und damit eine Ableitung für das von L2 gesuchte Literal. Die Ableitung des nächsten Literals über L4 gelingt direkt. Erst bei L5 wird wiederum die Anwendung einer Regel erforderlich. Literaldeducer L5 findet keine direkte Ableitung für AGT(?v3,”Peter”) in der Wissensbasis, da hierzu erst der Zusammenhang zwischen “kaufen” und “verkaufen” aufzulösen ist. Deshalb versucht L5 die Anwendung von bax1, da ein passendes Literal in der Konklusion von bax1 enthalten ist. Die Instantiierung der Prämisse von bax1 mittels Regelanwender R2 läuft analog zu den bisher geschilderten Fällen ab. Die linke Seite der Regel wird mit Hilfe von Teilnetzdeducer T3 direkt aus der Wissensbasis abgeleitet und liefert die Substitutionen {“verkaufen”/H, “c22”/N, “c28”/O, “Peter”/Z }. Damit tritt bei der Instantiierung der Konklusion durch R2 der Fall ein, daß auf der rechten Seite der Regel eine freie existenzquantifizierte Variable SKH übrig bleibt. Gemäß Punkt 2 der Regelanwender-Vorschrift wird die Variable SKH durch einen eindeutigen, neu generierten Netzknoten “exq1” substituiert. Dadurch wird die Invariante des AbleitungsVerfahrens erfüllt, daß eine abgeleitete Regel nur Grundliterale liefern darf (siehe Kap. 5.2.1). Dies ist u.a. Voraussetzung dafür, den Literal-Cache bei der Anwendung von Regeln mit mehrstelligen Konklusionen einsetzen zu können. Es muß nämlich sichergestellt werden, daß für die ehemalige Variable SKH in allen Literalen der gleiche Knoten substituiert wird, d.h. also daß der Zusammenhang zwischen den abgeleiteten Literalen gewahrt wird. Genau dies wird über den eindeutigen Namen “exq1” erreicht. Nach der Durchführung der Substitution “exq1/SKH” fügt der Regelanwender R2 die Konklusions-Literale { SUBS(“exq1”, “kaufen”), AGT(“exq1”, “Peter”), OBJ(“exq1”, “c28”), AVRT(“exq1”, “c22”) } dem Literal-Cache hinzu. Das Literal AGT(“exq1”, “Peter”) wird als unmittelbares Ergebnis für das Beweisziel von L5 verwendet und die Ableitung des Fragemusters mit L10 fortgesetzt. Die verbleibenden Literale des Fragemusters werden über die Literaldeducer L10 bis L18 direkt abgeleitet, wobei entweder Ableitungen aus der Wissensbasis oder über Literale aus dem Cache durchgeführt werden. Im letzteren Fall werden die verbleibenden Literale 159 U NTERST ÜTZUNG F ÜR F RAGEBEANTWORTUNG UND I NFERENZEN T1: SUB(?v6,"Gold"), ..., LOC(?v2,?v1) L1: SUB(?v6,"Gold") SUB("c0","Gold") L2: *QUANT(?v7 !F "g") R1: *QUANT(P,U,"Feinunze") −−> *QUANT(P,G,"g") proc (G = TIMES 31.04 U) T2: *QUANT(P,U,"Feinunze") L3: *QUANT(P,U,"Feinunze") *QUANT("c2","1","Feinunze") Berechnung: (G = TIMES 31.04 1) *QUANT("c2","31.04","g") L4: SUB(?v5,"Münze") SUB("c5","Münze") L5: AGT(?v3,"Peter") R2: SUBS(H,"verkaufen") AGT(H,N) OBJ(H,O) ORNT(H,Z) −−> (ex SKH)(SUBS SKH "kaufen") AGT(SKH Z) OBJ(SKH O) AVRT(SKH N) T3: SUBS(H,"verkaufen") AGT(H,N) OBJ(H,O) ORNT(H,Z) L6: SUBS(...) Beweis der vier Literale der linken Regelseite L9: ORNT(...) SUBS("exq1","kaufen"), AGT("exq1","Peter"), OBJ("exq1","c28"), AVRT("exq1","c22") Instantiierung rechte Regelseite; Aufnahme der Literale in den Cache AGT("exq1","Peter") L10: SUBS(?v3,"kaufen") SUBS("exq1","kaufen") Ableitung aus Literal−Cache SUB("c22","Bank") we *IN("c29","Hagen") is üb QMOD("c0","c2") er Lit er ORIGM("c5","c0") ald ed SUB("c28","c5") uc er L1 OBJ("exq1","c28") 1. .. L AVRT("exq1","c22") 18 LOC("c22".,"c29") Be T1 liefert Subst.−Liste: { "c28"/?v4, "c29"/?v1, "c22"/?v2, "exq1"/?v3, "c5"/?v5, "31.04"/!F, "c2"/?v7, "c0"/?v6} Abbildung 44: Ablauf der Fragebeantwortung durch den Teilnetzdeducer 160 5.4 Fragebeantwortung aus der Konklusion von bax1 in die Ableitung des Fragemusters eingearbeitet, ohne die Regel erneut auswerten zu müssen. Nachdem T1 alle Literale des Fragemusters bewiesen hat, wird als Ergebnis die Substitutionsliste {“c28”/?v4, “c29”/?v1, “c22/?v2”, “exq1/?v3, “c5”/?v5, “31.04”/!F, “c2”/?v7, “c0”/?v6 } zurückgeliefert. Das Auftreten einer nichtleeren Substitutionsliste zeigt dem Algorithmus in Schritt 3 an, daß die Frage positiv beantwortet werden kann. Da zudem der Fragefokus “!F” gegeben ist, muß noch der Antwortkern bestimmt werden. Dazu wird in der Substitutionsliste die Konstante gesucht, die für “!F” einzusetzen ist. Im vorliegenden Fall ist der Antwortkern damit “31.04” und eine nachgeschaltete Generierungskomponente könnte daraus z.B. die kooperative Antwort “31.04 Gramm” erzeugen. 5.4.2 Fragebeantwortung mit der Fragezentrierung Das Verfahren der Fragezentrierung geht auf eine Arbeit von Helbig [Hel77] zurück. Es versucht, den Prozeß der Antwortfindung noch stärker heuristisch zu steuern als in der im vorherigen Kapitel beschriebenen Fragebeantwortung mit Hilfe des Teilnetzdeducers. Ergänzend zu der bereits beschriebenen Startheuristik versucht das Verfahren, den Beweisweg innerhalb des Fragemusters zu optimieren, indem über eine Kostenfunktion heuristische Bewertungen für den Suchweg vergeben werden. Eine entscheidende Rolle spielen dabei die sog. Fragezentren; dies sind Knoten, die auf voneinander unabhängigen Beweiswegen mehrmals erreicht worden sind. Das Auffinden solcher Knoten gilt als ein starkes Indiz dafür, daß ein relevanter Teil der Wissensbasis erreicht worden ist und das Beweisverfahren in die richtige Richtung voranschreitet. Dementsprechend erhalten Fragezentren eine hohe Priorität bei der Auswahl geeigneter Kandidaten, bei denen der Beweisprozeß fortgesetzt wird. Der Suchgraph zur Steuerung des Beweisweges. Zur Steuerung des Beweisprozesses wird bei der Fragezentrierung ein Suchgraph eingesetzt. Die Knoten des Suchgraphen können als ein Tupel aufgefaßt werden, das die folgenden Elemente zur Beschreibung des aktuellen Zustands der Suche enthält: name cost head cont rest prev subst focus : Ein eindeutiger Bezeichner für den Suchgraph-Knoten. : Heuristisch abgeschätzte Kosten, die anfallen, um den Beweis mit dem vorliegenden Knoten fortzusetzen. : Der Knoten des semantischen Netzes (“Knotenkopf”), bis zu dem der Beweis bisher vorangetrieben worden ist. : Eine Liste der Netzkanten, über die der Beweisprozeß fortgesetzt werden kann. Dies sind alle noch unbewiesenen Kanten, die den Knoten head enthalten. : Alle übrigen noch nicht bewiesenen Literale. : Verkettungsinformationen zu den Vorgängerknoten im Suchgraphen. : Die Liste der auf dem bisherigen Beweisweg durchgeführten Substitutionen. : Ein Verweis auf den Knoten im Fragemuster, der den Fragefokus darstellt. 161 U NTERST ÜTZUNG F ÜR F RAGEBEANTWORTUNG UND I NFERENZEN Aufbau der Fragezentrierung. Die in MWR eingesetzte Variante der Fragezentrierung setzt sich aus der sog. Kern-Heuristik und einem Objekt zur Entwicklung von Suchgraph-Knoten zusammen, das im folgenden kurz als “Knotenentwickler” bezeichnet wird. Die Kern-Heuristik besteht aus einer prozeduralen Steuerung, mit deren Hilfe jeweils der nach der Kostenfunktion “billigste” Suchgraph-Knoten bzw. das zugehörige Knotenentwickler-Objekt ausgewählt und zum Vorantreiben des Beweisprozesses eingesetzt wird. Der Knotenentwickler wird für einen gegebenen Suchgraph-Knoten initialisiert und berechnet bei jedem Aufruf einen Fortsetzungsknoten. Seine Funktionsweise ist damit analog zu den Literaldeducer-Objekten aus dem MWR-Kernsystem. Das Knotenentwickler-Objekt. Die Aufgabe des Knotenentwickler-Objektes besteht darin, den Beweisprozeß des Fragemusters um einen Schritt weiterzuführen. Der entsprechende Algorithmus ist in Abb. 45 dargestellt. Der Knotenentwickler erhält als Eingabe den zu entwickelnden Suchgraph-Knoten sowie eine Liste der zur Verfügung stehenden Axiome. Analog zu den übrigen NetzdeducerObjekten liefert der Knotenentwickler pro Aufruf jeweils einen neuen Knoten, der aus der Entwicklung des gegebenen Suchgraph-Knoten hervorgeht, oder die leere Menge, wenn sich der Suchgraph-Knoten nicht weiter entwickeln läßt. In der init-Phase wird die Suchgraph-Entwicklung vorbereitet. Zur Weiterentwicklung des Suchgraphen muß eine Kante aus der Liste der Fortsetzungen des aktuellen Suchgraphknotens tnode bewiesen werden. Ohne Beschränkung der Allgemeinheit kann hier stets die erste Kante (first(tnode.cont)) aus der Liste gewählt werden, denn wenn sich eine Kante der Fortsetzungen nicht beweisen ließe, würde das Verfahren ohnehin zu einem späteren Zeitpunkt scheitern. Die restlichen Kanten der Fortsetzungsliste werden - unter Berücksichtigung einer eventuellen Elimination von Kanten, die im aktuellen Beweisschritt zu Grundliteralen werden und damit ebenfalls bereits bewiesen sind - in die “cont”und “rest”-Listen des Nachfolgeknoten übernommen und dadurch in den anschließenden Beweisschritten abgearbeitet. Der eigentliche Beweis der zu entwickelnden Kante stellt eine Standardaufgabe dar, die keine weiteren Heuristiken beinhaltet und daher mit Hilfe eines Literaldeducer-Objektes durchgeführt wird. Da das Literaldeducer-Objekt selbständig das Axiomsystem heranzieht, wenn sich ein Literal nicht direkt aus der Wissensbasis ableiten läßt, ist die Fortentwicklung des Suchgraphen über die Anwendung von Axiomen an dieser Stelle mit enthalten. Die “infer”-Phase wird ausgeführt, wenn die Kern-Heuristik eine Entwicklung des Suchgraph-Knotens anfordert. In Schritt 1 wird zunächst über das Literaldeducer-Objekt versucht, eine Ableitung für die aktuelle Kante zu finden. Gelingt dies nicht, was durch substitutions = Ø angezeigt wird, so ist die Knotenentwicklung fehlgeschlagen. Anderenfalls (Schritt 2 ) muß nun der Inhalt des neu entwickelten Suchgraph-Knotens berechnet werden. Als neuer Knotenkopf head dient einer der Knoten, der über die gerade abgeleitete Kante neu erreicht werden kann. Die Liste der noch unbewiesenen Relationen und Funktionen wird neu aufgebaut und anschließend werden alle Grundliterale daraus entfernt, die sich direkt mit Hilfe der neu hinzugekommenen Substitutionen ableiten lassen. Da sich die Ableitung von Grundliteralen sehr effizient realisieren läßt, können so 162 5.4 Fragebeantwortung Fragezentrierung: Knotenentwickler-Objekt input: tnode rule-list (* zu entwickelnder Graphknoten *) (* zum Beweis hinzuziehbare Axiome *) init: litdeducer-obj ← create-literal-deducer-object(first(tnode.cont), tnode.subst, rules); infer: substitutions ← litdeducer-obj(); (* nächste Kante erreichen *) 1 if substitutions = Ø then return Ø; (* Knotenentwicklung fehlgeschlagen *) fi; 2 head ← über die Kante neu erreichter Knoten; relations ← node.rest ∪ rest(tnode.cont); (* alle noch unbewiesenen Kanten *) relations ← relations \ { beweisbare Grundliterale aus relations }; 3 if relations = Ø then name ← “solution”; (* Frage beantwortet *) else name ← gensym(“x”); (* Name für neuen SG-Knoten *) cont ← alle Relationen ∈ relations, die head enthalten; if cont = Ø then head ← erste Konstante 6= head aus relations; cont ← alle Relationen ∈ relations, die head enthalten; fi; rest ← relations \ cont; cost← siehe Erläuterungen im Text; fi; subst ← tnode.subst ∪ substitutions; prev ← append-to-path(tnode.prev,name); (* vereinfachte Darstellung *) 4 if tnode.focus ∈ substitutions then substitute(tnode.focus, substitutions); fi; new-node ← generate-node(name,cost,head,cont,rest,prev,subst,focus); return new-node; Abbildung 45: Algorithmus zum Knotenentwickler-Objekt gegebenenfalls mehrere Literale aus dem Fragemuster pro Beweisschritt eliminiert werden. Wenn anschließend keine unbewiesenen Literale mehr vorhanden sind (Schritt 3 ), wurde die Frage beantwortet und der neue Knoten erhält den Namen “solution”. Anderenfalls erhält der Knoten einen automatisch generierten Namen und die Liste der Fortsetzungen wird berechnet. Falls der Knotenkopf head aufgrund der Elimination von Grundliteralen nicht mehr in der Liste der unbewiesenen Relationen vorkommt, dann wurde beweistechnisch ein terminaler Knoten erreicht. In diesem Fall muß zu einem anderen Knoten aus einem noch unbewiesenen Literal gewechselt und die Liste cont neu berechnet werden. 163 U NTERST ÜTZUNG F ÜR F RAGEBEANTWORTUNG UND I NFERENZEN Die heuristische Bewertung cost hat einen wesentlichen Einfluß darauf, zu welchem Zeitpunkt der Beweis an der Stelle des neu entwickelten Knotens fortgesetzt wird. Nach [Hel77] ist die Kostenfunktion wie folgt zu berechnen: cost = Anzahl der noch unbewiesenen Relationen + Anzahl der Kanten von head in der Wissensbasis + Bonus, wenn head ein Fragezentrum darstellt. Der Bonus für ein Fragezentrum wird erst später in der Kern-Heuristik addiert, da die Feststellung eines Fragezentrums innerhalb des Knotenentwickler-Objektes mangels Zugriff auf den aktuellen Zustand des Beweisverfahrens nicht möglich ist. Bei der Angabe der Kantenanzahl von head muß das System gegebenenfalls einen konstanten Schätzwert verwenden, da sich der Wert nur exakt berechnen läßt, wenn head wirklich in der Wissensbasis vorhanden ist. Falls head über ein Axiom erschlossen werden muß (z.B. head = “kaufen”, und die Wissensbasis enthält nur “verkaufen”), läßt sich der exakte Wert ohne die Anwendung des Axioms nicht ermitteln. In den vorliegenden Beispielen hat sich der Wert 10 als gute Wahl für den Schätzwert erwiesen. Schließlich müssen die neuen Substitutionen in die Gesamtliste aller Substitutionen aufgenommen werden und der Beweisweg zu dem neuen Knoten in der “prev”-Liste vermerkt werden. Falls der Fragefokus in der Substitutionsliste auftritt (Schritt 4 ), hat das Beweisverfahren den Antwortkern erreicht. In diesem Fall wird der Fragefokus mit dem Antwortkern substituiert, da diese Information später bei der Fragebeantwortung benötigt wird. Die bisher berechneten Bestimmungsstücke des neu entwickelten Knotens werden zusammengefaßt (“generate-node(...)”) und an die aufrufende Kern-Heuristik zurückgegeben. Die Kern-Heuristik. Nachdem durch das Knotenentwickler-Objekt die Entwicklung von einzelnen Suchgraph-Knoten gelöst ist, fehlt noch die Vorbereitung und Durchführung der Entwicklung des gesamten Suchgraphen. Dies ist die Aufgabe der KernHeuristik, die aus einem Hauptprogramm zur Initialisierung und zur Auswertung der Ergebnisse und einem Verfahren develop-graph besteht, in der die Entwicklung des Suchgraphen vorangetrieben wird. In der Initialisierungsphase 1 des Hauptprogramms aus Abb. 46 wird für jeden lexikalisierten Knoten des Fragemusters ein Suchgraphknoten erzeugt, wobei die einzelnen Einträge des Knotens analog zu der Beschreibung des Knotenentwickler-Objektes initialisiert werden. Die Liste subst der Substitutionen ist zu Anfang leer, und in der Verkettungsinformation prev befindet sich zu Anfang nur ein virtueller Wurzelknoten. Auf die explizite Generierung eines Wurzelknotens in dem Suchgraphen kann verzichtet werden. Schritt 2 besteht in dem Aufruf der Suchgraphentwicklung. Diese liefert entweder einen Ergebnisknoten, in dem das komplette Fragemuster bewiesen wurde, oder Ø, falls die Entwicklung nicht möglich ist. Schritt 3 ist analog zur Fragebeantwortung über den Netzdeducer und dient zur Aufbereitung des Rückgabewertes anhand des vorliegenden Fragetyps. Die Suchgraphentwicklung wird mit Hilfe des in Abb. 47 dargestellten rekursiven Verfahrens gesteuert, das wie folgt vorgeht: 164 5.4 Fragebeantwortung Kern-Heuristik: Hauptprogramm input: fragemuster fragefokus rule-list (* zum Beweis hinzuziehbare Axiome *) proc: (* eigentlicher Prozedurkörper *) 1 graph ← init-graph(fragemuster,fragefokus); 2 result ← develop-graph(graph,rule-list); 3 if result = Ø then return Ø; else if fragefokus = Ø then return true; else return result.fokus; fi; fi; (* siehe nächste Seite *) Abbildung 46: Algorithmus zur Kern-Heuristik der Fragezentrierung 1 Falls der Suchgraph leer ist (z.B. über einen rekursiven Aufruf), dann wurden alle Suchgraphknoten entwickelt oder verworfen, ohne daß das Fragemuster vollständig bewiesen werden konnte. Die Frage wird als nicht beantwortbar zurückgewiesen. 2 Der Knoten mit der kleinsten Kostenbewertung wird ausgewählt und aus dem Suchgraphen entfernt. Die Entwicklung des ausgewählten Knotens wird durch die Erzeugung eines Knotenentwickler-Objektes vorbereitet. 3 Das Knotenentwickler-Objekt wird aufgerufen, um den ausgewählten Knoten zu entwickeln. 4 Wenn die Knotenentwicklung scheitert, muß an dieser Stelle Backtracking erfolgen. Die Programmausführung kehrt zur übergeordneten develop-graph–Prozedur zurück, um dort einen alternativen Beweisweg zu versuchen. Falls kein übergeordneter Aufrufer mehr existiert, scheitert der Beweis an dieser Stelle. 5 Enthält jedoch der neu abgeleitete Knoten das leere Fragemuster, so ist das Fragemuster erfolgreich abgeleitet worden und der erhaltene Knoten stellt den Ergebnisknoten dar. 6 Sofern die rekursiven Abbruchbedingungen 4 und 5 nicht erfüllt werden konnten, wird jetzt die Suchgraphentwicklung weiter rekursiv vorangetrieben. Zunächst wird überprüft, ob der gerade erreichte Knoten head ein Fragezentrum darstellt. Im Falle eines Fragezentrums existiert im Suchgraphen ein Vorgängerknoten fz-node, über den head bereits einmal auf einem alternativen Beweisweg erreicht worden ist. 7 Wenn kein Fragezentrum erreicht wurde (fz-node = Ø), so ist der neu entwickelte Knoten dem Suchgraphen hinzuzufügen. 165 U NTERST ÜTZUNG F ÜR F RAGEBEANTWORTUNG UND I NFERENZEN Kern-Heuristik: develop-graph (Suchgraphentwicklung) input: graph rule-list (* aktueller Suchgraph *) (* zum Beweis hinzuziehbare Axiome *) proc: (* eigentlicher Prozedurkörper *) 1 if graph = Ø return Ø; (* alle Suchgraphknoten erfolglos bearbeitet *) fi; 2 graph-node ← Knoten aus graph mit kleinstem cost–Wert; graph ← remove-from-graph(graph,graph-node); node-dev-obj ← make-node-dev(graph-node,rule-list); repeat 3 new-graph-node ← node-dev-obj(); (* Knoten entwickeln *) 4 if new-tree-node = Ø (* Entwicklung fehlgeschlagen *) then return Ø; (* Backtracking *) 5 if new-tree-node.cont = Ø ∧ new-tree-node.rest = Ø then return new-tree-node; (* Fragemuster abgeleitet *) 6 head ← new-tree-node.head; (* neu erreichter Knoten *) fz-node ← Knoten ∈ graph, über den head bereits erreicht wurde; 7 if fz-node = Ø then graph ← insert-into-graph(graph,new-graph-node); 8 else cont ← fz-node.cont ∩ new-graph-node.cont; rest ← fz-node.rest ∩ new-graph-node.rest; subst ← fz-node.subst ∪ new-graph-node.subst; cost ← Kostenfunktion + fz-bonus; prev ← append-to-path(combine-path(new-tree-node.prev, fz-node.prev), name); focus ← new-graph-node.focus; combined-node ← generate-node(name,cost,head,cont, rest,prev,subst,focus); graph ← remove-from-graph(graph,fz-node); graph ← insert-into-graph(graph,combined-node); fi; 9 recursive-result ← develop-tree(graph,rule-list); until recursive-result 6= Ø; 10 return recursive-result; Abbildung 47: Algorithmus zur Suchgraphentwicklung 8 Im Falle eines Fragezentrums sind der neu entwickelte Knoten graph-node sowie das Gegenstück fz-node zu einem neuen Knoten combined-node zu vereinigen. Anschließend wird fz-node aus dem Graphen entfernt (graph-node wurde bereits in Schritt 2 herausgenommen) und stattdessen der neue Knoten combined-node in den Graphen eingefügt. 166 5.4 Fragebeantwortung 9 Die develop-tree-Prozedur wird mit dem aktualisierten Suchgraphen aus den Schritten 8 / 9 rekursiv aufgerufen. Auf diese Weise wird erneut der kostengünstigste Suchgraphknoten ausgewählt und das Beweisverfahren weiter vorangetrieben. Wenn die Suchgraphentwicklung im nächsten Schritt scheitert und Ø zurückliefert, wird über die repeat-Schleife Backtracking durchgeführt. Im Zuge des Backtrackings erfolgt entweder in Schritt 3 eine alternative Entwicklung des aktuellen Suchgraphknotens, oder der gesamte aktuelle Suchgraphknoten wird in Schritt 4 verworfen und die Beweisführung wird an den übergeordneten Aufrufer zurückverwiesen. 10 Positiver Ausgang des Beweisverfahrens. In diesem Fall ist ein leeres Fragemuster bewiesen worden und der zugehörige Suchgraphknoten wurde durch alle Rekursionsebenen über die erfüllte until-Bedingung “hindurchgereicht”. Beispiel. Als Beispiel dient wie in Kapitel 5.4.1 die Beantwortung des Fragemusters aus Abb. 40 mit Hilfe der Wissensbasis von Abb. 39. Zunächst wird in der Kernheuristik der anfängliche Suchgraph (SG) aufgebaut. In der folgenden Tabelle sind nur die Startknoten mit den wichtigsen Einträgen der zugehörigen Suchgraph-Knoten angegeben. Für die nicht aufgeführten Einträge gilt: Das restElement enthält für die Startknoten immer die Gesamtmenge aller Kanten abzüglich der Kanten aus der cont-Menge. Die Menge subst der Substitutionen ist zu Anfang leer und für den Fokus gilt immer focus = !F. Auf die Protokollierung der Vorgängerknoten im prev-Element wird in der folgenden Diskussion verzichtet, da sich die Graphentwicklung aus der Beschreibung ergibt. Da sich in dem Fragemuster sieben lexikalisierte Knoten befinden, startet der Suchgraph mit der entsprechenden Anzahl von Knoten: SG-Knoten (name) qn7 qn5 qn4 qn2 qn1 qn6 qn3 Bewertung Knotenkopf Fortsetzung (cost) (head) (cont) 14 Münze SUB(?v5, ”Münze”) 14 Gold SUB(?v6, ”Gold”) 14 Peter AGT(?v3, ”Peter”) 14 Bank SUB(?v2, ”Bank”) 14 Hagen *IN(?v1, ”Hagen”) 23 g *QUANT(?v7, !F, ”g”) 23 kaufen SUBS(?v3, ”kaufen”) Die Bewertung der ersten sechs Knoten ergibt sich aus der Summe der Anzahl der im Fragemuster noch unbewiesenen Kanten (13; die *QUANT-Funktion zählt einfach) und der Anzahl der Kanten, die die Konzeptknoten in der Wissensbasis besitzen (zufällig immer 1). Für die letzten beiden Suchbaum-Knoten existieren keine passenden Konzeptknoten in der Wissensbasis, wodurch sich die heuristische Bewertung 13 + Schätzwert 10 ergibt. Die Reihenfolge der Knoten mit gleicher Bewertung ist zufällig bzw. davon abhängig, in welcher Reihenfolge das Fragemuster aufgebaut wurde. Nach dem Aufbau des Suchgraphen startet die Entwicklung des ersten Knotens, wobei o.B.d.A. der oberste Knoten aus der Tabelle genommen wird. Die Fortsetzung “SUB(?v5, “Münze”) kann direkt aus der Wissensbasis abgeleitet werden und es entsteht ein neuer Suchbaumknoten: 167 U NTERST ÜTZUNG F ÜR F RAGEBEANTWORTUNG UND I NFERENZEN xn8 Forts. 16 c5 ORIGM(“c5”, ?v6), SUB(?v4, “c5”) SUB(?v6, ”Gold”), *QUANT(?v7, !F, ”g”), AGT(?v3, ”Peter”), Rest. SUBS(?v3, ”kaufen”), SUB(?v2, ”Bank”), *IN(?v1, ”Hagen”), QMOD(?v6, ?v7), OBJ(?v3, ?v4), AVRT(?v3, ?v2), LOC(?v2, ?v1) Subst. “c5”/?v5 !F Die Einträge in der ersten Tabellenzeile enthalten den SG-Knotennamen, die Bewertung, den Knotenkopf sowie ganz rechts den Fragefokus. Der neue Knoten xn8 kann zunächst nicht weiterentwickelt werden, da der Knotenkopf in der Wissensbasis eine größere Anzahl Kanten besitzt und dadurch eine schlechtere Bewertung erhält. Die Fragezentrierung wird mit der Entwicklung von qn5 fortgesetzt, wobei ebenfalls eine direkte Ableitung aus der Wissensbasis möglich ist. Als Resultat entsteht xn9: xn9 Forts. 16 c0 QMOD(“c0”, ?v7), ORIGM(?v5, “c0”) *QUANT(?v7, !F, ”g”), SUB(?v5, ”Münze”), AGT(?v3, ”Peter”), Rest. SUBS(?v3, ”kaufen”), SUB(?v2, ”Bank”), *IN(?v1, ”Hagen”), SUB(?v4, ?v5), OBJ(?v3, ?v4), AVRT(?v3, ?v2), LOC(?v2, ?v1) Subst. “c0”/?v6 !F Da auch xn9 keine minimale Bewertung erhält, wird als nächstes qn4 weiterentwickelt. Dazu muß der zugehörige Literaldeducer die Kante AGT(?v3, “Peter”) mit Hilfe von Axiom bax1 ableiten. Dies gelingt und führt zu dem Seiteneffekt, daß die folgenden Kanten aus der instantiierten Konklusion von bax1 dem Literal-Cache hinzugefügt werden: Aus bax1 abgeleitete Kanten, die dem Literal-Cache hinzugefügt werden: SUBS(“exq1”, ”kaufen”), AGT(“exq1”, ”Peter”) OBJ(“exq1”, “c28”), AVRT(“exq1”, “c22”) Bei der Neuberechnung der cont - und rest-Listen kann gleich noch das Grundliteral SUBS(“exq1”, ”kaufen”) eliminiert werden, so daß sich nachstehender Folgeknoten ergibt: xn10 Forts. 21 exq1 !F OBJ(“exq1”, ?v4), AVRT(“exq1”, ?v2) SUB(?v6, ”Gold”), *QUANT(?v7, !F, ”g”), SUB(?v5, ”Münze”), Rest. SUB(?v2, ”Bank”), *IN(?v1, ”Hagen”), QMOD(?v6, ?v7), ORIGM(?v5, ?v6), SUB(?v4, ?v5), LOC(?v2, ?v1) Subst. “exq1”/?v3 Als nächstes werden die Knoten qn2 und qn1 mit dem Knotenköpfen “Bank” bzw. “Hagen” entwickelt, wobei sich in beiden Fällen eine direkte Ableitung aus der Wissensbasis ergibt. 168 5.4 Fragebeantwortung xn11 Forts. 15 c22 !F AVRT(?v3, “c22”), LOC(“c22”, ?v1) SUB(?v6, ”Gold”), *QUANT(?v7, !F, ”g”), SUB(?v5, ”Münze”), Rest. AGT(?v3, ”Peter”), SUBS(?v3, ”kaufen”), *IN(?v1, ”Hagen”), QMOD(?v6, ?v7), ORIGM(?v5, ?v6), SUB(?v4, ?v5), OBJ(?v3, ?v4) Subst. “c22”/?v2 xn12 Forts. 14 c29 !F LOC(?v2, “c29”) SUB(?v6, ”Gold”), *QUANT(?v7, !F, ”g”), SUB(?v5, ”Münze”), AGT(?v3, ”Peter”), SUBS(?v3, ”kaufen”), SUB(?v2, ”Bank”), Rest. QMOD(?v6, ?v7), ORIGM(?v5, ?v6), SUB(?v4, ?v5), OBJ(?v3, ?v4), AVRT(?v3, ?v2) Subst. “c29”/?v1 Anschließend wird xn12 direkt (aufgrund seiner minimalen Bewertung) weiterentwickelt, wodurch der Knotenkopf c22 entsteht. c22 stellt damit ein Fragezentrum dar, da es bereits über xn11 erreicht worden ist. Der aus xn12 entwickelte Knoten wird mit xn11 kombiniert: xn14 Forts. 8 c22 * Fragezentrum * AVRT(?v3, “c22”) SUB(?v6, ”Gold”), *QUANT(?v7, !F, ”g”), SUB(?v5, ”Münze”), Rest. AGT(?v3, ”Peter”), SUBS(?v3, ”kaufen”), QMOD(?v6, ?v7), ORIGM(?v5, ?v6), SUB(?v4, ?v5), OBJ(?v3, ?v4) Subst. “c22”/?v2, “c29”/?v1 !F Aufgrund der um den fz-bonus vergünstigten Bewertung wird xn14 für den nächsten Entwicklungsschritt herangezogen. Die Kante AVRT(?v3, “c22”) kann mit Hilfe des LiteralCache abgeleitet werden und führt zu dem Netzknoten exq1, der bereits in xn10 erreicht worden ist. Damit stellt exq1 ebenfalls ein Fragezentrum dar und es ergibt sich nach Verschmelzung der Knoten und dem Beweis der Grundliterale AGT(“exq1”,”Peter”) und SUBS(“exq1”,”kaufen”): xn16 Forts. 12 exq1 * Fragezentrum * OBJ(“exq1”, ?v4) SUB(?v6, ”Gold”), *QUANT(?v7, !F, ”g”), SUB(?v5, ”Münze”), Rest. QMOD(?v6, ?v7), ORIGM(?v5, ?v6), SUB(?v4, ?v5) Subst. “exq1”/?v3, “c22”/?v2, “c29”/?v1 !F Aufgrund des Fragezentrum-Bonus wird der Beweis in der eingeschlagenen Richtung fortgesetzt und xn16 über die Kante OBJ(“exq1”,?v4) entwickelt, die ebenfalls bereits im Literal-Cache bereitsteht. Dies führt zu Knoten xn17: xn17 Forts. 8 c28 SUB(“c28”, ?v5) SUB(?v6, ”Gold”), *QUANT(?v7, !F, ”g”), SUB(?v5, ”Münze”), Rest. QMOD(?v6, ?v7), ORIGM(?v5, ?v6) Subst. “c28”/?v4, “exq1”/?v3, “c22”/?v2, “c29”/?v1 !F 169 U NTERST ÜTZUNG F ÜR F RAGEBEANTWORTUNG UND I NFERENZEN Die Entwicklung des Knotens xn17 erreicht ein weiteres Fragezentrum mit Netzknoten c5 und ergibt unter Einbeziehung der Resultate aus Knoten xn5 den nachstehenden Folgeknoten: xn19 Forts. Rest. Subst. 3 c5 * Fragezentrum * ORIGM(“c5”, ?v6) SUB(?v6, ”Gold”), *QUANT(?v7, !F, ”g”), QMOD(?v6, ?v7), “c5”/?v5, “c28”/?v4, “exq1”/?v3, “c22”/?v2, “c29”/?v1 !F Durch die Weiterentwicklung von xn19 ergibt sich eine analoge Situation mit dem neuen Fragezentrum c0 und der Verschmelzung mit Knoten xn9: xn21 Forts. Rest. Subst. 1 c0 * Fragezentrum * QMOD(“c0”, ?v7) *QUANT(?v7, !F, ”g”) “c0”/?v6, “c5”/?v5, “c28”/?v4, “exq1”/?v3, “c22”/?v2, “c29”/?v1 !F Nach der Fortsetzung des Beweises bei xn21 ist nur noch eine Kante im Fragemuster enthalten: xn22 3 c2 !F Forts. *QUANT(“c2”, !F, ”g”) Rest. Ø “c2”/?v7, “c0”/?v6, “c5”/?v5, “c28”/?v4, “exq1”/?v3, “c22”/?v2, Subst. “c29”/?v1 Die verbleibende Kante wird durch den zuständigen Literaldeducer mit Hilfe von Axiom bax3 bewiesen. Es ergibt sich der folgende Lösungsknoten: solution Forts. Rest. Subst. 0 Ø * Lösungsknoten * Ø Ø “31.04”/!F, “c2”/?v7, “c0”/?v6, “c5”/?v5, “c28”/?v4, “exq1”/?v3, “c22”/?v2, “c29”/?v1 31.04 Der Zeitpunkt der Substitution des Fragefokus im letzten Beweisschritt liegt in der Konstruktion des Beispiels begründet und hätte bei einer anderen Beweisreihenfolge auch schon zu einem früheren Zeitpunkt geschehen können. Mit dem Erreichen des leeren Fragemusters und des Antwortkerns “31.04” ist die Fragebeantwortung abgeschlossen. 170 5.4 Fragebeantwortung Unterschiede zum originalen Fragezentrierungs-Verfahren. Das hier vorgestellte Verfahren versucht das Originalverfahren nach [Hel77] möglichst genau mit den in dieser Arbeit entwickelten Inferenzmethoden zu realisieren. Es gibt jedoch bei der Behandlung von Axiomen einen Unterschied zwischen den beiden Versionen. In der Originalversion des Verfahrens wird die Behandlung von Axiomen von dem direkten Ableiten von Literalen abgetrennt. Es wird dort zunächst versucht, ein Literal aus dem Fragemuster direkt aus der Wissensbasis abzuleiten. Wenn dies gelingt, wird das Literal aus dem Fragemuster gestrichen. Gelingt die direkte Ableitung jedoch nicht, und wird stattdessen ein passendes Axiom gefunden, so wird das Fragemuster selbst modifiziert. Alle Literale des Fragemusters, die in der Konklusion eines passenden Axioms enthalten sind, werden dazu aus dem Fragemuster entfernt und stattdessen die Literale der AxiomPrämisse in das Fragemuster eingefügt. Die hier vorliegende Version der Fragezentrierung verwendet stattdessen eine einheitliche Behandlung der Ableitung von Literalen, da das betreffende Literaldeducer-Objekt automatisch entscheidet, ob ein Literal direkt aus der Wissensbasis abgeleitet wird oder indirekt mit Hilfe eines Axioms abgeleitet werden kann. Unabhängig vom Beweisweg werden abgeleitete Literale aus dem Fragemuster entfernt, und es werden keine anderen Modifikationen oder Hinzufügungen an dem Fragemuster vorgenommen. Falls mehrere Literale des Fragemusters aus einer mehrstelligen Konklusion ableitbar sind, werden diese Literale nach der ersten Anwendung des Axioms durch wiederholten Rückgriff auf den Literal-Cache abgeleitet, also in der nachfolgenden Entwicklung schrittweise, aber ohne erneute Instantiierung des Axioms entfernt. Beispiel. Der Unterschied tritt im vorhergehenden Beispiel bei der Entwicklung von qn4 mit Hilfe von bax1 ein: bax1: SUBS(H, “verkaufen”) ∧ AGT(H,N) ∧ OBJ(H,O) ∧ ORNT(H,Z) → (ex SKH) SUBS(SKH, “kaufen”) ∧ (AGT SKH Z) ∧ (OBJ SKH O) ∧ (AVRT SKH N) qn4 Forts. 14 Peter !F AGT(?v3, ”Peter”) SUB(?v6, ”Gold”), *QUANT(?v7, !F, ”g”), SUB(?v5, ”Münze”), SUBS(?v3, ”kaufen”), SUB(?v2, ”Bank”), *IN(?v1, ”Hagen”), Rest. QMOD(?v6, ?v7), ORIGM(?v5, ?v6), SUB(?v4, ?v5), OBJ(?v3, ?v4), AVRT(?v3, ?v2), LOC(?v2, ?v1) Subst. Ø Im Original-Verfahren müssen zunächst die passenden Substitutionen für die Konklusion gefunden werden; diese sind { ?v3/SKH, “Peter”/Z, ?v4/O, ?v2/N }. Danach werden folgende Literale aus dem Fragemuster entfernt: SUBS(?v3, ”kaufen”), AGT(?v3, ”Peter”), OBJ(?v3, ?v4), AVRT(?v3, ?v2) Anschließend werden aus der Prämisse von bax1 die folgenden Literale hinzugefügt: SUBS(H, “verkaufen”), AGT(H, ?v2), OBJ(H, ?v4), ORNT(H, Peter). 171 U NTERST ÜTZUNG F ÜR F RAGEBEANTWORTUNG UND I NFERENZEN Damit man von dem bisherigen Knotenkopf “Peter” einen Schritt weiter kommt und nicht nur Literale austauscht, wird man den Beweis zumindest eine Netzkante vorantreiben wollen und “c19”/H substituieren. Damit können bereits zwei Grundliterale eliminiert werden und der Folgeknoten lautet danach: xn10 Forts. 21 c19 * Folgeknoten nach Original-Verfahren * !F AGT(“c19”,?v2), OBJ(“c19”,?v4) SUB(?v6, ”Gold”), *QUANT(?v7, !F, ”g”), SUB(?v5, ”Münze”), Rest. SUB(?v2, ”Bank”), *IN(?v1, ”Hagen”), QMOD(?v6, ?v7), ORIGM(?v5, ?v6), SUB(?v4, ?v5), LOC(?v2, ?v1) Subst. Ø Der Folgeknoten zu qn4 aus dem hier dargestellten Verfahren und Lösungsweg ergibt sich hingegen als: xn10 Forts. 21 exq1 * Folgeknoten nach vorgestelltem Verfahren * !F OBJ(“exq1”, ?v4), AVRT(“exq1”, ?v2) SUB(?v6, ”Gold”), *QUANT(?v7, !F, ”g”), SUB(?v5, ”Münze”), Rest. SUB(?v2, ”Bank”), *IN(?v1, ”Hagen”), QMOD(?v6, ?v7), ORIGM(?v5, ?v6), SUB(?v4, ?v5), LOC(?v2, ?v1) Subst. “exq1”/?v3 Dabei ist bei dem hier vorgestellten Verfahren zu berücksichtigen, daß u.a. die Literale OBJ(“exq1”, “c28”) und AVRT(“exq1”, “c22”) jetzt bereits im Literal-Cache stehen. Insgesamt können die beiden Verfahren so charakterisiert werden, daß das Original-Verfahren die Konklusion des Axioms sofort in den Beweisprozeß integriert und die Ableitung der Prämisse auf später verschiebt, während das hier vorgestellte Verfahren nach Prüfung der generellen Eignung des Axioms zuerst die Prämisse instantiiert und die Integration der Ergebnisse aus der Konklusion auf die nachfolgenden Schritte verteilt. Demnach bestehen die Unterschiede zwischen den beiden Verfahren im Aufbau der Fortsetzungsliste. Im Original-Verfahren enthält die Fortsetzungsliste aus dem obigen Beispiel den Teil der Prämisse von bax1, der noch abzuleiten ist, während die Fortsetzungliste des hier vorgestellten Verfahrens den Teil der bereits instantiierten Konklusion von bax1 darstellt, der noch in den Beweisprozeß zu integrieren ist (über direkte Ableitung mit Hilfe des Literal-Cache). Würde man die komplette Abarbeitung aller Literale eines Axioms vor der Generierung bzw. Betrachtung des nächsten Folgeknotens fordern, so lieferten beide Verfahren in dem obigen Beispiel sogar einen identischen Folgeknoten. Letztendlich verhalten sich beide Verfahren symmetrisch und sind in diesem Punkt von der Laufzeitkomplexität her gesehen vergleichbar. Der Austausch von Literalen verursacht jedoch einen erheblichen programmtechnischen Aufwand in dem Original-Algorithmus, da er ein neues Matchingproblem “Fragemuster gegen Konklusion” einführt. Die Struktur der Kernheuristik würde bezüglich des Backtrackings im Original-Verfahren ebenfalls deutlich komplexer werden, da beim Backtracking ein weiteres “offenes Ende” berücksichtigt werden müßte, nämlich das Rückgängigmachen der Literalersetzungen, wenn sich die Anwendung eines Axioms als beweistechnische Sackgasse erwiesen hat. 172 5.4 Fragebeantwortung Das hier vorgestellte Verfahren kommt hingegen mit einer einfachen rekursiven Aufrufstruktur in der Kernheuristik aus, da sich das Fragemuster nur stackartig ändert. Bewiesene Literale werden aus dem Fragemuster entfernt und können später, sollte sich der Beweiszweig als Sackgasse erweisen, wieder dem Stack hinzugefügt werden. Das sequentielle Einarbeiten der Konklusionen von Axiomen in den Beweisprozeß ergibt gegenüber dem “parallelen” Austauschen von Literalen des Original-Verfahrens keine Performanznachteile, da es sich mit Hilfe des Literal-Caches mit konstantem Mehraufwand realisieren läßt. Da sich auf diese Weise zudem der Funktionsumfang und die objektorientierte Struktur des Netzdeducer-Systems besser ausnutzen läßt, wurde in MWR gemäß Ockhams Rasiermesser mit der hier vorgestellten Methode die programmtechnisch einfachere Version realisiert. Bewertung der Fragebeantwortungs-Verfahren. Eine abschließende Bewertung der hier vorgestellten Verfahren, der Fragebeantwortung über den Netzdeducer und mit Hilfe der Fragezentrierung, ist schwierig, da noch keine genügend großen Wissensbasen und standardisierte Kataloge von Referenz-Anfragen existieren. Während die in den Beispielen genannten Fragemuster als durchaus typisch anzusehen sind, ist für das Hintergrundwissen eines FAS ein semantisches Netz mit tausenden von Knoten und einer entsprechenden Anzahl von Kanten als realistisch anzusehen. Derartige Netze liegen um ein bis zwei Größenordnungen über den hier verwendeten Beispielnetzen und werden erst verfügbar sein, wenn weitere Methoden zur automatischen Assimilation großer Wissensbasen zur Verfügung stehen und entsprechend umfangreiche quantitative Arbeiten zur Erzeugung einer großen Wissensbasis durchgeführt worden sind. Es lassen sich jedoch Abschätzungen treffen, indem die hier vorgestellten Verfahren mit einem naiven Beweisverfahren verglichen werden, das mit einer Brute-Force-Methode alle Literale des Fragemusters gegen alle möglichen Literale der Wissensbasis matcht, bis ein leeres Fragemuster erzeugt worden ist. Gegenüber dem Brute-Force-Verfahren sind beide vorgestellten Methoden klar im Vorteil, was insbesondere auf die ursprünglich aus der Fragezentrierung stammende Startheuristik zurückzuführen ist, mit der die Objektzentriertheit von M ULTI N ET ausgenutzt wird. Dadurch, daß sich die Beweisverfahren zu Anfang auf Literale mit lexikalisierten Knoten aus dem Fragemuster konzentrieren, wird der Weg der Beweisverfahren verstärkt durch die Struktur des Fragemusters und nicht durch die Komplexität des Hintergrundwissens gesteuert. Durch den Start mit lexikalisierten Knoten werden gegenüber dem Brute-Force-Verfahren bereits zu Beginn des Ableitungsprozesses die Wahlmöglichkeiten eingeschränkt und damit die Restlaufzeit verringert. Insgesamt kann sich aber im worstcase auch für die heuristisch verbesserten Verfahren eine exponentielle Laufzeit ergeben, die allerdings empirisch selten beobachtet wird. Für den Nutzen der Navigation innerhalb des Fragemusters kann abschließend keine Aussage gemacht werden, da die vorhandenen Wissensbasen zu klein sind. Während die Fragebeantwortung über den Teilnetzdeducer das Fragemuster mit einer Tiefensuche abarbeitet, versucht die Fragezentrierung, die Auswahl der als nächstes zu beweisenden Literale heuristisch weiter zu optimieren und damit das Beweisziel noch schneller zu erreichen. Bei den vorliegenden kleinen Netzen bedeutet die Verwaltung des Suchgraphen und das Berechnen der Suchgraphknoten allerdings einen spürbaren Mehraufwand, der die Ant173 U NTERST ÜTZUNG F ÜR F RAGEBEANTWORTUNG UND I NFERENZEN wortzeit der Fragezentrierung auf das ca. 1,5 bis 3 fache der Fragebeantwortung durch den Netzdeducer erhöht. Es ist aber zu erwarten, daß dieser Faktor bei größeren Netzen in den Hintergrund tritt. Insgesamt verhalten sich beide Verfahren sehr effizient, solange große Teile des Fragemusters direkt aus der Wissensbasis abgeleitet werden können. Ein wichtiges Problem, das bisher von keinem der beiden Verfahren angegangen wird, ist die heuristische Auswahl von Axiomen sowie gegebenenfalls eine Begrenzung der Rekursionstiefe z.B. bei Transitivitätsaxiomen. Die Laufzeit beider Verfahren wächst stark mit der Anzahl der nicht direkt ableitbaren Kanten und der Menge der zur Verfügung stehenden Axiome. Insbesondere bei nicht direkt ableitbaren Kanten, die potentiell in sehr vielen Konklusionen von Axiomen auftreten (z.B. SUB-, PARS-Kanten) kann bereits mit 3-5 axiomatisch abzuleitenden Kanten und bei 20-30 passenden Axiomen eine kombinatorische Explosion erreicht werden, die beide Verfahren nicht mehr praktikabel macht. Als Ausweg bietet sich eine Begrenzung der Rekursionstiefe bei Axiomen auf Werte von 2 oder 3 an, da in der Praxis bisher keine tieferen Schachtelungen von Axiomen beobachtet worden sind. Zusätzlich müssen Heuristiken gefunden werden, um aus der Menge der potentiell anwendbaren Axiome das vielversprechendste auszuwählen. Ein Ansatzpunkt kann z.B. darin bestehen, B-Axiome bevorzugt einzusetzen, da sie weniger Variablen enthalten und dadurch den Hypothesenraum weniger stark erweitern. In diesem Kontext bieten die vorgestellten Methoden Ansatzpunkte für weiterführende Arbeiten. 174