Anahtar kelime araması, yazdığınız sözcükleri içeren belgeleri getirir. Anlamsal arama ise farklı sözcükler kullansalar bile sorduğunuz şeyi anlatan belgeleri getirir. Ajanlarda ve erişimle güçlendirilmiş üretimde (RAG) varsayılan erişim katmanı hâline geldi; bu da anahtar kelime aramasının düşmediği tuzaklara düşebildiğini unutmayı kolaylaştırıyor. Bu yazıda embedding'lerin nasıl çalıştığını, anlama dayalı erişimin nerede bozulduğunu, üretimdeki sistemlerin çoğunun onu neden anahtar kelimeyle birlikte kullandığını ve tüm bunların işe yarayıp yaramadığını nasıl ölçeceğinizi anlatıyoruz.
Anahtar kelime aramasının bıraktığı boşluk
Sözcüksel (lexical) arama, terimleri normalleştirdikten sonra eşleştirir ve belgeleri bu terimlerin ne sıklıkla ve ne kadar ayırt edici biçimde geçtiğine göre sıralar. Hızlıdır, öngörülebilirdir ve kesin eşleşme gereken işlerde çok iyidir. Ama harfiyen çalışır. "Üyeliğinizi sonlandırma" başlıklı bir yardım makalesi, "planımı nasıl iptal ederim?" sorusuyla anlamlı tek bir sözcük paylaşmaz; saf bir anahtar kelime motoru onu hiç listelemeyebilir. Kullanıcılar ve ajanlar sorularını belgelerin yazıldığı gibi kurmaz. Anlamsal arama tam da bu sözcük uyuşmazlığını gidermek için geliştirildi.
Anahtar kelime araması kendi sahasında hâlâ üstündür: ürün kodları, E-4012 gibi hata kimlikleri, kişi adları, madde numaraları, tırnak içindeki ifadeler ve nadir teknik terimler. Onu tamamen devreden çıkaran her tasarım bu güçlü yanlardan vazgeçmiş olur.
Embedding anlamı nasıl yakalar
Bir embedding modeli, bir metin parçasını vektöre, yani sabit uzunlukta bir sayı listesine dönüştürür. Model, anlamca benzer metinler bu uzayda birbirine yakın, ilgisiz metinler ise uzak düşecek şekilde eğitilir. Benzerlik böylece geometrik bir soruya dönüşür ve genellikle kosinüs benzerliği ya da nokta çarpımıyla ölçülür.
embed("Üyeliğinizi sonlandırma") -> [0.12, -0.40, 0.88, ...]
embed("planımı nasıl iptal ederim?") -> [0.10, -0.37, 0.91, ...]
embed("Bölgelere göre çeyreklik gelir") -> [-0.66, 0.21, 0.05, ...]
kosinüs(birinci, ikinci) yüksek anlamca yakın, ortak sözcük yok
kosinüs(birinci, üçüncü) düşük farklı konu
Bundan üç pratik sonuç çıkar. Sorgular ve belgeler aynı modelle vektöre çevrilmelidir; farklı modellerin vektörleri birbiriyle karşılaştırılamaz. Modeli değiştirmek, tüm koleksiyonu yeniden vektörleştirmek demektir. Ve model yalnızca eğitildiği dili bilir; hukuk, tıp ya da kendi ürününüze özgü uzmanlık terimleri zayıf temsil edilebilir.
Belgeler nadiren bütün olarak vektöre çevrilir. Tek bir vektörün tek bir fikri temsil edebileceği kadar küçük pasajlara (chunk) bölünür. Pasaj boyutu gerçek bir ödünleşimdir: çok küçük pasajlar bağlamı kaybeder, çok büyük olanlar birkaç konuyu tek bir vektörde bulanıklaştırır. Belge başlığını ve bölüm başlığını her pasajla birlikte tutmak, kaynak, tarih ve proje gibi üst verileri eklemek hem erişimi hem de atıfı çok daha güvenilir kılar.
Erişim hattı
- Dizinleme anı. Belgeleri pasajlara bölün, her pasajı vektöre çevirin ve vektörleri üst verileriyle birlikte bir vektör dizininde saklayın.
- Sorgu anı. Soruyu aynı modelle vektöre çevirin ve dizinden en yakın pasajları isteyin.
- Filtreleme. Sonuçları proje, dil, tarih aralığı ve her şeyden önce erişim yetkisi gibi üst verilere göre daraltın. Yetki filtrelerini model herhangi bir şey görmeden önce uygulayın; görmemesi gereken metni modelin görmezden geleceğine asla güvenmeyin.
- Yeniden sıralama. İsterseniz en iyi adayları bir yeniden sıralayıcıya (reranker) verin; bu bileşen sorguyu ve her pasajı birlikte okur ve onları yalnızca vektör uzaklığının sağlayabileceğinden daha isabetli sıralar.
- Kaynakla birlikte döndürme. Pasajları her birinin nereden geldiğini gösteren bir işaretçiyle teslim edin; böylece yanıt onlara atıf yapabilir, okuyan da kontrol edebilir.
Anlamsal arama nerede yanılır
- Kesin kimlikler. Tek hanesi farklı iki fatura numarası, bir embedding modeline neredeyse aynı görünür.
- Olumsuzluk ve kısıtlar. "Otomatik yenilemesi olmayan sözleşmeler" sorgusu, konu vektöre baskın geldiği için otomatik yenilemeden söz eden sözleşmeleri getirme eğilimindedir.
- İlgili ama yanıt vermeyen. Aynı konudan söz eden ama soruyu yanıtlamayan bir pasaj, yanıtı veren kısa bir pasajdan daha yüksek puan alabilir.
- Her zaman bir şey döner. En yakın komşu araması, hiçbiri ilgili olmasa bile en iyi sonuçlarını döndürür. Bir eşik ya da kontrol yoksa sistem "hiçbir şey bulunamadı" diyemez ve bir ajan zayıf eşleşmeler üzerine gönül rahatlığıyla yanıt kurar.
- Kalibre edilmemiş puanlar. Benzerlik puanları olasılık değildir; modelden modele, koleksiyondan koleksiyona kayar. Başka bir yerden kopyalanan sabit bir eşik sizin sisteminize taşınmaz.
- Bayat vektörler. Vektöre çevrildikten sonra düzenlenen belgeler ya da koleksiyonun yalnızca bir kısmına uygulanan model güncellemesi, dizini sessizce tutarsız bırakır.
Hibrit arama: iki sinyali birlikte kullanın
Hibrit arama, bir anahtar kelime sorgusunu ve bir vektör sorgusunu yan yana çalıştırır ve iki sıralı listeyi birleştirir. Basit ve sağlam bir birleştirme yolu, karşılıklı sıra füzyonudur (reciprocal rank fusion). Yalnızca her listedeki konumları kullandığı için anahtar kelime puanlarını vektör puanlarıyla karşılaştırılabilir hâle getirmeniz gerekmez:
anahtar kelime sonuçları: D7, D2, D9, D4
vektör sonuçları: D2, D5, D7, D1
füzyon puanı(d) = her liste için 1 / (k + d'nin o listedeki sırası) toplamı
(k bir yumuşatma sabitidir)
birleşik sıra: D2, D7, D5, D9, ...
D2 ve D7, iki yöntem de onları bulduğu için yükselir; D5 yalnızca anlam sayesinde, D9 ise yalnızca anahtar kelime sayesinde listede kalır. Ham puanları ağırlıklandırarak harmanlamak da bir seçenektir ama dikkatli bir normalleştirme ister. Birçok sistem sorguları ayrıca yönlendirir: kimlik numarasına benzeyen bir dizge anahtar kelimeye, uzun bir doğal dil sorusu vektörlere yaslanır. Birleşik liste üzerinde çalışan bir yeniden sıralayıcı, çoğu zaman iki erişim yöntemini daha fazla ince ayarlamaktan daha çok katkı sağlar.
Erişim nasıl değerlendirilir
Ölçüm olmadan anlamsal arama bir görüş meselesi olarak kalır. Gerçek sorulardan, tercihen kayıtlardan ya da sistemi kullanacak kişilerden küçük bir test seti oluşturun ve her soruyu gerçekten yanıtlayan pasajları etiketleyin. Zor durumları bilerek ekleyin: ortak sözcük içermeyen yeniden ifadeler, kimlik aramaları, olumsuz sorgular ve koleksiyonun yanıtlayamayacağı sorular.
sorgu: "hangi tedarikçi sözleşmeleri kendiliğinden yenileniyor?"
ilgili: sozlesmeler/tedarikci-a.pdf#page=7
sozlesmeler/tedarikci-d.pdf#page=3
durum: yeniden ifade (madde metni "birbirini izleyen dönemler için uzar" diyor)
beklenti: iki pasaj da ilk 5 içinde; üstlerinde ilgisiz sözleşme yok
sorgu: "Ankara ofisinde imzalanan sözleşmeler"
ilgili: yok
durum: bu koleksiyonda yanıtlanamaz
beklenti: boş sonuç ya da açık bir "hiçbir şey bulunamadı"
Standart ölçüler çalıştırmaları karşılaştırmanıza yardım eder: k'da recall (doğru pasaj ilk k sonuç içinde mi), precision, ortalama karşılıklı sıra (MRR) ve dereceli ilgililik için nDCG. Anahtar kelime, vektör ve hibrit yapılandırmalarını aynı sete karşı çalıştırın ve yalnızca ortalamaya değil, durum türüne göre başarısızlıklara bakın. Erişimi ve nihai yanıtı ayrı ayrı değerlendirin; iyi bir pasaj da yanlış alıntılanabilir. Pasajlama, embedding modeli, filtreler ya da yeniden sıralayıcı her değiştiğinde seti yeniden çalıştırın. Yöntemi aramayı değerlendirme rehberi ve web aramasını kendi sorgularınızla değerlendirme yazısı daha derinlemesine ele alıyor; bu sayıların neyi söyleyip neyi söyleyemeyeceğini ise recall ve doğruluğu değerlendirme yazısı tartışıyor.
GoCux'ta anlamsal erişim
GoCux'ta Bilgi arama, tek bir projenin dokümanlarıyla sınırlı bir soruyu yanıtlar. Bir doküman içeri aktarıldıktan sonra tam metin arama hemen çalışır; anlamsal erişim ise kullanılabilir olduğunda kendi sonuçlarını ekler. Böylece anahtar kelime ve anlam birbirinin yerine geçmek yerine birlikte çalışır. Sonuçlar atıflı pasajlar olarak gelir. Atıf kanıtın yerini gösterir ama iddiayı kanıtlamaz; pasajın, yanıtın ona yüklediği şeyi gerçekten söyleyip söylemediğini okuyan kişi yine kontrol eder. Boş sonuç geçerli bir yanıt sayılır; kullanılamayan bir arama ise kullanılamıyor olarak bildirilir, asla "hiçbir şey bulunamadı" kılığına sokulmaz. Ayrıntılar Bilgi arama sayfasında ve sağlam atıflar yazısında.
Anlamsal arama özelliği için kontrol listesi
- Kimlikler, adlar ve kesin ifadeler için bir anahtar kelime yolu tutuyor musunuz?
- Belgeler ve sorgular için aynı embedding modeli mi kullanılıyor; model sürümü her vektörle birlikte kaydediliyor mu?
- Her pasaj belge başlığını, bölümünü ve kaynağını taşıyor mu?
- Yetki filtreleri, sonuçlar modele ulaşmadan önce uygulanıyor mu?
- Sistem en az kötü eşleşmelerini sunmak yerine "hiçbir şey bulunamadı" diyebiliyor mu?
- Yeniden ifadeler, olumsuz sorgular ve yanıtlanamayan sorular içeren etiketli bir test setiniz var mı?
- Pasajlama, model, filtre ya da sıralamadaki her değişiklikten sonra bu seti yeniden çalıştırıyor musunuz?
Bu iş akışını çalışma alanınıza taşıyın.
Kapsamı belirleyin. Kanıtları inceleyin. Gereken adımları onaylayın.