HizmetlerÜrünlerAI LabÜrün OrtaklığıProjelerHakkımızdaBlogİletişim ↗
Birlikte çalışalım ↗
← Journal

AI Engineering

Kaynaklı aramaya BM25 ile ilk adım

Knowledge deneyinde dört örnek belgeyi nasıl aradık? Bölümleme, Türkçe normalleştirme, sıralama ve kaynak incelemesini kendi uygulamamız üzerinden anlatıyoruz.

2 dk okumaWebsoftik
Yöntem şeması; model çıktısı değildir.
UYGULAMA VE KAPSAM

Knowledge deneyindeki kelime tabanlı arama uygulaması. Belgeler kurmaca; bu yazı bir dil modeli veya ticari asistanın başarısını ölçmez.

Önce hangi bölümü aradığımızı netleştirdik

AI Lab’da ilk sorumuz, bir kullanıcının ekip belgeleri içinde ilgili bölümü bulup bulamayacağıydı. Bu küçük kapsam için dört kurmaca belge yazdık ve bunları dokuz bölüme ayırdık. Her bölümün sabit bir kimliği, belge adı, başlığı, sürümü ve kaynak metni var.

Arama sonucu metni üretmiyor; mevcut bölümün metnini gösteriyor. Bu karar, sorgu ile bulunan kaynak arasındaki ilişkiyi ilk deneyde doğrudan incelememizi sağladı. Tam belgeye geçiş de bölümün bağlamını kontrol etmeye yarıyor.

Türkçe sorudan arama terimlerine

Sorguyu Türkçe kurallarla küçük harfe çeviriyor, harflerin aksanlı ve aksansız biçimlerini aynı arama yüzeyinde birleştiriyoruz. Sık kullanılan soru kelimeleri çıkarılıyor. Talep, erişim, onay gibi sınırlı bir kök listesi de bazı ekli biçimleri aynı terime indiriyor.

Bu liste genel bir Türkçe çözümleyici değil. Örneğin bir eş anlamlıyı yalnızca anlamı yakın olduğu için bulmaz. Normalleştirme kurallarını küçük koleksiyonun ihtiyaçlarıyla sınırlı tutuyor; eksik veya yanlış eşleşmeleri yeni sorgularla kontrol ediyoruz.

Uygulamadaki normalleştirme akışının ilk adımlarıTypeScript
text.toLocaleLowerCase("tr-TR")
  .replace(/ı/g, "i")
  .normalize("NFD")
  .replace(/[\u0300-\u036f]/g, "")

BM25 hangi eşleşmeyi öne alıyor?

BM25 sıralaması, sorgu teriminin bölümdeki tekrarını ve koleksiyondaki ayırt ediciliğini değerlendirir. Bölüm uzunluğu da hesaba girer. Böylece bir terimin geçtiği her bölüm aynı puanı almak zorunda kalmaz.

Bizim uygulamamız başlığı ve kaynak metnini birlikte arıyor; k1=1,2 ve b=0,75 kullanıyor. Pozitif IDF biçimimiz log(1 + (N − df + 0,5)/(df + 0,5)). N, seçili kapsamdaki bölüm sayısı; df, terimi içeren bölüm sayısı. En fazla üç pozitif eşleşme gösteriyoruz. Puanı bir doğruluk yüzdesine çevirmiyoruz.

Yöntem kaynağı: Stanford IR kitabı · BM25 sıralaması ↗

Kapsam filtresi ve kaynak bağlantısı

Operasyon veya ekip filtresi seçildiğinde, aranan koleksiyon ve sıralama istatistikleri o kapsama göre yeniden oluşuyor. Filtre yalnızca sonuç listesinin görünüşünü değiştirmiyor. Koleksiyonda kelime eşleşmesi yoksa açık bir boş durum gösteriliyor.

Bir sonuçtan kaynak paneli açıldığında belge içindeki diğer bölümler de görülebiliyor; seçili bölüm işaretleniyor. Klavye odağı panele, kapatınca da açan düğmeye dönüyor. Bu küçük ayrıntı, kaynağı inceleme akışını klavyeyle de takip edilebilir kılıyor. Örnek belgeler herkese açık; bu filtre gerçek kullanıcı yetkisi uygulamıyor.

Küçük bir sorgu setiyle neyi sınadık?

Sekiz örnek sorgu için beklediğimiz ilk bölümü tanımladık. Testler ayrıca Türkçe harf biçimlerini, kapsam dışında kalan kaynakları, boş sorguları ve bulunamayan terimleri kontrol ediyor. Sonucun gerçekten koleksiyondaki aynı kaynak nesnesine işaret ettiğini de doğruluyoruz.

Bu sorgu seti bir geriye dönüş kontrolü: kod değiştiğinde bilinen davranışın bozulduğunu gösterebilir. Genel arama kalitesi için daha çeşitli sorular ve ayrı bir değerlendirme koleksiyonu gerekir. Sonraki ürün kapsamını belirlerken kaynak doğruluğunu, kullanıcı ihtiyacını ve erişim sınırlarını ayrıca ele alacağız.