Yazan : Şadi Evren ŞEKER
Bu yazının amacı, metin madenciliği (text mining) olarak da geçen ve doğal dil işleme (natural language processing) ve veri madenciliği (data mining) konularının ortak çalışma alanı olan metinler üzerinde istatistiksel incelemeler konusunda kullanılan TFIDF kavramını açılamaktır. TF-IDF kavramı IR (information retrieval, bilgi getirimi) gibi konuların altında bir sıralama (ranking) algoritması olarak sıkça geçmektedir.
İngilizcedeki Term Frequency – Inverse Document Frequency (Terim frekansı – ters metin frekansı) olarak geçen kelimelerin baş harflerinden oluşan terim basitçe bir metinde geçen terimlerin çıkarılması ve bu terimlerin geçtiği miktara göre çeşitli hesapların yapılması üzerine kuruludur.
Klasik olarak TF yani terimlerin kaç kere geçtiğinden daha iyi sonuç verir. Kısaca TF-IDF hesabı sırasında iki kritik sayı bulunmaktadır. Bunlardan birincisi o anda ele alınan dokümandaki terimin sayısı diğeri ise bu terimi külliyatta içeren toplam doküman sayısıdır.
Örnek:
Konuyu bir örnek üzerinden açıklayalım:
Örneğin 100 dokümandan oluşan bir külliyatımız olsun ve TF-IDF hesaplamak istediğimiz kelime de “şadi” olsun. Bu durumda birinci dokümana bakıp “şadi” kelimesinin kaç kere geçtiğini sayarız. Diyeli ki 4 kere geçiyor olsun. Ardından külliyatımızdaki 100 dokümandan kaçında “şadi” kelimesi geçiyor diye bakarız. Diyelim ki 10 dokümanda bu kelime geçiyor olsun (dikkat edilecek husu kelimenin geçip geçmediğidir diğer dokümanlarda kaç kere geçtiğinin bir önemi yoktur).
Şimdi TF ve IDF değerlerini ayrı ayrı hesaplayacağız ve sonra bu iki değeri çarpacağız, önce TF hesabına bakalım:
TF hesabı için ihtiyacımız olan bir diğer değer ise o andaki dokümanda en fazla geçen terim sayısıdır. Örneğin o anda baktığımız dokümanda en fazla geçen terimimizin sayısı da 80 olsun.
İlk hesaplama dokümanda bizim ilgilendiğimiz kelimenin en fazla geçen kelimeye oranıdır. Yani kelimemiz 4 kere geçtiğine ve en fazla geçen kelimemiz de 80 kere geçtiğine göre ilk oranımız (ki bu oran aynı zamanda TF (term frequency, terim frekansı) olarak tek başına da anlamlıdır)
TF = 4 / 80 = 0,05 olarak bulunur.
Ardından IDF değerini hesaplayalım. Bunun için basit bir bölme işlemi yapılacak ve logaritması alınacaktır.
IDF = log ( Toplam Doküman sayısı / Terimi içeren doküman sayısı )
Buna göre IDF için toplam 100 dokümandan 10 dokümanda aradığımız kelime “şadi” geçtiğine göre
IDF = log ( 100 / 10 ) = log (10) = 1 olarak bulunacaktır.
IDF hesabı sırasında bir iki noktaya dikkat etmek gerekir. Öncelikle logaritmanın tabanının bir önemi yoktur. Amaç üssel fonksiyonun tersi yönde bir hesap yapmaktır. Doğal logaritma kökü e, 2 veya 10 gibi sayılar en çok kullanılan değerlerdir. Genelde TF-IDF değerinin kıyas için kullanıldığını ve diğer terimlerin TFIDF değerleri ile kıyaslandığını düşünecek olursak hepsinde aynı tabanın kullanılıyor olması sonucu değiştirmeyecektir.
Diğer dikkat edilecek bir husus ise IDF hesabı sırasında geçen “terimi içeren doküman sayısı” değeridir. Bu değer hesaplama sırasında paydada yer almaktadır ve bu değerin 0 (sıfır) olma ihtimali vardır. Bu durumda sonuç sıfıra bölüm belirsizliğine götürebileceğinden genelde bu değere 1 eklemek sıkça yapılan bir programlama yaklaşımıdır.
Neticede elde ettiğimiz TF = 0,05 ve IDF = 1 değerlerini çarpıyoruz ve terimimizin TF-IDF değeri aşağıdaki şekilde bulunuyor:
TF-IDF = TF x IDF = 0,05 x 1 = 0,05
Yukarıda kullandığımız formülleri aşağıdaki şekilde de açıkça yazmak mümkündür:
Yukarıdaki gösterimde, i terimi için ve d dokümanı için hesaplama yapılmaktadır. Öncelikle TF hesaplanır ki bu basitçe terimin o dokümanda kaç kere geçtiğinin en fazla geçen terime oranı şeklinde hesaplanabilir:
Yani i terimi için d dokümanındaki terim frekansı (term frequency), i teriminin d dokümanındaki tekrar sayısının o dokümandaki en yüksek tekrar sayısına sahip terimin tekrar sayısına oranıdır. Veya bu oranların en yükseğidir.
Yukarıda verilen TF-IDF formülünde ayrıca n toplam doküman sayısını df ise doküman frekansını vermektedir ve df aslında i teriminin kaç farklı dokümanda geçtiğinin sayısıdır.
Son olarak TF-IDF yönteminin diğer yöntemlere göre farkını açıklamaya çalışalım. TF-IDF ile bir terimin kaç kere geçtiği kadar kaç farklı dokümanda da geçtiği önem kazanır. Örneğin sadece bir dokümanda 100 kere geçen bir terimle 10 farklı dokümanda onar kere geçen terimin ikisi de aslında toplamda 100 kere geçmiştir ancak TF-IDF ikincisine yani daha fazla dokümanda geçene önem veriri.
TF hesabı için ihtiyacımız olan bir diğer değer ise o andaki dokümanda en fazla geçen terim sayısıdır. Örneğin o anda baktığımız dokümanda en fazla geçen terimimizin sayısı da 80 olsun.
Konuyu yanlış anlatmışsınz. En fazla geçen terim sayısı değil. Dökumandaki toplam terim sayısı olcak. Düzeltirseniz konuyu yeni öğrenenler için kafa karışıklığı yaratmamış olursunuz
İkisi de doğrudur. Yani toplam terim sayısı veya en fazla geçen terim sayısı (kaynaklarda ikisi de geçiyor) ve aslında çok da önemi yok. Buradaki payda (bölünen değer, yani toplam terim sayısı veya en fazla geçen terim sayısı) tamamen normalleştirme (normalization) için uygulanıyor ve dokümanların birbirinden farklı sayıda kelime içermesi gibi önemli bir farklılığı kaldırmaya yarıyor.
Diğer bir deyişle 10 kelime içeren bir dokümanda bir kelimenin 2 kere geçmesi ile 1000 kelime içeren bir dokümanda 2 kere geçmesi arasında fark vardır.
Bu açıdan sizin bahsettiğiniz yaklaşım dokümandaki kelimenin ağırlığını ölçmektedir. Öte yandan kelimelerin dağılımları da önemlidir. Örneğin her kelimeden birer tane olan bir dokümandaki bir kelime ile, her kelimeden yüzlerce olan bir dokümandaki kelime arasında da önem açısından fark vardır (standart sapma veya varyans). Bu yüzden min-max normalizasyonu ismi verilen yöntem de kullanılabilir.