04.09. Bir Makine Öğrenmesi Uygulaması: Web sayfasından asıl içeriklerin çıkarımı

Bu yazımda bir web sayfasından menüleri, reklamları, linkleri, yorumları kısacası konu ile alakasız gereksiz kısımları elimine edip asıl içeriklerin nasıl çıkarabileceğimizi anlatan bir blog yazacağım. Bu eliminasyon işlemini  için verinin makine öğrenmesi metotları için nasıl uygun hale getirilebileceğini göreceğiz. 

Bir makine öğrenmesi uygulaması temel olarak 6 aşamadan oluşur.

  1. Problemin tanımı: Web sayfalarında asıl içeriği bulma.
  2. Verilerin Elde Edilmesi (Data Acquisition)
  3. Verilerin İşlenmesi (Data Processing)
  4. Özelliklerin Çıkarımı (Feature Extraction)
  5. Sınıflandırma Metotları (Classification)
  6. Sonuçların değerlendirilmesi
Bu yazıda konular derinlenmesine incelenmeyecek yüzeysel olarak anlatılacaktır. Çünkü her bölüm başlı başlına bir konudur. Tüm bölümler için yazılan kodlara ve daha fazlasına /webce/ adresinden ulaşabilirsiniz. Bu uygulama Elsevier’ın Information Processing & Management dersigisinde yayınlanmıştır.

2. Verilerin Elde Edilmesi

Uygulama alanımız için web sayfalarının HTML bölümlerine ihtiyaç vardır. Bu noktada belirlediğimiz her web sitesinden 10-20 adet web sayfası toplayarak işe başlayabiliriz. Burada veri miktarı uygulama alanına göre değişken bir kavramdır. Eğer sonuçlar istediğiniz gibi çıkmazsa bu aşamaya dönüp veri miktarını arttırmanız önerilir. Bu aşamayı otomatik bir crawler ile de elde edebilirsiniz. Crawler web sayfalarının içindeki linkleri alıp diğer web sayfalarını otomatik olarak indiren bilgisayar programlarıdır. Çok büyük bir veri seti de elde edebilirsiniz ancak unutmayın ki bir de eğitim verisi oluşturmak için bu verilerin işaretlenmesi işlemi vardır. Bu kısım manuel bir süreç olduğu için zaman alıcıdır.

3. Verilerin İşlenmesi

Veri işleme aşamasında işlem yapacağımız veriyi iyi bir şekilde tanımalıyız. Web verisi üzerine çalışacağımız için HTML etiketlerini ve web tasarımı yapan kişilerin bu etiketleri nasıl kullandığını yorumlamalıyız. Verinin iyi şekilde tanınması ve işlenmesi kullanılacak makine öğrenmesi metodundan bile önemlidir.

3.1. HTML Etiketleri hakkında ön bilgi

Birçok HTML etiketi veri gösterimde kullanılmaktadır. h1, h2, h3 vb etiketler genelde başlık bilgisini tutarken span, p gibi etiketler yazıları tutmaktadır. Diğer taraftan table ve div etiketi web sayfasını tasarımının vazgeçilmez bloklama etiketidir. Örneğin, günümüzde bir web sayfasını farklı bloklara ayırmada div etiketi tercih edilir. Daha önceki yıllarda table etiketi vardı. Satır açmak için tr ve sütun açmak içinse td kullanılması div etiketine göre etiket sayısını arttırır ve sonuç olarak parse sürecini yavaşlatır. (Browser kendine bir HTML sayfası geldiğinde DOM – Ağaç modelinde bir veri yapısını oluşturur. Bu oluşturma işleminde iç içe etiketlerden oluştuğu ve etiket sayısının fazlalığı sebebiyle table etiketi daha yavaş yorumlanır.) HTML 4 ile birlikte gelen ve CSS dosyamızdaki / bölümümüzdeki şekillendirmelere ulaşmamızı sağlayan id ve class etiketleri ile birlikte div etiketi önemini arttırmıştır. Günümüzde birçok web sitesi ve çoğu web sitesinde kullanılan hazır CSS kütüphaneleri (bootstrap, w3c) dahi block oluşturma işleminde div etiketi üzerine kurulmuşlardır.  Aşağıda örnek bir web sayfasını ve blok etiketlerini görmekteyiz.

Tarayıcınızın F12 tuşuna basıp Element bölümünden bir web sitesinin içeriklerinin hangi div etiketlerinde tutulduğuna bakabilirsiniz. Bu örnekte etiketi class özelliği doc olan div etiketi: başlık, özet ve yine class özelliği contenidos clearfix olan bir div etiketi içermektedir.  Diğer div etiketlerini elimine edip bu etiketleri asıl içerik olarak belirleyebilmek için bir kural belirleyebiliriz. Bu kural bu web sitesinin diğer sayfaları içinde geçerli olacaktır. Ancak web sitesi değiştiğinde kuralda değişecektir. Hatta web tasarımcısı bu kuralı zaman içinde değiştirebilir. Milyonlarca web sitesi olduğunu ve her web sitesi için manuel kural belirlemenin zaman alıcı bir iş olduğu düşündüğümüzde bu işi otomatik olarak yapabilmek: bu bir yapay zeka problemidir. Yapay Zekanın amacı makineleri de insanlar gibi düşünecek hale getirme hayalidir. Hayaldir diyorum çünkü günümüzde böyle bir makine / bilgisayar yoktur. Belirli alanlar için uzmanlaşan makineler / algoritmalar / yöntemler vardır ancak insan gibi düşünüp kendini geliştirebilen çok gelişmiş bir sistem yoktur. (Terminatör filmi Yapay Zeka’nın hayalidir.) Yapay Zeka’nın belirli alanlar için çözümler üreten hali makine öğrenmesi metotlarıdır. Bir bilgisayar ancak özellikler üzerinden (değişkenler) üzerinden belli algoritmalarla çıkarımlar yapabilir. 

3.2. DOM (Document Object Model)  

Etiketler üzerinden işlem yapacağımız için bir web sayfasını DOM haline getirebiliriz. DOM, HTML etiketleri bir ağaç yapısı şeklinde tutar ve bu ağaç yapısını dolaşarak tüm HTML etiketleri hakkında bilgi edinebiliriz. 

4. Özellik Çıkarımı

Bir makine öğrenmesi işleminde öğrenme işleminde özellikleri (feature) belirleme en önemli işlemlerden biridir. Öğrenme işleminin başarısını direkt etkiler. Bu özellikler çalışma alanı göre değişir. Web sayfası HTML etiketlerinden ve HTML etiketleri içindeki metin verisinden oluşur. Bu verileri özellik haline dönüştürmeye gelelim. Öncelikle çalışma alanınıza göre başkalarının hangi özelliklerini  kullandığını, nasıl elde ettiğini ve hangi özellikleri yeni sisteme ekleye bileceğinizi belirleyin. Yeni özellikler belirleme ve bu özelliklerinizin öğrenme başarınızı arttırması makine öğrenmesi çalışmalarının orjinalliğini arttırır.

Web sayfasında asıl içeriği blok etiketleri (div gibi) belirleyebiliriz. Div etiketi içinde karakter ve kelimelerden oluşur. Bir div etiketi ne kadar fazla kelimeden oluşuyorsa asıl içerik olma olasılığı artar. Kısaca basit bir kural belirledik. Bu kural basit ve çoğu web sitesinde işe yarayabilir. Ancak, farklı web sayfalarında bu kural yetersiz kalabilir. Öyle bir kural ve kurallar ilişkisi belirlemeliyiz ki başarı en düzeyde olsun. Kelime sayısı web sitesine göre çok değişken bir kavramdır. Kelime sayısı yerine literatürde kelime frekansı önerilmektedir (Veri Madenciliği Normalizasyon konusuna bakın.). Etiket içindeki kelimelerin web sayfasındaki tüm kelimelere oranı frekansı verir. Diğer bir faktör a href etiketinin blok etiketi içindeki geçme yoğunluğu olabilir. Çok fazla a href etiketi varsa o blok asıl içerik olmama olasılığı fazladır. Diğer bir kriter, a href etiketleri arasındaki kelime sayısı ile a href etiketleri dışındaki kelime saysının oranıdır. Asıl içerik a href etiketi içerebilir, diğer sayfanın linkini içeren kısımlar a href etiketi içinde çok kelime içerme olasılığı fazladır. 

Div etiketi iç içe etiketler içerebilir. Yukarıdaki örnekte div etiketi içinde gerekli bir div etiketi daha vardır. Bu noktada benim çalışmalarımda önerdiğim alt div etiketleri içindeki verinin çıkarılması ile yukarıdaki değerler tekrar hesaplanabilir. Kodlara ve veri setine ulaşmak için tıklayın.

Eğitim veri seti (Training Dataset) oluşturma ve ARFF(Attribute Relationship File Format) Dosyası

Makine öğrenmesi metotlarını teker teker kodlamak yerine hazır makine öğrenmesi yazılımlarını kullanmak ve metotları kıyaslamak daha doğru bir yaklaşım olacaktır. Makine öğrenmesi konusunda o kadar çok metot çıkmış ve bu metotlar üzerine o kadar çok güncellemeler yapılmıştır ki bu dünyayı baştan keşfetmek projemizin geliştirme sürecini çok fazla uzatır. Bu dünya o kadar çok metot keşfedilmiş ki artık bu metotları makine öğrenmesi kullanılabilecek alanlarda test etmeliyiz. Çünkü her alan farklı metotlarda farklı başarım oranları vermektedir. Bu hazır makine öğrenmesi yazılımlarından bir tanesi de Weka’dır. Weka (Waikato Environment for Knowledge Analysis) makine öğrenimi amacıyla Waikato Üniversitesinde geliştirilmiştir. ARFF dosya yapısı, her ne kadar Weka için özel olarak geliştirilmiş olsa da  diğer makine öğrenmesi yazılımları tarafından da okunabilir. 

Özelikler belirlendikten sonra  makine öğrenmesi işlemi için (supervised makine öğrenmesi metotlarını kullanırsak) bir eğitim verisi belirlemeliyiz. Eğitim verisinde özellikler ve özellikler sonunda oluşacak çıktı vardır. 

@relation etiketi projemizin ismini yazıyoruz. Attribute feature özelliklerini ve türlerini belirlediğimiz bölümdür. tagName yukarıdaki etiketlerinden biri olabilen bir string ifadedir. Diğer ifadeler sayıdır. class ise bu özelliklerden elde edilecek çıktıdır: Irrelevant (Alakasız), main (ana kısım), headline (başlık), infotmation about article (diğer önemli kısımlar) şeklinde 4 durumun tahmini edilmektedir. @data bölümünde yukarıdaki formata uygun olarak eğitim verileri vardır. Bir DIV etiketi için veriler verilmiştir. Tüm veri setini incelemek için web_ce_dataset.zip (74,50 kb).

5. Sınıflandırma Metotları

Weka bir çok sınıflandırma metoduna sahiptir. Ben Classify bölümünden J48 sınıflama metodunu seçtim. Bu metotların her biri başlı başlına bir ders konusudur. Seçimim Decision Tree algoritmaların J48: 1993 yılında geliştirilmiş olsa da bir ağaç yapısı şeklinde özellikler ve özellikler arasındaki ilişkileri gösteriyor.

J48 algoritması verilen özelliklerden bir karar ağacı (Decision Tree) oluşturur. Bundan sonra gelen web sayfalarını özellikleri elde ettiğimizde karar ağacını kullanarak 4 durumdan birini elde ederiz. Yazılım tarafında bu kararları if statement olarak kodlayabiliriz. Bu eğitim verisinde bu karar ağacına göre %95.5474 oranında doğru sınıflama yapmıştır. Diğer algoritmaları da Weka sayesinde deneyebilirsiniz. Sonuçlarınızın değerlendirmesinde doğru sınıflama oranını bir kriter olarak kullanabilirsiniz. (Diğer değerlendirme kriterleri için ayrı bir blog yazısı yazmayı düşünüyorum.) Testlerden sonra yazılımınıza en uygun algoritmanın kodlamasını  yapabilir veya Weka’yı yazılımınıza bağlayabilirsiniz. 
 
Referanslar