Bu yazımda, bilgisayar bilimlerinde özellikle Bilgi Erişimi (Information Retrieval), doğal dil işleme (Natural Language Processing, NLP) ve metin madenciliği (text mining) gibi konularda kullanılan vektör uzayı modelini (Vector Space Model) açıklamaktır. Vector Space Model, bir indeks teriminin vektörü olarak metin dokümanlarını sunan cebirsel bir modeldir.
Doküman ve sorgular vektör olarak ifade edilir.
Vektör içinde kelimelere ait sayısal bir değer olur. Örneğin o dokümanda var olup olmaması (0, 1) değerleri ifade edilebilir. Bu değerleri (ağırlıkta (weight-w) denir) ifade etmede birçok yol vardır. En çok bilineni tf.idf (term frequency–inverse document frequency) ağırlıklandırma olarak kullanılmasıdır. tf.idf hesaplandıktan sonra benzerlik için en çok kullanılan yöntem ise kosinüs benzerliğine (cosine similarity) bakmaktır.
bir dokümandaki bir kelimesinin tf.idf değeridir. |
tf.idf, bir metinler kümesinde (derlem) bir kelimenin bir dokümandaki önemini yansıtmak için kullanılan sayısal bir değerdir. tf.idf değeri bir doküman içinde kelime sayısı göre artar (tf) ve diğer bir taraftan tüm dokümanlarda geçme sıklığı arttıkça ise değeri düşer (idf). Bu sayede her dokümanda karşılaşılabilecek çok sık kullanılan kelimelerin (ve, veya, ancak, fakat gibi) tf.idf değerine etkisi azaltılmış olur.
Örnek
Üç adet dokümanımız olsun.
İlk olarak tf.idf değerlerini hesaplayalım. tf değeri dokümandaki kelime sayısının dokümandaki tüm kelime sayısına oranıdır. d1 dokümanındaki “new” kelimesi için tf değeri 1/3’tür. Bu şekilde tüm kelimeler için hesap yapılabilir.
idf değeri her kelime için ayrı ayrı hesaplanır. idf değeri ise tüm doküman sayısının toplam kelime sayına oranının iki tabanında logaritmasıdır.
Şimdi tf.idf değerlerini hesaplayım. Ayrıca karşılaştırma işlemi için bir sorgu (query – q) oluşturalım. Sorgumuz “new times” olsun.
Sırada sim(d1, q), sim(d2, q) ve sim(d3, q) değerlerini hesaplamaya geldi.
Bu sonuçlara göre d1 dokümanı sorguya en yakın doküman iken d2 ve d3 aynı oranda benzer çıkmıştır.
Uygulama Aşaması
Tüm dokümanları bu şekilde hazırlamak ve bu hesapları yapmak özellikle büyük veri setlerinde problem yaratabilir. Fakat, iyi kod yazarak bu zorluklarını minimize edebiliriz. Örneğin yukarıda matris şeklinde bir yapı ile dokümanları gösterdik. Matris yapısı veri kümemiz büyüdükçe büyük sorun çıkartır. Bu durumda, veri yapıları dersinin temel konularından olan Hash Fonksiyonları veya Veritabanı dersinde bashettiğimiz MySQL içindeki MemoryTable arama için kullanılabilir. Yine de, büyük veri setlerinde sorun çıkarabilecek bir yapıdır. Bu modeli taban alan Generalized vector space model, Latent semantic analysis, Term Discrimination, Rocchio Classification ve Random Indexing gibi farklı modeller vardır. Bu modeldeki diğer sorunları bilgisayarkavramlari web sitesinden inceleyebilirsiniz.
Kaynaklar