Anlamsal Ağ Projesi 4. Bölüm — Bir Bağın Yapısı

Ahmet Melek
6 min readNov 14, 2018

--

Önceki yazımızda Ontolojimizin Veri yapısını biraz biraz incelemiştik.

Bu yazımızda, bizim için özellikle önemli olan Bağların veri yapısını inceleyeceğiz.

Bunları incelememizin sebebi, öneri sistemimizi oluştururken yazacağımız kodu anlayabilmeniz.

Daha detaylı bahsedecek olursak, öneri sistemimizi yazdığımız kodda çeşitli “Sorgu”lar yazacağız. Sorgu’nun İngilizce’si Query.

Bir veri bankasına belli bilgileri getirmesi için verdiğiniz komuta Sorgu deniyor. Şunun gibi düşünebilirsiniz, bir iş yerinde çalışıyorsunuz ve bir dolap var.

Dolapta bir sürü dosya var, patron da size “Bizim dolapta hukuk dosyasındaki kağıtlardan en baştakini getirebilir misin?” diyor.

İşte patronun size söylediği bu cümle, yazılım dünyasında bir sorgu. Bir bilgiyi getirmek için verilen komut.

Gelelim Bağ veri yapılarımıza. Şimdi oluşturduğumuz Tipler arasında Bağlar yaratacağız. Örnek olarak şunları verebilirim

Titanik → ‘i Öner → Ahmet

Ahmet → ‘e Öner → Titanik

Üstte iki bağ görüyorsunuz.

Birinci bağ Titanik’i önereceğim kişilerin içinde Ahmet’in olması gerektiğini söylüyor.

İkinci bağ ise Ahmet’e önereceğim şeylerin içinde Titanik’in olması gerektiğini söylüyor.

Farkındaysanız bu iki bağ aynı şeyi yapıyor. Biz bunlara zıt bağlar diyoruz.

Bu bağlar ne işe yarıyor? Önceki yazılarımızda Çizge modellerini hatırlayın:

Çizge Modeli

Bu modelde şunu çizmiştik:

“Matematik aratıldığı zaman, kullanıcıya üç şey öner: Nesin Matematik Köyü, Cebir ve Öklid.”

İşte bunu çizerken, noktalar arasındaki her çizgi, bir Bağı temsil ediyor. Öneri sistemi kodumuz bu Çizge Modeli üstünde zıplamalar ve analizler yaparak kullanıcıya öneriler sunacak. İşte bu yüzden bağ oluşturmayı, bağları kullanmayı bilmemiz ve kodlamayı ona göre yapmamız gerekiyor.

Öyleyse devam edelim.

Bağ Tiplerini Oluşturuyoruz

Her zamanki gibi Protegeyi açalım ve Ontolojimizi yükleyelim.

Ontolojiyi Yükledik.

Yükledikten sonra Object Properties sekmesine gelin.

Object Properties sekmesi.

owl:topObjectProperty’ ye sağ tıklayın ve Add sub-Properties seçeneğine tıklayın. Şimdi önünüze Bağ Tiplerini tanımlamanız için bir pencere gelecek.

Bağ Tipleri Tanımlama Penceresi

Lütfen karıştırmayın, bu pencereye yazacağımız her satır bir bağı temsil etmeyecek.

Bu pencereye yazacağımız her satır bir bağ tipini temsil edecek.

Bağ tiplerinin bağların kendisinden farkı şu:

Sevgi, bir bağ tipidir.

Ama “Didem’in Kodlamayı sevmesi” bir bağ örneğidir.

Öğretmek bir bağ tipidir.

Ama “Şükran’ın Ece’ye Öğretmesi” bir bağ örneğidir.

Bizim projemizdeki bağ tipleri ne olabilir? En basitinden “Önermek” ve “Alakalı Olmak”.

Önermek örneğini üstte verdim. “ ..’yı Öner ” veya “ ..’ya Öner” dediğimiz bağ tiplerini üstte gösterdik.

Alakalı olmak bağı ise Matematik ve Cebir’in arasında, Matematik ve Nesin Matematik Köyü’nün arasında, Matematik ve Öklid’in arasında olan bağ tipi. Çünkü Matematik ve Cebir birbiri ile alakalı.

  • “Alakalı olmak” bir bağ tipi.
  • Ama Matematik ve Öklid’in arasındaki bağ “Alakalı olmak” tipinin bir örneği.
  • “ ..’yı Öner ” bir bağ tipi.
  • Ama “Titanik’i Ahmet’e Öner” cümlesi “ ..’yı Öner ” bağ tipinin bir örneği.

Biz şimdi Bağ Tiplerini yazacağız, bu bağların örneklerini değil.

Yazalım öyleyse:

Yazdığım bağ tipleri

Burada fark ettiyseniz bir düzen ile yazdım. Bağ Tipleri Tanımlama Penceresinde İngilizce olarak bir açıklama yazıyor:

“İsterseniz Tab tuşunu hiyerarşi oluşturma amaçlı hizalama için kullanabilirsiniz”

Tab tuşuna bir kere bastığınızda bilgisayar dört kez boşluk tuşuna basmışsınız gibi dört boşluk yaratır. Ben de bağ tipleri arasında bir hiyerarşi oluşturmak için Tab tuşunu kullandım ve hizalama (indentation) yaptım.

Hiyerarşi ne peki? Alttaki resme bakalım:

Aslında burada iki tip Bağ var, kırmızı ve mavi

Hiyerarşi dediğimiz şey şunun gibi, önceki yazılarda da bahsetmiştik:

Her Genç bir İnsandır.

Genç bir “Tip”, İnsan da bir “Tip”.

Ama İnsan tipi Genç tipinin üst sınıfı.

Yani her Genç, bir İnsan olmak zorunda. Çünkü “Genç” tipi zaten İnsanların bir bölümü için kullanılan bir kelime.

İşte üstteki resimde de bazı bağ tipleri diğerlerinin alt sınıfı.

Yine matematik örneğimizden gidelim.

Matematik → Alakalı → Cebir

Matematik → Alakalı → Nesin Matematik Köyü

Matematik → Alakalı → Öklid

Üstte yazdığım üç satır da doğru.

Ve altta yazan üç satır da doğru:

Matematik → üst_konusudur→ Cebir

Nesin Matematik Köyü→ Yeridir→ Matematik

Öklid→ Kişisidir→Matematik.

Yani bir şeyin “kişisi” veya “yeri” iseniz, o şey ile alakalısınızdır. “Kişisidir”, “Yeridir” bağları, “alakalı” bağının alt tipleri.

Şimdi “Continue” butonuna tıklayalım, Finish butonuna tıklayalım Bağ Tiplerini kaydetmiş olalım.

Bağ Tipleri kaydoldu!

Bağ Tiplerini kaydettik. Şimdi bu tiplere birer örnek oluşturalım.

Zaten halihazırda Titanik diye bir Öneri’miz var. Şimdi Öneri’yi yapacağımız bir kişi lazım bize. Bu sayede kişi ile Titanik arasında bir öneri bağı kurabileceğiz.

Bunun için Entities → Classes sekmesine gidin, “Önerilen” tipine tıklayın ve aynı Titanik’i yarattımız gibi, Instances’ın yanındaki + tuşuna basarak “Mehmet” adında bir Örnek ekleyin.

Mehmet’i Ekledik.

Daha sonra Mehmet üzerinde işlem yapmak için Individuals sekmesine gidin:

Individuals Sekmesi

Mehmete tıklayın, (üstü mavi olsun). Şimdi sayfanın sağ tarafından bağ ekleyebilirsiniz:

Sayfanın sağ tarafı

Mavi renkteki satır, bağ eklemek için kullanılıyor. Oradaki + işaretine tıklayın.

Bağın tipini ilk metin kutucuğuna yazın. Bağ tipimiz “ ’a_öner ” olacak.

Sonraki kutucuk ise önereceğimiz şey. O da Titanik olacak.

Bunları yazdıktan sonra OK tuşuna basın.

Bağı ekledik.

Bağı eklemiş bulunuyoruz. Kafalar karışmasın diye eklediğimiz bağı bir daha yazıyorum:

Mehmet → ’a öner → Titanik

Bu bağ “ ’a öner” bağ tipinin bir örneği.

Artık Mehmet’e Titanik’i önermemiz gerektiğini program biliyor.

Şimdi gelin Ontolojiyi kaydedelim, metin olarak açalım ve bu bağ tiplerimizi, bağ örneğimizi bulalım.

Ontolojiyi İnternet Explorerda açtım.

Geçen yazımızda bir Ontolojiyi Internet Explorer üzerinden açmayı öğrenmiştik. Hatırlamıyorsanız, o yazıyı gözden geçirerek açmanın yolunu bulabilirsiniz.

Geçen yazımızda Ontolojiyi açtığımızda Object Properties diye bir başlık yoktu!

Şimdi ise yarattığımız çeşitli Bağ Tiplerini görebiliyoruz. (Object Properties)

Geçen yazıda yaptığım gibi Ctrl+F ile Titanik kelimesini aratıyorum.

Titanik’i arattım

Burada Titanik hakkında gelen iki şey var:

Kırmızı olanda Titanik kelimesinin geçmesinin sebebi, Mehmetin Titanikle olan bağının kırmızı kutunun 4. satırında tanımlanmış olması. Dikkatli bakarsanız o satırda Titanik kelimesini mavi ile işaretlenmiş şekilde görebilirsiniz.

Bunu nereden anladım?

  • Kırmızı kutunun başlığı Mehmet (en üstteki satır)
  • 4. satırda, yani Titanik’in olduğu satırda şu yazıyor:

<untitled-ontology-19:a_öner ……..

yani az önce yarattığımız “Mehmet’e Titanik’i öner” bağı bu.

Türkçe karakterler (ı, İ, ğ, ü, ş, ö, ç) kullandığımızdan dolayı “a_öner” gibi bazı kelimeler tam okunmayabiliyor.

Şu an öğrenme açısından kolaylık olması için ben her şeyi Türkçe karakterlerle yazıyorum, ancak gerçek bir proje kodlarken, Türkçe karakter kullanmamaya özen göstermek gerekiyor. Özellikle Python gibi programlama dillerinde Türkçe karakter kullanmak sıkıntılara yol açabiliyor.

Bu haftalık yapacaklarımız bu kadar, peki bu yazıda ne yaptık?

  • Bağları genel olarak hatırladık (Object Relations)
  • Bağ Tipleri (Classes) ve bu tiplerin Örnekleri (Individuals) arasındaki farkı konuştuk
  • Protege üzerinden Bağ Tipleri ve Örnekleri oluşturduk
  • Oluşturduğumuz Bağ Tipleri ve Örneklerini inceledik. Bunu Ontolojimizi Internet Explorer’da metin şeklinde açarak yaptık.

Kendinize iyi bakın, bir dahaki yazımızda Python üzerinden RDFLib’i kütüphanesini kullanacak, basitçe kod yazacağız. :)

--

--

Ahmet Melek

Machine Learning Engineer at Primer AI | Sharing thoughts on computers and other geeky stuff