Inferansemotor - Inference engine
Innen kunstig intelligens er en slutningsmotor en komponent i systemet som bruker logiske regler for kunnskapsbasen for å utlede ny informasjon. De første slutningsmotorene var komponenter i ekspertsystemer . Det typiske ekspertsystemet besto av en kunnskapsbase og en slutningsmotor. Kunnskapsbasen lagret fakta om verden. Inferansemotoren bruker logiske regler på kunnskapsgrunnlaget og utledet ny kunnskap. Denne prosessen ville gjentas ettersom hvert nytt faktum i kunnskapsbasen kunne utløse flere regler i inferensmotoren. Inferansemotorer fungerer hovedsakelig i en av to moduser, enten spesialregel eller fakta: kjetting forover og bakover . Forward chaining starter med de kjente fakta og hevder nye fakta. Baklengs kjetting starter med mål, og jobber bakover for å finne ut hvilke fakta som må hevdes slik at målene kan nås.
Arkitektur
Logikken som en slutningsmotor bruker, er vanligvis representert som IF-THEN-regler. Det generelle formatet for slike regler er HVIS <logisk uttrykk> SÅ <logisk uttrykk>. Før utviklingen av ekspertsystemer og slutningsmotorer fokuserte forskere på kunstig intelligens på kraftigere teorem-bevismiljøer som tilbød mye fyldigere implementeringer av første ordens logikk . For eksempel generelle utsagn som inkluderte universell kvantifisering (for alle X er noen utsagn sanne) og eksistensiell kvantifisering (det finnes noen X slik at noen påstander er sanne). Det forskerne oppdaget er at kraften i disse teorembevisende miljøene også var deres ulempe. Tilbake i 1965 var det altfor lett å lage logiske uttrykk som kunne ta en ubestemt eller til og med uendelig tid å avslutte. For eksempel er det vanlig i universell kvantifisering å komme med uttalelser over et uendelig sett, for eksempel mengden av alle naturlige tall. Slike utsagn er helt rimelige og til og med påkrevd i matematiske bevis, men når de er inkludert i en automatisk teoremprover som kjøres på en datamaskin, kan det føre til at datamaskinen faller i en uendelig sløyfe. Fokus på IF-THEN-utsagn (det logikere kaller modus ponens ) ga fremdeles utviklere en veldig kraftig generell mekanisme for å representere logikk, men en som kan brukes effektivt med beregningsressurser. Dessuten er det en del psykologisk forskning som indikerer at mennesker også har en tendens til å favorisere HVIS-DA-representasjoner når de lagrer kompleks kunnskap.
Et enkelt eksempel på modus ponens som ofte brukes i innledende logikkbøker er "Hvis du er et menneske, er du dødelig". Dette kan representeres i pseudokode som:
Rule1: Human(x) => Mortal(x)
Et trivielt eksempel på hvordan denne regelen ville bli brukt i en slutningsmotor er som følger. Ved fremoverkjetting ville slutningsmotoren finne noen fakta i kunnskapsbasen som matchet Human (x), og for hvert faktum den fant, ville den legge til den nye informasjonen Mortal (x) til kunnskapsbasen. Så hvis den fant et objekt kalt Sokrates som var menneskelig, ville det utlede at Sokrates var dødelig. I tilbakekjetting vil systemet få et mål, f.eks. Svar på spørsmålet er Sokrates dødelig? Den ville søke gjennom kunnskapsgrunnlaget og avgjøre om Sokrates var menneske, og i så fall påstå at han også er dødelig. Imidlertid var en vanlig teknikk for baklengs kjetting å integrere slutningsmotoren med et brukergrensesnitt. På den måten kan systemet nå være interaktivt i stedet for bare å bli automatisert. I dette trivielle eksemplet, hvis systemet fikk målet om å svare på spørsmålet om Sokrates var dødelig og det ennå ikke visste om han var menneske, ville det generere et vindu for å stille brukeren spørsmålet "Er Sokrates menneskelig?" og ville deretter bruke denne informasjonen deretter.
Denne innovasjonen med å integrere slutningsmotoren med et brukergrensesnitt førte til den andre tidlige utviklingen av ekspertsystemer: forklaringsmuligheter. Den eksplisitte representasjonen av kunnskap som regler i stedet for kode gjorde det mulig å generere forklaringer til brukerne: både forklaringer i sanntid og etter det faktum. Så hvis systemet spurte brukeren "Er Sokrates menneskelig?", Kan brukeren lure på hvorfor hun ble stilt det spørsmålet, og systemet ville bruke regelkjeden for å forklare hvorfor det for øyeblikket prøvde å fastslå den kunnskapen: det er , må den avgjøre om Sokrates er dødelig, og for å gjøre det må den avgjøre om han er menneskelig. Først var disse forklaringene ikke mye annerledes enn standard feilsøkingsinformasjon som utviklere håndterer når de feilsøker ethvert system. Imidlertid var et aktivt forskningsområde å bruke naturspråksteknologi for å stille, forstå og generere spørsmål og forklaringer ved hjelp av naturlige språk i stedet for datamaskinformalisme.
En slutningsmotor går gjennom tre sekvensielle trinn: match regler , velg regler og utfør regler . Gjennomføringen av reglene vil ofte føre til at nye fakta eller mål blir lagt til i kunnskapsbasen som vil få syklusen til å gjenta seg. Denne syklusen fortsetter til ingen nye regler kan matches.
I det første trinnet, matchingsregler, finner slutningsmotoren alle reglene som utløses av det nåværende innholdet i kunnskapsbasen. Ved fremoverkjetting ser motoren etter regler der forløpet (venstre side) matcher noen fakta i kunnskapsgrunnlaget. Ved baklengs kjetting ser motoren etter antecedents som kan tilfredsstille et av de nåværende målene.
I det andre trinnet velg regler, prioriterer slutningsmotoren de forskjellige reglene som ble matchet for å bestemme rekkefølgen for å utføre dem. I det siste trinnet, utfør regler, utfører motoren hver matchede regel i rekkefølgen bestemt i trinn to og går deretter tilbake til trinn én igjen. Syklusen fortsetter til ingen nye regler samsvarer.
Implementeringer
Tidlige inferensmotorer fokuserte først og fremst på fremoverkjetting. Disse systemene ble vanligvis implementert på programmeringsspråket Lisp . Lisp var en hyppig plattform for tidlig AI -forskning på grunn av sin sterke evne til å utføre symbolsk manipulasjon. Som et tolket språk tilbød det også produktive utviklingsmiljøer som passer for feilsøking av komplekse programmer. En nødvendig følge av disse fordelene er at Lisp programmer tendens til å bli langsommere og mindre robust enn kompilerte språk i tid, slik som C . En vanlig tilnærming i disse tidlige dagene var å ta en ekspert systemapplikasjon og pakke om slutningsmotoren som ble brukt til systemet som et gjenbrukbart verktøy andre forskere kunne bruke for utvikling av andre ekspertsystemer. For eksempel var MYCIN et tidlig ekspertsystem for medisinsk diagnose, og EMYCIN var en slutningsmotor som ble ekstrapolert fra MYCIN og gjort tilgjengelig for andre forskere.
Etter hvert som ekspertsystemer flyttet fra forskningsprototyper til distribuerte systemer, var det mer fokus på spørsmål som hastighet og robusthet. En av de første og mest populære fremdrevne motorene var OPS5 som brukte Rete -algoritmen for å optimalisere effektiviteten ved regelutfyring . En annen veldig populær teknologi som ble utviklet var programmeringsspråket Prolog logic. Prolog fokuserte først og fremst på bakoverkobling og inneholdt også forskjellige kommersielle versjoner og optimaliseringer for effektivitet og robusthet.
Ettersom Expert Systems vekket betydelig interesse fra ulike virksomheter i næringslivet, startet mange eller ledet av fremtredende AI -forskere produktiserte versjoner av slutningsmotorer. For eksempel ble Intellicorp opprinnelig guidet av Edward Feigenbaum . Disse inferensmotorproduktene ble også ofte utviklet i Lisp først. Kravene til rimeligere og kommersielt levedyktige plattformer gjorde imidlertid PC -plattformer til slutt veldig populære.
Se også
- Geometrisk og topologisk slutning
- Handlingsvalgmekanisme
- Baklengs kjetting
- Ekspert system
- Foroverkjetting
- Induktiv slutning