Kosinüs Benzerliği (Cosine Similarity)
Yazan : Şadi Evren ŞEKER
Bu yazının amacı, bilgisayar bilimlerinin de bir alt çalışma alanı olan, metin madenciliği konularında (text mining) sıkça geçen kosinüs benzerliği (cosine similarity) konusunu açıklamaktır.
Basitçe iki farklı doküman (text) arasındaki benzerliği, trigonometrideki kosinüs (cosine) fonksiyonu üzerinden formülize etmek amaçlanmaktadır.
Metinlerin birer vektör (yöney, vector) olarak düşünüldüğü bu yaklaşımda, iki vektörün birbirine göre olan ilişkisi bir açı ile ifade edilmektedir.
Örneğin tamamen aynı yönü gösteren, yani tamamen biribiri ile aynı olan iki vektör için kosinüs değeri 1 olacaktır ( cos(0) = 1 ) . Tamamen biribiri ile ilişkisiz olan vektörler için ise kosinüs değeri 0 olacaktır ( cos(90) = 0, orthogolan vectors (dik vektörler) ). Son olarak tamamen birbirini zıddı olan dokümanlar için, ki bu dokümanlar için aralarında ilişki yoktur denemez, kosinüs değeri -1 olacaktır ( cos(180) = -1 ) Diğer bütün değerler, +1 ile -1 arasında yer alacaktır. Dolayısıyla iki doküman arasındaki benzerlik bu yöntemle sayısallaştırılabilir.
Ayrıca vektörlerin doğrusal bağımlılığı konusunda da analiz için kullanılabilir.
Örnek: Yukarıda anlatılan konuyu bir örnek üzerinden açıklamaya çalışalım. Örneğin iki dokümanımız olsun (örnek açısından kısa tutacağım) ve bu dokümanlar arasındaki kosinüs benzerliğini bulmaya çalışalım:
Dok1 : Şadi bilgisayar kavramlarında yazıyor.
Dok2 : bilgisayar kavramlarında kosinüs benzerliği yazıyor.
Bu iki dokümandan özellik çıkarımı yapılması gerekir. Bu aşamada çok çeşitli özellikler kullanılabilir ve hepsi de kosinüs benzerliğine parametre olabilir. Ben basitlik açısından terim frekansını (term frequency) kullanacağım ve iki dokümanda da geçen terimlerin sayılarını bir vektörde göstermeye çalışacağım.
Terimlerimiz: {şadi, bilgisayar, kavramlarında, kosinüs, benzerliği, yazıyor}
Bu terimlerin dokümanlarda kaçar kere geçtiğini bir vektör ile gösterecek olursak:
Dok1: [1,1,1,0,0,1]
Dok2: [0,1,1,1,1,1]
şeklinde gösterilebilir. Şimdi bu iki vektör arasındaki kosinüs değerini hesaplayalım. Burada biraz matematik bilgilerimize geri dönüp formülü hatırlıyoruz:
Burada iki vektör arasındaki kosinüs bağlantısı için iki vektörün çarpımının (dot product) iki vektörün boylarının çarpımına oranı alınmıştır.
Şimdi çarpımı hatırlayalım. Boyutların ayrı ayrı çarpılmasından elde edilen değerlerin toplamıdır. Yani örnek vektörlerimiz için
dot(d1,d2) = [1,1,1,0,0,1].[0,1,1,1,1,1] = (1)*(0) + (1)*(1) + (1)*(1) + (0)*(1) + (0)*(1) + (1)*(1) = 3
sonucu elde edilir. Bu sonuç iki vektörün noktasal çarpımıdır (dot product).
Şimdi vektörlerin boyutlarını hesaplayabiliriz. Bunun için öklit uzayından (euclidean space) faydalanıyoruz ve her boyuttaki değerlerinin karelerini toplayarak toplamın karekökünü alıyoruz.
||d1|| = sqrt((1)^2 + (1)^2 + (1)^2 + (0)^2 + (0)^2 + (1)^2) = 2
||d2|| = sqrt((0)^2 + (1)^2 + (1)^2 + (1)^2 + (1)^2 + (1)^2) = 2.2360679775
olarak boyutları da hesaplanmış oluyor. Son olarak formülde değerleri yerine koyduğumuz zaman:
cos(d1,d2) = dot(d1,d2) / (||d1|| ||d2||) = 3 / ( 2 x 2.2360679775) = 3 / 4.472135955 = 0.67082039325
olarak iki doküman arasındaki kosinüs benzerliğini bulmuş oluyoruz. Yani bu iki dokümanın kosinüs benzerliğine göre %67’si benzerdir demek yanlış olmaz.
Merhaba,
Yıldız Teknik Universitesinde, Bilgi Teknolojileri okumaktayım. Doküman benzerliğini hesaplayan bir proje ödevim var. İki doküman girilip, Kosünüs benzerliği ile dokümanların birbirine yüzde kaç oranında benzediğinin çıkarıldığı. Elinizde bu konu da bana yardımcı olacak bir kaynak var mıdır? Yardımcı olursanız çok memnun olurum.
Elbette, en kısa sürede bu sorunuza cevap olacak bir video hazırlayıp youtube kanalında yayınlayacağım. Videoyu buradan da paylaşırım.
konu ile ilgili bir video çekip yazının içerisine ekledim. Umarım yardımcı olur. Başarılar
Şadi Hocam merhaba,
Bilgisayar Mühendisliği öğrencisi olarak Bitirme Çalışması için “Dökümanlar Arası Benzerlik Hesaplama Yöntemleri” konulu bir proje aldım.İnternette başta sizin blogunuz olmak üzere birçok döküman ve bilgi mevcut fakat nerden nasıl başlayacağımı ayrıca yapacağım bitirmede uygulama olarak juriye ne sunucağımı bilmiyorum.Her ne kadarda teorik olarak sürece hakim olsak da uygulama olarak ne yapılabilir hangi program vb. kullanılabilir.
Sayın Hocam şimdiden teşekkür eder,bilgilerinizle yol göstermenizi arz ederim.