Motor d'inferència
En el camp de la intel·ligència artificial, un motor d'inferència és un component de programari d'un sistema intel·ligent que aplica regles lògiques a la base de coneixement per deduir nova informació. Els primers motors d'inferència eren components de sistemes experts. El sistema expert típic consistia en una base de coneixement i un motor d'inferència. La base de coneixement emmagatzemava fets sobre el món. El motor d'inferència va aplicar regles lògiques a la base de coneixement i va deduir nous coneixements. Aquest procés es repetiria ja que cada fet nou a la base de coneixement podria activar regles addicionals al motor d'inferència. Els motors d'inferència funcionen principalment en un dels dos modes, ja sigui regla especial o fets: encadenat cap endavant i encadenat cap enrere. L'encadenament cap endavant comença amb els fets coneguts i afirma fets nous. L'encadenament cap enrere comença amb els objectius i funciona cap enrere per determinar quins fets s'han d'afirmar perquè els objectius es puguin assolir.[1]
A més, el concepte d'"inferència" s'ha ampliat per incloure el procés mitjançant el qual les xarxes neuronals entrenades generen prediccions o decisions. En aquest context, un "motor d'inferència" podria referir-se a la part específica del sistema, o fins i tot el maquinari, que executa aquestes operacions. Aquest tipus d'inferència té un paper crucial en diverses aplicacions, incloent (però no limitada a) el reconeixement d'imatges, el processament del llenguatge natural i els vehicles autònoms. La fase d'inferència en aquestes aplicacions es caracteritza normalment per un gran volum d'entrades de dades i requisits de processament en temps real.
Arquitectura
[modifica]La lògica que utilitza un motor d'inferència es representa normalment com a regles IF-THEN. El format general d'aquestes regles és SI <expressió lògica> THEN <expressió lògica>. Abans del desenvolupament de sistemes experts i motors d'inferència, els investigadors d'intel·ligència artificial es van centrar en entorns de prova de teoremes més potents que oferien implementacions molt més completes de la lògica de primer ordre. Per exemple, enunciats generals que incloïen quantificació universal (per a totes les X alguna afirmació és certa) i quantificació existencial (existeix alguna X tal que alguna afirmació és certa). El que van descobrir els investigadors és que el poder d'aquests entorns que demostraven teoremes també era el seu inconvenient. L'any 1965, era massa fàcil crear expressions lògiques que poguessin trigar un temps indeterminat o fins i tot infinit a acabar. Per exemple, és comú en quantificació universal fer enunciats sobre un conjunt infinit com el conjunt de tots els nombres naturals. Aquestes afirmacions són perfectament raonables i fins i tot requerides en demostracions matemàtiques, però quan s'inclouen en un demostrador de teoremes automatitzat que s'executa en un ordinador pot fer que l'ordinador caigui en un bucle infinit. Centrar-se en les declaracions IF-THEN (el que els lògics anomenen modus ponens ) encara donava als desenvolupadors un mecanisme general molt potent per representar la lògica, però que es podia utilitzar de manera eficient amb recursos computacionals. A més, hi ha algunes investigacions psicològiques que indiquen que els humans també tendeixen a afavorir les representacions IF-THEN quan emmagatzemen coneixements complexos.[2]
Un exemple senzill de modus ponens que s'utilitza sovint als llibres d'introducció a la lògica és "Si ets humà, llavors ets mortal". Això es pot representar en pseudocodi com:
Regla 1: Humà (x) => Mortal (x)
Un exemple trivial de com s'utilitzaria aquesta regla en un motor d'inferència és el següent. En l'encadenament cap endavant, el motor d'inferència trobaria qualsevol fet a la base de coneixement que coincideixi amb Human(x) i per a cada fet que trobés afegiria la nova informació Mortal(x) a la base de coneixement. Així que si trobés un objecte anomenat Sòcrates que era humà, deduiria que Sòcrates era mortal. En l'encadenament cap enrere, el sistema tindria un objectiu, per exemple, respondre a la pregunta és Sòcrates mortal? Cercaria a través de la base de coneixement i determinaria si Sòcrates era humà i, si és així, afirmaria que també és mortal. Tanmateix, en l'encadenament cap enrere una tècnica comuna era integrar el motor d'inferència amb una interfície d'usuari. D'aquesta manera, en lloc d'estar simplement automatitzat, ara el sistema podria ser interactiu. En aquest exemple trivial, si el sistema tenia l'objectiu de respondre a la pregunta si Sòcrates era mortal i encara no sabia si era humà, generaria una finestra per fer a l'usuari la pregunta "Sòcrates és humà?" i després utilitzaria aquesta informació en conseqüència.
Aquesta innovació d'integrar el motor d'inferència amb una interfície d'usuari va conduir al segon avenç primerenc dels sistemes experts: les capacitats d'explicació. La representació explícita del coneixement com a regles més que com a codi va permetre generar explicacions als usuaris: tant explicacions en temps real com posteriors. Així, si el sistema demanava a l'usuari "Sòcrates és humà?", l'usuari podria preguntar-se per què se li feia aquesta pregunta i el sistema utilitzaria la cadena de regles per explicar per què actualment intentava determinar aquesta part de coneixement: això és, ha de determinar si Sòcrates és mortal i per fer-ho ha de determinar si és humà. Al principi, aquestes explicacions no eren gaire diferents de la informació de depuració estàndard amb què tracten els desenvolupadors quan depuren qualsevol sistema. No obstant això, una àrea activa d'investigació va ser la utilització de la tecnologia del llenguatge natural per fer, entendre i generar preguntes i explicacions utilitzant llenguatges naturals en lloc de formalismes informàtics.[3]
Un motor d'inferència passa per tres passos seqüencials: unir regles, seleccionar regles i executar regles. L'execució de les regles sovint donarà lloc a nous fets o objectius que s'afegeixin a la base de coneixement, cosa que provocarà que el cicle es repeteixi. Aquest cicle continua fins que no es poden trobar noves regles.
En el primer pas, match rules, el motor d'inferència troba totes les regles activades pel contingut actual de la base de coneixement. En l'encadenament cap endavant, el motor busca regles on l'antecedent (costat esquerre) coincideixi amb algun fet de la base de coneixement. En l'encadenament cap enrere, el motor busca antecedents que puguin satisfer un dels objectius actuals.
En el segon pas, seleccioneu regles, el motor d'inferència prioritza les diferents regles que es van fer coincidir per determinar l'ordre per executar-les. Al pas final, executa regles, el motor executa cada regla coincident en l'ordre determinat al pas dos i després torna al pas un de nou. El cicle continua fins que no es compleixen noves regles.
Implementacions
[modifica]Els primers motors d'inferència es van centrar principalment en l'encadenament cap endavant. Aquests sistemes s'implementaven normalment en el llenguatge de programació Lisp. Lisp era una plataforma freqüent per a les primeres investigacions en IA a causa de la seva forta capacitat per fer manipulació simbòlica. A més, com a llenguatge interpretat oferia entorns de desenvolupament productius adequats per a la depuració de programes complexos. Una conseqüència necessària d'aquests avantatges va ser que els programes Lisp acostumaven a ser més lents i menys robusts que els llenguatges compilats de l'època com el C. Un enfocament comú en aquests primers dies era prendre una aplicació de sistema expert i empaquetar el motor d'inferència utilitzat per a aquest sistema com una eina reutilitzable que altres investigadors podien utilitzar per al desenvolupament d'altres sistemes experts. Per exemple, MYCIN era un sistema expert primerenc per al diagnòstic mèdic i EMYCIN era un motor d'inferència extrapolat de MYCIN i posat a disposició d'altres investigadors.[4]
A mesura que els sistemes experts van passar dels prototips de recerca als sistemes desplegats, es va centrar més en qüestions com la velocitat i la robustesa. Un dels primers i més populars motors d'encadenament cap endavant va ser OPS5, que utilitzava l'algoritme Rete per optimitzar l'eficiència del disparament de regles. Una altra tecnologia molt popular que es va desenvolupar va ser el llenguatge de programació lògica Prolog. Prolog es va centrar principalment en l'encadenament cap enrere i també va incloure diverses versions comercials i optimitzacions per a l'eficiència i la robustesa.[5]
A mesura que els sistemes experts van despertar un interès important del món empresarial, diverses empreses, moltes d'elles van començar o guiades per destacats investigadors d'IA, van crear versions produïdes de motors d'inferència. Per exemple, Intellicorp va ser guiat inicialment per Edward Feigenbaum. Aquests productes de motor d'inferència també es van desenvolupar sovint a Lisp al principi. Tanmateix, les demandes de plataformes més assequibles i comercialment viables finalment van fer que les plataformes d'ordinadors personals fossin molt populars.
Referències
[modifica]- ↑ Hayes-Roth, Frederick. Building Expert Systems (en anglès). Addison-Wesley, 1983. ISBN 0-201-10686-8.
- ↑ Feigenbaum, Edward. The Handbook of Artificial Intelligence, Volume I (en anglès). Addison-Wesley, September 1, 1986, p. 195. ISBN 0201118114.
- ↑ Barzilayt, Regina; Daryl McCullough; Owen Rambow; Jonathan DeCristofaro; Tanya Korelsky USAF Rome Laboratory Report.
- ↑ Hayes-Roth, Frederick. Building Expert Systems (en anglès). Addison-Wesley, 1983. ISBN 0-201-10686-8.
- ↑ Sterling, Leon. The Art of Prolog (en anglès). Cambridge, MA: MIT, 1986. ISBN 0-262-19250-0.