Wissensingenieure werden nur für komplexe Systeme benötigt, denn:

Shells unterstützen Do-it-yourself-Programme

16.10.1987

Es geht auch ohne Knowledge-Engineer: Benutzerfreundliche Expertensystem-Shells sollten den End-user in die Lage versetzen, die benötigte Wissensbasis selbst zu erstellen. Thomas Pinegger* beschreibt anhand eines Beispiels die Entwicklung eines solchen Systems von der Problemstellung bis hin zum kompletten Expertensystem.

Die Knowledge-Engineers gehen am. Allenthalben findet man sie auf Visitenkarten, in Mitarbeiterlisten, Unternehmensbeschreibungen, Seminar- und Workshop-Ankündigungen. Die Frage ist, was Wissensingenieure, die Zeremonienmeister des Knowledge Engineerings, leisten. Ferner geht es darum, ob zum Programmieren der Expertensystem-Anwendungen eine Spezialausbildung erforderlich ist und ob Knowledge Engineering einen Vorteil gegenüber herkömmlicher Programmentwicklung bringt.

Als Knowledge-Engineering bezeichnet man das Umsetzen von Expertenwissen in wissensbasierte Systeme. Ein Wissensingenieur soll das Wissen menschlicher Spezialisten auf formalisierte Weise darstellen und es damit für wissensbasierte Systeme verfügbar machen. Dazu muß er die Handhabung von Entwicklungswerkzeugen, den "Shells, beherrschen.

Typische Beispiele für wissensbasierte Anwendungen sind: Diagnose in Technik und Medizin, Beratung für juristische und Strukturprobleme oder die Konfigurierung technischer Systeme sowie Wissensvermittlung in Form von Manuals oder zu Trainingszwecken. Prinzipiell soll ein Wissensingenieur zu einer gegebenen Problemstellung den dazugehörigen Problemkreis analysieren und für die DV-Beratung vorbereiten. Die Entwicklung größerer wissensbasierter Anwendungen stützt sich auf das Ist-/Sollkonzept des zu erschließenden Bereichs.

Prototyping fungiert als wichtiges Hilfsmittel

Zu den grundlegenden Techniken des Knowledge-Engineering beim Entwickeln einer wissensbasierten Anwendung gehört das Prototyping. Entsprechende Werkzeuge erlauben es dem Entwickler, innerhalb kurzer Zeit zu einem vorführbaren Programm, also einer Wissensbasis, zu gelangen.

Das Konzept des Prototyping sei am Beispiel des Expertensystems "Flensburger Bußgeld-Katalogs" dargestellt: Ziel dieser Anwendung ist es, ein Expertensystem zu schaffen, das einen juristischen Laien bei Verstößen im Bereich Straßenverkehr berät. Der Benutzer beschreibt einen "Standard"-Verstoß, wie etwa das Überschreiten der zulässigen Höchstgeschwindigkeit oder falsches Parken. Das System informiert ihn über die Folgen (Bußgeld, Punkte) die ihm ins Haus stehen.

Begonnen wird das konkrete Vorgehen im Bereich Geschwindigkeitsübertretung. Bei einem Prototyp handelt es sich nicht um einen unvollständigen Rumpf ohne Aussage, sondern er deckt bereits die Hälfte aller Fälle im Bereich Geschwindigkeitsübertretung ab. Dabei arbeitet er mit Bildschirmmasken und Formularen. Die Shell generiert automatisch Auswahlmenüs und Texte für Fragen an den Benutzer.

Der Wissenserwerb gestaltet sich in der Anfangsphase sehr einfach. Die erste Quelle für das Wissen ist eine Tabelle der örtlichen Bußgeldstelle, die zum Beispiel Punkte und Bußgelder zu den Geschwindigkeiten in Beziehung setzt. Die meisten praktischen Anwendungen werden so begonnen: Das Wissen liegt in schriftlicher Form vor, oder der Entwickler ist selbst der Experte, dessen Kenntnisse in die Anwendung eingebracht werden. Die Eingabe des Wissens erfordert im allgemeinen noch keinen Wissensingenieur. Mit gut lesbaren Regeln und bequemer Benutzeroberfläche ist es auch Nicht-Datenverarbeitern möglich, Wissen in Regelform allgemein verständlich zu formulieren. Ein Nicht-Datenverarbeiter kann selbst einen Prototyp beginnen und ihn danach mit einem Spezialisten vervollständigen.

Solch ein Prototyp erleichtert die Entwicklung, denn damit haben Ersteller, Benutzer und Experte eine verständliche Grundlage. Die weitere Arbeit und Änderungswünsche können bei Vorführungen des Prototyps konkret beschrieben werden; kleinere Änderungen werden sofort eingegeben und erprobt.

Insgesamt ergibt diese Rückkopplung einen zyklischen Prozeß: Der Wissensingenieur bringt Expertenwissen in das System ein. Dann wird ein Prototyp erstellt oder der vorhandene erweitert. Daran schließt sich ein Test durch den Benutzer und /oder durch den Experten an (Siehe Abbildung 1). Der Benutzer und der Experte äußern Änderungs- und Erweiterungsvorschläge. Die Vorschläge berücksicht der Entwickler in der nächsten Ausbaustufe. Damit erfaßt der Zyklus "Wissenserwerb > Prototyp > Test" immer größere Bereiche des Wissens.

Die Vorteile dieses Vorgehens liegen auf der Hand: Durch die häufige Rückkopplung werden frühzeitig Fehler in der Konzeption der Anwendung erkannt. Sie können vermieden werden, bevor teure Korrekturen erforderlich werden. Die Qualität der entwickelten Software erhöht sich auf diese Weise beträchtlich. Das Einbeziehen des wirklichen End-Benutzers erlaubt es, das System auf dessen tatsächliche Bedürfnisse abzustellen. Außerdem arbeiten die User lieber mit Systemen, an deren Entwicklung sie selbst mitgearbeitet haben.

Kleine Wissenskerne dienen als Basis der Entwicklung

Das Prototyping ist die typische Form des Entwickelns für wissensbasierte Systeme. Expertensysteme wachsen aus kleinen Wissenskernen heraus. So auch der "Bußgeld-Katalog'': Nach der ersten Testphase werden die restlichen Fälle des Bereichs Geschwindigkeitsübertretung hinzugefügt .

Anfangs werden pro Eintrag in die Wissensbasis etwa fünf Minuten benötigt Eingetragen wird ein Fakt, eine Regel oder ein Ermittlungsziel. In einer herkömmlichen Programmiersprache ist ein Prototyp im allgemeinen nicht so leicht und schnell zu entwickeln.

Nachdem der Bereich Geschwindigkeitsübertretung vollständig erfaßt ist, wird der Bereich Vorfahrt/ Ampel angegangen. Nach ungefähr einer Woche Entwicklungsarbeit steigt die Entwicklungszeit pro Eintrag auf ein Maximum von zirka 40 Minuten an. In dieser Phase wird das Expertensystem aufgrund der zunehmenden Regelanzahl schwer durchschaubar.

Es zeigt sich, daß wiederholt Rechtschreibfehler auftreten, da sich der Entwickler nicht an die exakte Schreibweise von Variablen oder Werten erinnert. Diesem Problem begegnen herkömmliche, auf Übersetzer basierende Programmiersprachen durch den Zwang, jede Variable zu deklamieren. Eleganter ist die Lösung durch die Verwendung eines Wissensbasisprüfers (Checkers). Der Checker erzeugt für Variable und Werte eine Querverweisliste. Dieser Liste kann leicht entnommen werden, wie die einzelnen Variablen und ihre zugehörigen Werte geschrieben werden.

Ein weiteres Problem ist das mögliche Fehlen konkreter Regeln für einige noch offene Fälle. Auch hier bietet der Checker Unterstützung an: Er kann überprüfen, auf welchen Wegen einer Variablen Werte zugewiesen werden oder ob eine Variable überhaupt einen Wert erhalten kann.

Die bisher aufgeführten Fragen können also mit Hilfe des Checkers gelöst werden. An dieser Stelle tritt jedoch meist das folgende aus der Software-Entwicklung bekannte Problem auf: Eine Strukturierung der Anwendung wird nötig. Im Falle des "Bußgeld-Katalogs" orientiert sich die Struktur an den vier Grundkomponenten des Bußgeldkatalogs: Geschwindigkeitsüberschreitung, Vorfahrt/Ampel, Halten/Parken und Alkohol.

Zur Behandlung besonders schwerer Verstöße ist darüber hinaus eine weitere Wissensbasis vorgesehen (StGB °315c). Außerdem werden zusätzliche Komponenten zur Unterstützung des Dialogs, zum Beispiel für die Benutzung, hinzugefügt. Jeder Baustein ist durch eine eigene Wissensbasis realisiert; diese Basen entsprechen von der Funktion und Größenordnung her etwa einem Modul oder Segment eines "konventionellen" Programms. Die Wissensbasen rufen sich gegenseitig auf und bewirken damit einen Wechsel von einem Wissensbereich in einen anderen. Sobald eine Anwendung vom Umfang her eine Strukturierung erforderlich macht, ist es sinnvoll, bei der Entwicklung Wissensingenieure einzusetzen.

Nachdem die Hürden überwunden sind, pendelt sich der Zeitbedarf pro Eintrag auf rund 20 Minuten. Bei der herkömmlichen Software-Entwicklung rechnet man in höheren Programmiersprachen mit einem Zeitbedarf von etwa 30 Minuten je Zeile. Eine Regel eines Expertensystems ist allerdings "mächtiger" als eine Zeile Programmcode, da sie sehr viel mehr Verarbeitung initiiert. Der Einsatz von Knowledge-Engineering beschleunigt also die Programmentwicklung und führt zu einer Produktivitätssteigerung. (Siehe hierzu Abbildung 2.)

Insgesamt war die Anwendung "Bußgeld-Katalog" nach vier Wochen abgeschlossen. Ihr Umfang beträgt 500 Einträge in 10 Wissensbasen sowie 130 Bildschirmseiten Ausgabetext für Fragen und Berichte. Der Wissenserwerb erfolgt nun nicht mehr nur aus Büchern, sondern auch durch telefonisches Befragen externer Experten. Wenn die verwendete Shell auf PCs des Industriestandards zur Verfügung steht, ist mit portablen Rechnern auch eine Eingabe des Wissens vor Ort, also beim Experten selber, möglich. Normalerweise ist für große Anwendungen die Befragung eines oder mehrerer Experten durch einen Wissensingenieur erforderlich .

Bestehende SW-Umwelt ist zu berücksichtigen

Neben dem Wissenserwerb ist die Integration einer wissensbasierten Anwendung in eine bestehende Software-Umwelt ein typisches Problem. Der Anwender wünscht sich einen Anschluß an bestehende Software wie etwa Spreadsheets, Datenbanken oder Grafik. Die verwendete Shell sollte also Schnittstellen zu allen diesen Programmen bieten. Damit ist der Weg frei für interessante Anwendungen auf den Gebieten intelligente Benutzeroberfläche und Integration.

Die eingangs gestellten Fragen lassen sich nun beantworten: Kleinere Anwendungen können mit benutzerfreundlichen Shells, die auf PCs laufen, auch ohne DV-Spezialisten entwickelt werden. Erst für größere Anwendungen werden Kenntnisse der Systementwicklung und des Knowledge-Engineering benötigt.