Geçtiğimiz makalemde
Metin Madenciliğine kısa bir giriş yapmıştım. Bu makale ile de Metin Madenciliğinin
ilk aşamaları üzerinde durup sözlük ve döküman vektörleri kavramlarını, ağırlıklandırma
yöntemlerinin neler olduğunu, ön işleme aşaması gibi konulardan bahsedeceğim.
Bilindiği gibi
bilgisayarlar her geçen gün hayatımıza daha çok girmekte ve elimizdeki verileri
saklayabileceğimiz, istediğimizde bu verilere ulaşabileceğimiz, arama yapabileceğimiz
birer araç olmuşlardır. Bununla birlikte, son yıllarda; veritabanlarında saklanan
verinin oldukça büyümüş ve buna bağlı olarak da, verinin çeşitli yöntemlerle
organize edilme ihtiyacı doğmuştur. Tüm durumlarda amaç hep aynıdır. Böylesine
büyük boyutta, biçimsiz ve karmaşık veriler arasından istenen veriyi bulup çıkarmak.
Metin halindeki
verilerde ise bunu kolaylaştıran yöntem: Metin Kategorizasyonu’dur.
Son zamanlarda
Metin Kategorizasyonu, çok çeşitli uygulama alanları bulmuştur. Bu uygulama
alanları;
- Metin bulup
getirme ve kütüphane organizasyonu gibi alanlarda destek sağlayan, “dokümanlara
kategori ataması yapmak”,
- Bu kategorileri
insanların atadığı uygulamalarda “kategori atamasında yardımcı rol oynamak”,
- Mesajları, haberleri
ve diğer “metin akımı (stream) halindeki bilgileri alıcılara ulaştırmak”,
- Doğal dil işleme
sistemlerinin bir parçası olarak; “ilgisiz metinleri ve metin parçalarını
filtrelemek”, “metinleri, kategori bazlı işleme mekanizmalarına yönlendirmek”
veya “sınırlı şekillerde bilgi edinimini sağlamak”, “sözcük analizi işlerinde
yardımcı olmak (sözcük belirsizliğini giderme gibi)” vb.
Metin kategorizasyonu
yaparken iki temel adım vardır. İlki, performansın değerlendirileceği kategorizasyon
algoritmasını seçmek; ikincisi ise, algoritmanın üzerinde uygulanacağı örnek
veri kümesini seçmek.
Otomatik kategorizasyon
yapabilmek için öncelikle sistemimizi eğitmemiz gerekmektedir. Bunun için sistemimize
kategorisi belli olan dökümanlar eklemeliyiz.(Eğitim Dökümanları) Sistemimiz
bu eklediğimiz dökümanlardan eğitilecek ve daha sonra sınıflandırması gereken
bir döküman geldiğinde eğitim dökümanları ile kıyaslamalar yaparak kategoriye
karar verecektir.
Araştırmacılar,
eğitim dokümanları kümesinin yeterince bilgi içermesi gerektiğini, ancak bunun
yanında zaman performansını sağlamak adına büyük miktarda veri içermemesi gerektiğini
ortaya koymuşlardır. Zaman performansını sağlayıcı nitelikte eğitim dokümanı
bulundurmak, büyük veriler için kategorizasyon problemlerini çözmede önemli
olmaktadır.
Türkçe gibi bitişken (bükümlü) dillerde ise kelimeler, en küçük anlamlı parçasının
sınırlarına dair bir belirti göstermez, üstelik bu parçalar, morfolojik ve fonolojik
şartlara bağlı olarak şekil alırlar. Türkçe’de bir kelimenin son ekine bir tane
daha ekleyerek, nispeten uzun kelimeler elde edilebilir, üstelik, sadece bir
tek Türkçe kelimeden çok miktarda değişik anlamlı kelimeler oluşturulabilir.
Bu karmaşık morfolojik yapı yüzünden, Türkçe; İngilizce’den ve benzeri dillerden
daha farklı metin işleme teknikleri gerektirir. Bu nedenle, bütün kelimelerin
küçük harfe çevrilmesi ve noktalama işaretlerinin kaldırılması dışında; joker
kelimeler ile anahtar kelimelerin oluşturulması gibi bazı ön hazırlıklar yapılması
gerekmektedir.
Metin sınıflandırma
işlemi için ilk yapılması gereken sınıflandırmak istediğimiz dokümanı ve eğitim
dokümanlarımızı vektörel olarak uzayda ifade edebilmektir. Uzayımızın eksenlerini
aslında bizim kategori belirttiğini düşündüğümüz kelimeler oluşturacaktır. Dokümanlarımızı
vektör olarak temsil edebilmek için metnin içerisinde geçen kelimelerin bir
takım ön işlemlere sokulması gereklidir. Bu dökümanlar ile arka planda sözlüğümüzün
boyutu ile sınırlandırılmış vektörler oluşturulup, kategorisi bulunması istenen
dokümanın vektörü ile çeşitli algoritmalarla (K-NN, Naive Bayes) karşılaştırılarak
sınıflandırılmak istenen doküman ilgili kategoriye atanır.
Ön
İşleme Genel Adımları
Metinler doğal yazılışları ile bir kelime vektörü olarak ifade
edilmemişlerdir. Bu bakımdan bir çok zorluk bulunmaktadır. Örneğin dokümanlarda
bir çok kelime bulunmakta; bir çok doküman bulunmakta; dokümanlarda çok çeşitlilikte
bilgi yer almakta; insanlar tarafından yazıldığı için bir çok hata içermekte;
noktalama işaretleri, kısaltmalar bulunmaktadır. Bu yüzden ön işleme adımı etkili
bir sınıflandırma için kaçınılmaz bir adımdır. Genel adımlar aşağıdaki gibidir:
1-
Kategoriler belirlenir. Bu kategoriler ile ilişkilendirilebilecek olan kelimeler
sözlüğe eklenir (Örneğin Spor, Ekonomi, Politika ve Sağlık kategorilerini kullanacağız).
Aklımıza gelen
yukarıdaki kategoriler ile ilişkili olan tüm kelimeleri Sql’de kelimeler tablosunda
tutabiliriz. Örneğin Spor kategorisi için “futbol”, “gol”, “hakem”, “maç” vb.
2-
Sözlükteki her kelime teker teker incelenir. Joker olarak kullanılabilecek olan
kelimeler bulunup sözlük güncellenir. (“Joker yöntemine aşağıda ayrıntılı olarak
değineceğiz”)
Örnek:
Gözlükler
Gözlükte
Gözlüğü
Gözlü* (“Gözlü”
ifadesinden sonra ne gelirse gelsin kabul et, “Gözlük” kelimesi olarak değerlendir).
3-
Her bir doküman, sözlükte oluşan tüm bu kelimelerin, (joker kelimeler de dahil)
boyutundaki vektörün ağırlıklandırılması ile gösterilir.
Joker
Yöntemi
Sistemde metinlerdeki
kelimelerin kendileri yerine gövdelerinin kullanıldığı daha önceden belirtilmişti.
Bunun sebebi Türkçe gibi eklemeli dillerde bir gövdenin sonuna birçok farklı
ek alarak farklı biçimlerde karşımıza çıkabilmesidir. Örneğin “araba” kelimesi
ile “arabadan”, “arabayı”, “arabada”, ve “arabanın” kelimeleri eğer ayrıştırıcı
olmasa ayrı ayrı kelimeler olarak görüleceklerdi. Bunun sonucu olarak hem oluşturulan
sözlük boyutu çok artacak hemde sınıflandırma başarısı düşecekti.
Joker kelime, aynı
söz dizimi ile başlayan ve çeşitli ekler almış ancak yakın anlamda olan sözcükleri
tek bir gösterimle grup altında toplayan kelimelerdir. Joker kelime gövdeleme
yöntemine benzemektedir. Gövdelemede çekim ve yapım eklerinden ayrıştırılan
kelimeler, ortak bir köke indirgenir. Ancak burada köke indirgeme şartı yoktur.
Kökün yanında ek de kalabilir. Joker kelimeler kategoriyi belirlememize yardımcı
anahtar kelimelerden veya sık kullanılan kelimelerden seçilir.
Joker yöntemi kelimlerin
ilişkili terimlerinin anlamlarını kapsaması açısından değiştirilmesidir. Örneğin
jokerli bir kelime olarak “deprem*” ile (Joker olduğunu * işaretinden anlıyoruz),
“deprem” kelimesinden sonra nasıl bir ek gelirse gelsin deprem kelimesi vurgulanmış
olacaktır.
Örnek:
simitçi ve simitçiler
Dokümanımızda “simitçi”
ve “simitçiler” kelimelerinin geçtiğini düşünürsek her iki kelimeyi ayrı ayrı
sözlükte tanımlamak sözlük boyutunu arttırarak performansımızı düşürecektir.
Bu yüzden bu kelimeler anlamı karşılayacak bir gövdeye indirgenebilir. Yani
sözlüğümüzde “simitçi*” kullanıp doküman içerisinde başı “simit” ile başlayan
tüm kelimeleri “simitçi*” olarak değerlendirebiliriz.
Türkçe kelimeler
genellikle sert sessiz harf ile biter. Sert sessizlerin yumuşaması olabileceğinden,
bu tür kelimelerde hem kelimenin sert sessizli hem de yumuşak sessizli hali
joker olarak seçilir (ilaç*,ilac*). Böyle bir durumda “ila*” joker olarak seçilmemeli
(“ilahiyat” gibi ilgisiz kelimeleri de içerebilir diye), ancak böyle ilgisiz
kelime oluşma olasılığı yoksa o zaman her iki kelimeyi de (sert, yumuşak) içeren
joker seçilebilir.
(Ör:kitap*
ve kitab* yerine kita*)
Not: Sert sessizler:
Ç,F,T,H,S,K,P,Ş
Son hecesinde “ı”
veya “i” içeren kelimelere, sesli ile başlayan bir ek geldiğinde bu “ı” ve “i”
düşer. Bu durumdaki kelimeler için ya kelimenin her iki hali de, ya da en çok
görülen hali joker olarak seçilir.
Yapım ekleri kelimenin
anlamını değiştiren ve çekim ekleri değiştirmeyen ekler olduğundan; joker seçiminde
yapım ekleri bize zorluk çıkarır. Gövdelemede ise işlem basittir, sadece köke
indirgeme yapılır. Ancak joker yönteminde, yapım eki eklenerek anlamı değiştirilmiş
kelimeler, farklı kategorilerde olabileceğinden bunları ayrı ayrı göstermek
gerekir.
Evlen*, evcil*
“Ev*” seçemeyiz.
Çünkü “evren”, “evrim” gibi alakasız kelimeleri içerebilir.
Çekim ekleri olan
sözcükler bizim için kolaydır. Çünkü bu ekler, eklendikleri kelimenin anlamını
değiştirmezler (borsada,borsalar,... -> borsa* seçilebilir).
Ancak bazen, jokerlerin
alakasız kelimeleri içerebileceği durumlarda, çekim eki hallerini tek tek alamayız
(kampı,kampında,....->kamp* yapamayız. Çünkü “kampanya” kelimesini içerebilir).
Zaman ekleri de
bir çeşit çekim ekidir. Bu nedenle yalnızca kelimenin kökünü joker almak bazı
durumlarda yeterli olmuyorken; bazen de –yor ekinde olduğu gibi (Örnek:isti-yor)
kelimenin kökü deforme olabilir (iste* seçilemez).
Bu zaman kadar
anlatılanları özetlemek gerekirse;
1- Hangi
kategorileri kullanacağımıza karar veriyoruz.
2-
Bu kategoriler ile ilişkili olabilecek kelimeleri tablomuza ekliyoruz.
3- Tüm kelimeleri teker teker inceleyip jokerleri
varsa ayrı bir tabloda her kelimenin jokerlerini tutuyoruz.
4- Her bir döküman (Eğitim dökümanlarını ve
sınıflandırmak istediğimiz dökümanı) vektörlerini ağırlıklandırıyoruz.
Vektörün
Ağırlıklandırılması
Bu aşamada artık
sınıflandırmak istediğimiz dökümanımızı vektör formuna sokmalıyız. Bunun için
aşağıdaki adımlar uygulanmalıdır:
1-
Etkili bir ön işleme yapabilmek için haber metinlerinden noktalama işaretlerini
çıkarmak önemli bir ihtiyaçtır. Ayrıca aşağıdaki gibi tüm büyük harfler küçük
harfe çevirilir.
Taraftarlar İstanbul’da
bırakıldı.
Sonuç: taraftarlar
istanbul bırakıldı
Örnek: trafik kazası:
1 ölü...
Sonuç: trafik
kazası 1 ölü
2-
Noktalama işaretleri çıkarılmış dokümanda geçen tüm kelimeler bir diziye atılır.
Dizi: (Taraftarlar,İstanbul,bırakıldı)
3-
Dizideki elemanlar sözlükteki elemanlar ile ve jokerleri ile karşılaştırılır.
Bu şekilde vektörün elemanlarının ağırlıkları belirlenir. Örneğin sözlüğümüzün
aşağıdaki kelimelerden oluştuğunu var sayarsak;
taraftar*
İstanbul*
Gol*
Futbolcu*
Vektörümüz: (1,1,0,0)
şeklinde oluşur. Gerek eğitim dokümanlarının ağırlıklandırılmasında gerekse
sınıflandırılacak dokümanlarım ağırlıklandırılmasında, vektörlerinin oluşturulmasında
bu yöntem uygulanır. Ancak ağırlıklandırma yöntemi değişebilir. Bu makale dizisinde
3 farklı ağırlıklandırma yöntemine değineceğiz. (bit, frekans, tf-idf).
Bit yönteminde
kelimenin sözlükte olup olmaması dikkate alınır. Frekans yönteminde ise kelimenin
döküman içerisinde kaç kere tekrar ettiği bilgisi de önem kazanır. Tf-idf yöntemine
ise daha sonraki makalelerde ayrıntılı olarak değineceğiz.
Örnek:
Programlama
mantığının anlaşılması bakımından küçük bir sözlük kullanarak bir örnek verelim.
Normal bir uygulamada sözlük boyutunun küçük olması başarısız sonuçlara neden
olacaktır.
Kelimeler(Sözlük)
Jokerleri
enflasyon*
grip* ---------------------> grib*,
hakem*
İlaç* ---------------------->
ilac*,
taraftar*
tarım*
Örnek eğitim dokümanları
aşağıdaki gibi olduğunu var sayalım;
- Gribe yakalanan
hasta grip olduğunu anlamamıştı. İlacını almamıştı. (Sağlık)
- İlacını aksatanlar
hastalığa davetiye çıkarırlar. (Sağlık)
- Yıllık enflasyon
oranı bu senede yükselişte. (Ekonomi)
- Tarımla uğraşanlar
bu yıl tarımdan zarar edecekler. (Ekonomi)
- Hakemin gözü
önünde olmasına rağmen hakem penaltı çalmadı. (Spor)
- Taraftarlara
erken gelen gol ilaç gibi geldi ve taraftarlar golden sonra hiç susmadı. (Spor)
Vektörler oluşturulurken
sözlükteki kelimeler sırası ile dokümanlarda aranacak, aynı zamanda kelimenin
jokeri de varsa jokeri de aranacaktır. Yani “grip*” kelimesi ile birlikte “grib*”
kelimesi de dokümanda aranmalıdır. Bulunan kelime sayısı boyuta eklenmelidir.
Kategorisini bulmak
istediğimiz metin aşağıdaki gibi olursa:
SORGU-Taraftarlar
hakeme tepki gösterdiler. Hakem sahayı terk etti.
Sözlük={ enflasyon*,
grip* , hakem*,İlaç*, taraftar*,tarım*}
Eğer vektörlerimizi
kelime frekansına göre ifade edecek olursak;
D1=(0,2,0,1,0,0)
D2=(0,0,0,1,0,0)
D3=(1,0,0,0,0,0)
D4=(0,0,0,0,0,2)
D5=(0,0,2,0,0,0)
D6=(0,0,0,1,2,0)
DQ=(0,0,2,0,1,0)
Eğer vektörlerimizi
bitsel olarak ifade etmek istersek;
D1=(0,1,0,1,0,0)
D2=(0,0,0,1,0,0)
D3=(1,0,0,0,0,0)
D4=(0,0,0,0,0,1)
D5=(0,0,1,0,0,0)
D6=(0,0,0,1,1,0)
DQ=(0,0,1,0,1,0)
Bu şekilde dökümanlarımızı
vektör olarak ifade etmiş olduk. Bu aşamadan sonra artık algortimalardan faydalanarak
otomatik kategorizasyon işlemini gerçekleştirebiliriz.
Umarım açıklayıcı
olabilmişimdir. Bir sonraki makalemde KNN ve Naive Bayes algoritmalarına giriş
yapacağız. Herkese iyi çalışmalar dilerim.
Faydalanılan
Kaynaklar:
1- İlhan, U., (2001),
“Application Of KNN and FPTC Based Text Categorization Algorithms to Turkish
News Reports”, “Bilkent University”.
2- Amasyalı, F.,
Yıldırım, T., (2004), “Otomatik Haber Metinleri Sınıflandırma”, Yıldız Teknik
Üniversitesi.
Makale:
Metin Madenciliği ile Metin Sınıflandırma - 2 Yazılım Mühendisliği İsmail Pilavcılar
|