Ana içeriğe geç

RDocumentation: Puanlama ve Sıralama

RDocumentation’daki arama sonuçlarının nasıl üretildiğini öğrenin!
Ludovic Vannoorenberghe
Ludovic Vannoorenberghe

Ücretsiz Hesabınızı Oluşturun

Alıştırma and program your progress.

Google ile devam edinDevam ederek, Kullanım Koşullarımızı ve Gizlilik Politikamızı kabul etmiş ve verilerinizin ABD'de saklandığını onaylamış olursunuz.

RDocumentation.org’un temel özelliklerinden biri arama işlevselliğidir. En başından beri, paket adı, fonksiyon adı, sürümler veya başka bir şey soran karmaşık bir form olmadan, aradığınızı bulan son derece basit bir arama çubuğuna sahip olmak istedik. Sadece basit bir arama çubuğu.

Bugünkü teknik blog yazımızda, kullanıcılara ilgili ve anlamlı sonuçlar sunmak için kullandığımız teknoloji ve teknikleri öne çıkaracağız.

Elasticsearch

RDocumentation.org, tüm R paketlerini ve konuları indekslemek ve bunlarda arama yapmak için Elasticsearch kullanır.

Elasticsearch, açık kaynaklı, ölçeklenebilir, dağıtık, kurumsal düzeyde bir arama motorudur.

Elasticsearch, dokümantasyon sorgulamak için idealdir; çünkü geleneksel SQL verisi kullanmaz, bunun yerine belgeleri JSON benzeri bir veri yapısında saklar. Her belge, basit veri türlerinden (metinler, sayılar, listeler, tarihler, …) oluşan anahtar-değer çiftlerinin bir kümesidir. Dağıtık yapısı sayesinde Elasticsearch son derece hızlı olabilir.

Bir Elasticsearch kümesi birden fazla indeks içerebilir ve her indeks birden fazla belge türü barındırabilir. Bir belge türü, belgenin yapısının nasıl görünmesi gerektiğini tanımlar. Elasticsearch türleri hakkında daha fazla bilgi edinmek için elastic.co rehberine göz atabilirsiniz.

RDocumentation.org üç farklı tür kullanır: package_version, topic ve package. Ilk ikisi ana türlerdir; package’ı daha sonra tartışalım.

RDocumentation.org açık kaynaklı olduğundan, Elasticsearch eşlemelerini github depomuzda görebilirsiniz. 

package_version türü

package_version türü, bir paketin DESCRIPTION dosyasının bir çevirisi gibidir; burada bulunan ana alanları içerir: package_name, version, title, description, release_date, license, url, copyright, created_at, updated_at, latest_version, maintainer ve collaborators. maintainer ve collaborators, DESCRIPTION dosyasındaki Authors alanından çıkarılır.

topic türü

Konu (topic) belgeleri, R’deki standart dokümantasyon formatı olan Rd dosyalarından ayrıştırılır. topic türü şu anahtarlara sahiptir: name, title, description, usage, details, value, references, note, author, seealso, examples, created_at, updated_at, sections, aliases ve keywords.

Elasticsearch’te puanlama

Herhangi bir puanlama yapmadan önce, Elasticsearch önce belgenin sorguyla gerçekten eşleşip eşleşmediğini kontrol ederek aday kümesini küçültmeye çalışır. Temelde bir sorgu, bir kelime (veya bir kelime grubu) olur. Sorgu ayarlarına bağlı olarak Elasticsearch, belirli türlerin belirli alanlarında eşleşme arar.

Ancak bir eşleşme, belgenin mutlaka ilgili olduğu anlamına gelmez; aynı kelime farklı bağlamlarda farklı anlamlara gelebilir. Sorgu ayarlarına göre türe ve alana göre filtreleyebilir ve daha fazla bağlamsal bilgi ekleyebiliriz. Bu bağlamsal bilgi, ilgililiği artırır ve işte puanlama burada devreye girer.

Elasticsearch, kaputun altında Lucene kullanır; dolayısıyla puanlama, Lucene’in Pratik Puanlama Fonksiyonuna dayanır ve bu fonksiyon, belgeyi puanlamak için TF-IDF, Vektör Uzayı Modeli ve Boolean Modeli gibi bazı modelleri bir araya getirir.

Bu fonksiyonun Elasticsearch’te nasıl kullanıldığı hakkında daha fazla bilgi edinmek isterseniz, elastic.co rehberinin bu bölümüne göz atabilirsiniz.

İlgililiği artırmanın bir yolu da bazı alanlara ek ağırlık (boost) uygulamaktır. Örneğin, RDocumentation.org tam metin aramasında, paketler için doğal olarak package_name ve title, konular içinse aliases ve name alanlarını güçlendiririz.

İlgililiği artırmanın bir başka etkili yolu da belgeleri popülerliklerine göre güçlendirmektir. Bunun arkasındaki fikir, bir paket daha popülerse, kullanıcının da bu paketi arama olasılığının daha yüksek olmasıdır. Daha popüler paketleri önce göstermek, kullanıcının aslında aradığı şeyi göstermemiz olasılığını artıracaktır.

Popülerlik ölçütü olarak indirmeleri kullanma

Popülerliği ölçmenin birden fazla yolu vardır. Kullanıcıların verdiği oylar veya sıralamalar gibi doğrudan ölçütleri (Amazon ürünlerindeki puanlar gibi) ya da satılan ürün sayısı veya görüntüleme sayısı (YouTube videoları için) gibi dolaylı ölçütleri kullanabiliriz.

RDocumentation.org’da biz ikincisini seçtik. Daha spesifik olarak, popülerlik ölçütü olarak indirme sayısını kullanıyoruz. Dolaylı ölçütler, genellikle aktif kullanıcı girdisi gerektirmediği için toplaması daha kolaydır.

Zaman aralığı

İndirme sayısını kullanırken ortaya çıkan bir sorun, eski paketlerin doğal olarak yeni paketlerden daha fazla toplam indirmeye sahip olmasıdır. Bu, onların daha popüler olduğu anlamına gelmez; yalnızca daha uzun süredir ortadadırlar. Ya bir paket yıllar önce çok popülerdi ancak şimdi demode oldu ve artık topluluk tarafından aktif olarak kullanılmıyor ise?

Bu sorunu çözmek için yalnızca son aydaki indirme sayılarını dikkate alıyoruz. Böylece eski paketlerin popülerlik puanı yapay olarak yükseltilmez ve demode paketler hızla geride kalır.

Doğrudan ve dolaylı indirmeler

Ters bağımlılıklardan kaynaklanan başka bir sorun daha vardır. R paketleri genellikle çok sayıda başka pakete bağımlıdır. Çok sayıda ters bağımlılığı olan paketler, diğerlerinden çok daha fazla indirilecektir. Ancak bu paketler tipik olarak daha düşük seviyelidir ve son kullanıcı tarafından doğrudan kullanılmaz. İndirme sayılarına gereğinden fazla ağırlık vermemeye dikkat etmeliyiz.

Örneğin Rcpp’yi ele alalım. CRAN”aki (kapsamlı R arşiv ağı) paketlerin yüzde 70’inden fazlası bu pakete bağımlıdır; bu da onu açıkça en çok indirilen R paketi yapar. Ancak, doğrudan bu paketi kullanacak ve dokümantasyonunu arayacak R kullanıcılarının sayısı oldukça azdır.

Bu sorunu çözmek için doğrudan indirmeleri (kullanıcı talebiyle gerçekleşen indirmeler) ve dolaylı indirmeleri (bağımlı bir paket indirildiği için gerçekleşen indirmeler) ayırmamız gerekiyordu. CRAN günlüklerindeki doğrudan ve dolaylı indirmeleri ayırt etmek için, Arun Srinivasan’ın cran.stats paketinde açıklanan aynı sezgisel yöntemi kullanıyoruz.

Artık anlamlı bir popülerlik metriğine sahibiz: son aydaki doğrudan indirme sayısı. Elasticsearch, bu ek bilgiyi eklemek için kolay bir yol sağlar; daha fazla bilgi için elastic.co’daki bu makaleye göz atın.

Puan şu şekilde değiştirilir:

new_score = old_score * log(1 + number of direct downloads in the last month)

log() fonksiyonunu, indirme sayısı değerini yumuşatmak için kullanıyoruz; çünkü her bir sonraki indirme daha az ağırlığa sahiptir. 0 ile 1000 indirme arasındaki fark, 100.000 ile 101.000 indirme arasındaki farktan popülerlik puanı üzerinde daha büyük bir etki yapmalıdır.

Bu yeniden puanlama, RDocumentation.org’un sunduğu arama sonuçlarının genel ilgililiğini artırır ve bunun sonucunda kullanıcılar aramak yerine dokümantasyon okumaya odaklanabilir.

Elasticsearch sorgusunun tam olarak nasıl uygulandığını öğrenmek isterseniz, GitHub’daki RDocumentation projesine göz atabilirsiniz. Sorgunun kendisi SearchController içinde yer alır.

RDocumentation.org’un nasıl uygulandığı hakkında daha fazla bilgi edinmek için depolarımıza göz atın:



RDocumentation hakkında  

RDocumentation, en güncel R dokümantasyonunun üç yaygın kaynağı olan CRAN, BioConductor ve GitHub’daki R paketlerine ait yardım dokümantasyonunu bir araya getirir. Ancak RDocumentation.org, bu bilgileri yalnızca bir araya getirmekle kalmaz; tüm bu dokümantasyonu RDocumentation paketi aracılığıyla parmaklarınızın ucuna getirir. RDocumentation paketi, utils paketindeki temel yardım işlevlerinin üzerine yazar ve RStudio IDE’nizin rahatlığında RDocumentation.org’a erişmenizi sağlar. En yeni ve en popüler R paketlerine bakın, dokümantasyon içinde arama yapın ve topluluk örneklerini paylaşın. 

Konular

İlgili