Yapay zeka alanında, bir çıkarım motoru, yeni bilgiler çıkarmak için bilgi tabanına mantıksal kurallar uygulayan sistemin bir bileşenidir. İlk çıkarım motorları, uzman sistemlerin bileşenleriydi. Tipik uzman sistem, bir bilgi tabanı ve bir çıkarım motorundan oluşuyordu. Bilgi tabanı, dünya hakkında gerçekleri sakladı. Çıkarım motoru, mantıksal kuralları bilgi tabanına uygular ve yeni bilgiler çıkarır. Bilgi tabanındaki her yeni gerçek, çıkarım motorunda ek kuralları tetikleyebileceğinden, bu süreç yinelenecektir. Çıkarım motorları öncelikle iki moddan birinde çalışır: özel kural veya gerçekler: ileri zincirleme ve geriye doğru zincirleme. İleri zincirleme, bilinen gerçeklerle başlar ve yeni gerçekleri öne sürer. Geriye doğru zincirleme hedeflerle başlar ve hedeflere ulaşılabilmesi için hangi gerçeklerin ileri sürülmesi gerektiğini belirlemek için geriye doğru çalışır.[1]
Mimari
Bir çıkarım motorunun kullandığı mantık tipik olarak EĞER-O ZAMAN kuralları olarak temsil edilir. Bu tür kuralların genel formatı IF
Giriş mantığı kitaplarında sıklıkla kullanılan basit bir modus ponens örneği, “Eğer insansan, o zaman ölümlüsün” şeklindedir. Bu, sözde kodda şu şekilde temsil edilebilir:
Kural1: İnsan(x) => Ölümlü(x)
Bu kuralın bir çıkarım motorunda nasıl kullanılacağına dair önemsiz bir örnek aşağıdaki gibidir. İleri zincirlemede, çıkarım motoru, bilgi tabanında Human(x) ile eşleşen herhangi bir olguyu bulur ve bulduğu her olgu için yeni bilgi Mortal(x)’i bilgi tabanına ekler. Dolayısıyla, Sokrates adında insan olan bir nesne bulursa, Sokrates’in ölümlü olduğu sonucunu çıkarırdı. Geriye doğru zincirlemede, sisteme bir hedef verilir, örn. soruyu cevapla Sokrates ölümlü mü? Bilgi tabanını araştıracak ve Sokrates’in insan olup olmadığını belirleyecek ve eğer öyleyse onun da ölümlü olduğunu iddia edecektir. Bununla birlikte, geriye doğru zincirlemede ortak bir teknik, çıkarım motorunu bir kullanıcı arayüzü ile entegre etmekti. Bu şekilde, sistem artık basit bir şekilde otomatikleşmek yerine etkileşimli olabilir. Bu önemsiz örnekte, sisteme Sokrates’in ölümlü olup olmadığı sorusuna cevap verme hedefi verilmişse ve sistem henüz onun insan olup olmadığını bilmiyorsa, kullanıcıya “Sokrates insan mı?” ve daha sonra bu bilgiyi buna göre kullanırdı.
Çıkarım motorunu bir kullanıcı arabirimiyle entegre etme konusundaki bu yenilik, uzman sistemlerin ikinci erken gelişimine yol açtı: açıklama yetenekleri. Bilginin kod yerine kurallar olarak açık bir şekilde temsil edilmesi, kullanıcılara açıklamalar üretmeyi mümkün kıldı: hem gerçek zamanlı hem de olaydan sonra açıklamalar. Dolayısıyla, sistem kullanıcıya “Sokrates insan mı?” , Sokrates’in ölümlü olup olmadığını belirlemesi ve bunu yapmak için de insan olup olmadığını belirlemesi gerekir. İlk başta bu açıklamalar, geliştiricilerin herhangi bir sistemde hata ayıklarken uğraştığı standart hata ayıklama bilgilerinden pek farklı değildi. Bununla birlikte, aktif bir araştırma alanı, bilgisayar formalizmleri yerine doğal dilleri kullanarak sorular ve açıklamalar sormak, anlamak ve oluşturmak için doğal dil teknolojisini kullanmaktı.[3]
Bir çıkarım motoru birbirini takip eden üç adımdan geçer: kuralları eşleştirme, kuralları seçme ve kuralları yürütme. Kuralların uygulanması, genellikle bilgi tabanına eklenen yeni gerçekler veya hedefler ile sonuçlanacak ve bu da döngünün tekrarlanmasını tetikleyecektir. Bu döngü, hiçbir yeni kural eşleştirilemeyene kadar devam eder.
İlk adım olan eşleştirme kurallarında, çıkarım motoru, bilgi tabanının mevcut içeriği tarafından tetiklenen tüm kuralları bulur. İleri zincirlemede motor, öncülün (sol taraf) bilgi tabanındaki bazı gerçeklerle eşleştiği kuralları arar. Geriye doğru zincirlemede motor, mevcut hedeflerden birini tatmin edebilecek öncülleri arar.
İkinci adımda kuralların seçilmesinde, çıkarım motoru, bunların yürütülme sırasını belirlemek için eşleşen çeşitli kurallara öncelik verir. Son adımda, kuralları yürütün, motor eşleşen her kuralı ikinci adımda belirlenen sırayla yürütür ve ardından tekrar birinci adıma döner. Döngü, hiçbir yeni kural eşleşmeyene kadar devam eder.[4]
Uygulamalar
Erken çıkarım motorları, öncelikle ileri zincirlemeye odaklandı. Bu sistemler genellikle Lisp programlama dilinde uygulandı. Lisp, sembolik manipülasyon yapma konusundaki güçlü yeteneği nedeniyle erken AI araştırmaları için sık kullanılan bir platformdu. Ayrıca, yorumlanmış bir dil olarak, karmaşık programlarda hata ayıklamaya uygun verimli geliştirme ortamları sunuyordu. Bu faydaların gerekli bir sonucu, Lisp programlarının C gibi zamanın derlenmiş dillerinden daha yavaş ve daha az sağlam olma eğiliminde olmasıydı. Bu ilk günlerde yaygın bir yaklaşım, bir uzman sistem uygulamasını alıp o sistem için kullanılan çıkarım motorunu yeniden paketlemekti. diğer araştırmacıların diğer uzman sistemlerin geliştirilmesi için kullanabileceği yeniden kullanılabilir bir araç olarak. Örneğin, MYCIN, tıbbi teşhis için erken bir uzman sistemdi ve EMYCIN, MYCIN’den tahmin edilen ve diğer araştırmacıların kullanımına sunulan bir çıkarım motoruydu.[1]
Uzman sistemler, araştırma prototiplerinden dağıtılan sistemlere geçtikçe, hız ve sağlamlık gibi konulara daha fazla odaklanıldı. İlk ve en popüler ileri zincirleme motorlarından biri, kural ateşlemenin verimliliğini optimize etmek için Rete algoritmasını kullanan OPS5 idi. Geliştirilen bir diğer çok popüler teknoloji Prolog mantık programlama diliydi. Prolog, öncelikle geriye dönük zincirlemeye odaklandı ve ayrıca verimlilik ve sağlamlık için çeşitli ticari sürümler ve optimizasyonlar içeriyordu.[5]
Uzman Sistemler, iş dünyasından büyük ilgi gördüğünden, birçoğu önde gelen yapay zeka araştırmacıları tarafından başlatılan veya yönlendirilen çeşitli şirketler, çıkarım motorlarının ürünleştirilmiş sürümlerini oluşturdu. Örneğin, Intellicorp başlangıçta Edward Feigenbaum tarafından yönlendirildi. Bu çıkarım motoru ürünleri de ilk başta genellikle Lisp’te geliştirildi. Bununla birlikte, daha uygun fiyatlı ve ticari olarak uygun platformlara yönelik talepler, sonunda Kişisel Bilgisayar platformlarını çok popüler hale getirdi.
Açık kaynak uygulamaları
ClipsRules ve RefPerSys (CAIA [6] ve Jacques Pitrat’ın çalışmasından esinlenilmiştir). Frama-C statik kaynak kodu analizcisi ayrıca bazı çıkarım motoru tekniklerini kullanır.
Kaynak: https://en.wikipedia.org/wiki/Inference_engine
Wikipedia Kaynaklar:
1)Hayes-Roth, Frederick; Donald Waterman; Douglas Lenat (1983). Building Expert Systems. Addison-Wesley. ISBN 0-201-10686-8.
2)Feigenbaum, Edward; Avron Barr (September 1, 1986). The Handbook of Artificial Intelligence, Volume I. Addison-Wesley. p. 195. ISBN 0201118114.
3)Barzilayt, Regina; Daryl McCullough; Owen Rambow; Jonathan DeCristofaro; Tanya Korelsky; Benoit Lavoie. “A New Approach to Expert System Explanations” (PDF). USAF Rome Laboratory Report. Archived from the original on July 5, 2016.
4)Griffin, N.L., A Rule-Based Inference Engine which is Optimal and VLSI Implementable, University of Kentucky.
5)Sterling, Leon; Ehud Shapiro (1986). The Art of Prolog. Cambridge, MA: MIT. ISBN 0-262-19250-0.
6)Pitrat, Jacques (2009). Artificial Beings, the conscience of a conscious machine. Wiley. ISBN 978-1848211018.
