Yoğun ve Seyrek Getirme: Ödünleşimler
Yoğun gömmelerin tam anahtar sözcük eşleşmelerini, BM25'in ise anlamsal yeniden ifadeleri hangi durumlarda kaçırdığını ve ikisini birleştirmenin neden sürekli olarak tek başına kullanımdan daha iyi sonuç verdiğini anlayın.
Yoğun ve Seyrek Getirme: Ödünleşimler, CoddyKit'te ücretsiz bir AI Engineering Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, AI Engineering Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. AI Engineering Academy kursu toplamda 4 dersten oluşur.
Temel Olarak Farklı İki Getirme Sinyali
Modern getirme sistemleri iki farklı sinyale dayanır: yoğun getirme, anlamı sürekli vektör uzaylarında kodlarken seyrek getirme, tam terim oluşumlarını sayar. Bu sinyaller birbirini tamamlar, birbirinin yerine geçmez. Her birinin güçlü ve zayıf yönlerini anlamak, ikisini etkili biçimde kullanan bir sistem oluşturmanın ilk adımıdır.
Yoğun Gömmeler Nasıl Çalışır
Yoğun getirme, hem sorguyu hem de her belgeyi bir sinirsel kodlayıcı kullanarak yüksek boyutlu bir vektöre dönüştürür. Benzerlik, vektörler arasındaki kosinüs uzaklığı veya nokta çarpımıyla ölçülür. Kodlayıcı büyük metin derlemleri üzerinde eğitildiğinden, anlamsal olarak ilişkili ifadeler ortak hiçbir kelime paylaşmasalar bile vektör uzayında birbirine yakın konumlanır; yoğun getirmenin temel avantajı budur.
from openai import OpenAI
import numpy as np
client = OpenAI()
def embed(text: str) -> list[float]:
resp = client.embeddings.create(
model='text-embedding-3-small',
input=text,
)
return resp.data[0].embedding
def cosine_similarity(a, b):
a, b = np.array(a), np.array(b)
return float(np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b)))
q = embed('How do I cancel my subscription?')
d = embed('Steps to unsubscribe from the service')
print(cosine_similarity(q, d)) # high similarity despite different wordsYoğun Getirme Nerede Başarısız Olur
Yoğun modeller, kodlayıcı eğitimi sırasında yeterince temsil edilmeyen nadir terimlerde zorlanır. RTX-4090-Ti-OC gibi belirli bir ürün model numarası, tıbbi bir ilaç adı veya kuruma özgü bir iç tanımlayıcı içeren sorgular, kodlayıcının bu belirteç dizisi için öğrenilmiş bir temsili olmaması nedeniyle çoğu zaman doğru belgeyle eşleşmez. Vektör, gömme uzayında işe yaramayan bir konuma düşer.
Seyrek BM25 Getirmesi Nasıl Çalışır
BM25 (Best Matching 25), belgeleri sorgu terimlerinin belgede ne sıklıkta göründüğüne göre puanlayan; belge uzunluğuna göre normalleştirme ve terim sıklığı doygunluğuna göre azaltma uygulayan olasılıksal bir sıralama işlevidir. Seyrek bir puan vektörü üretir; belgeler söz varlığının yalnızca küçük bir bölümünü içerdiğinden boyutların çoğu sıfırdır.
# BM25 scoring formula (conceptual)
# score(D, Q) = sum over query terms t of:
# IDF(t) * (tf(t,D) * (k1 + 1)) / (tf(t,D) + k1 * (1 - b + b * |D|/avgdl))
# k1 controls term frequency saturation (typically 1.2-2.0)
# b controls document length normalization (typically 0.75)
# IDF(t) = log((N - df(t) + 0.5) / (df(t) + 0.5))
# N = total documents, df(t) = documents containing term t
# tf(t,D) = frequency of t in document D, |D| = doc length, avgdl = average doc lengthBM25'in Güçlü Yönleri: Tam Terimler ve Jargon
BM25, tam olarak eşleşmesi gereken kesin teknik terimler, ürün adları, hata kodları ve sayısal tanımlayıcılar içeren sorgularda başarılıdır. ORA-01017 (bir Oracle hata kodu) sorgusu, bu tam dizeyi içeren belgeleri veritabanı kimlik doğrulamasını genel olarak ele alan belgelerin çok üzerinde sıralar. Bu, söz konusu kodu daha önce hiç görmemiş yoğun bir model için mümkün değildir.
from rank_bm25 import BM25Okapi
corpus = [
'Oracle database ORA-01017 invalid username or password logon denied',
'Database authentication and connection troubleshooting guide',
'How to resolve login errors in Oracle and MySQL databases',
]
tokenized_corpus = [doc.lower().split() for doc in corpus]
bm25 = BM25Okapi(tokenized_corpus)
query = 'ORA-01017 error fix'
scores = bm25.get_scores(query.lower().split())
print(dict(zip(range(len(corpus)), scores)))
# doc 0 scores highest because it contains ORA-01017BM25 Nerede Başarısız Olur: Yeniden İfadeler ve Eş Anlamlılar
BM25, anlamsal yeniden ifadeleri algılayamaz. 'automobile engine repair' hakkında bir belge, tam kelimelerin hiçbiri örtüşmediği için 'car motor maintenance' sorgusu için sıfır puan alır. Bazen sözcüksel boşluk olarak adlandırılan bu söz varlığı uyuşmazlığı sorunu, yalnızca aynı fikri ifade etmek için farklı kelimeler kullandığı için ilgili içeriğin büyük bölümünü kaçırır.
from rank_bm25 import BM25Okapi
corpus = [
'automobile engine repair and maintenance tips',
'car motor maintenance guide for beginners',
'vehicle powertrain service intervals',
]
tokenized = [doc.split() for doc in corpus]
bm25 = BM25Okapi(tokenized)
scores = bm25.get_scores(['car', 'motor', 'maintenance'])
print(scores)
# doc 1 scores high, doc 0 and 2 score lower despite being semantically relatedKarşılaştırma Kanıtı: Hibrit Yaklaşım Sürekli Kazanıyor
BEIR, MS MARCO ve kurumsal soru-cevap veri kümeleri üzerindeki karşılaştırmalar, hibrit getirmenin tek başına yoğun veya seyrek getirmenin her ikisinden de daha iyi sonuç verdiğini ve NDCG@10 ölçütünde sürekli olarak yüzde 5-15 iyileşme sağladığını gösterir. İyileşme, olgusal aramaların (BM25'in yardımcı olduğu) ve yeniden ifade sorgularının (yoğun gömmelerin yardımcı olduğu) birlikte bulunduğu veri kümelerinde en büyüktür. Tüm sorgu türlerinde tek bir getirme yöntemi üstün değildir.
Sorgu Türü Analizi: Hangi Getirici Kazanır
Sorgu türünü analiz ederek hangi getiricinin daha iyi performans göstereceğini öngörebilirsiniz. Yoğun getirme; kavramsal sorularda, yeniden ifadelerde ve geniş konu sorgularında başarılıdır. BM25; özel adlar, sürüm numaraları, kod parçacıkları, kısaltmalar ve nadir teknik terimler içeren sorgularda başarılıdır. Sorgu türü önceden bilinmediğinde (üretim ortamında bu neredeyse her zaman böyledir) hibrit yaklaşım her zaman kazanır.
# Query type heuristics
def predict_retriever_advantage(query: str) -> str:
tokens = query.split()
has_numbers = any(t[0].isdigit() for t in tokens)
has_uppercase_acronyms = any(t.isupper() and len(t) > 2 for t in tokens)
is_short = len(tokens) <= 4
if has_numbers or has_uppercase_acronyms:
return 'BM25 likely wins (exact terms)'
elif is_short:
return 'Dense likely wins (semantic matching needed)'
else:
return 'Hybrid recommended (mixed signals)'Puanların Uyumsuzluğu Sorunu
Yoğun ve seyrek sonuçları birleştirmek, puanları uyumsuz ölçeklerde olduğu için kolay değildir. Kosinüs benzerliği -1 ile 1 arasında değerler üretirken BM25, derlem boyutuna bağlı olarak sınırsız pozitif puanlar üretir. Bunları doğrudan toplayamazsınız. Standart çözüm, puan tabanlı birleştirme yerine sıralama tabanlı birleştirme kullanmaktır; yani ham puanlar yerine sıralanmış listeleri birleştirmektir.
Her Birini Ne Zaman Kullanmalı: Uygulamaya Yönelik Karar
Derleminiz dar bir alana aitse, kelime dağarcığı tutarlıysa ve farklı ifadeler arasındaki anlamsal genellemeye ihtiyacınız varsa yalnızca yoğun aramayı kullanın. Sorgular çoğunlukla tam tanımlayıcılarla yapılan arama türündeyse ve veri kümeniz kaba kuvvet aramasını mümkün kılacak kadar küçükse yalnızca BM25 kullanın. Sorgu türlerinin değiştiği tüm üretim RAG sistemlerinde hibrit yaklaşımı kullanın; ek yük sınırlıdır ve geri çağırma artışı önemlidir.
Performans ve Altyapı Tercihleri
Yoğun arama, GPU hızlandırmalı yaklaşık en yakın komşu araması veya bir vektör veri tabanı gerektirir; bu da altyapı maliyetini artırır. BM25 tamamen CPU üzerinde, ters dizin kullanarak çalışır ve son derece hızlıdır. Hibrit arama, her iki altyapı bileşeninin yanı sıra birleştirme adımını da gerektirir. Ek karmaşıklık, çoğu üretim kullanımında geri çağırmadaki artışla gerekçelendirilebilir; ancak altyapı bütçenizle dengelenmelidir.
Hızlı Kontrol
Bu derste ele alınan yoğun ve seyrek arama arasındaki tercihleri anlayıp anlamadığınızı test edin.
Ders Özeti
Bu derste şunları öğrendiniz: yoğun arama anlamsal anlamı yakalar ancak nadir ve tam eşleşen terimlerde başarısız olur; BM25 seyrek araması tam anahtar kelimeleri işler ancak farklı ifadeleri kaçırır; hibrit arama ise farklı sorgu türlerinde her iki yöntemi tek başına kullanmaktan sürekli olarak daha iyi sonuç verir. Puanları uyumsuzdur ve puanları toplamak yerine sıralama birleştirme yoluyla birleştirilmeleri gerekir. Sırada Python'da BM25 anahtar kelime aramasını uygulayacağız.
Yapay zeka eğitmeniyle Python öğren — ücretsiz
Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.
- Kurslar
- 30
- Dersler
- 120
Sıkça Sorulan Sorular
“Yoğun ve Seyrek Getirme: Ödünleşimler” dersi ücretsiz mi?
Evet — “Yoğun ve Seyrek Getirme: Ödünleşimler” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve AI Engineering Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. AI Engineering Academy kursu toplamda 4 dersten oluşur.
“Yoğun ve Seyrek Getirme: Ödünleşimler” dersinde ne öğreneceğim?
Yoğun gömmelerin tam anahtar sözcük eşleşmelerini, BM25'in ise anlamsal yeniden ifadeleri hangi durumlarda kaçırdığını ve ikisini birleştirmenin neden sürekli olarak tek başına kullanımdan daha iyi s… AI Engineering Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
AI Engineering Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te AI Engineering Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“Yoğun ve Seyrek Getirme: Ödünleşimler” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu AI Engineering Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her AI Engineering Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Yoğun ve Seyrek Getirme: Ödünleşimler
- BM25 Anahtar Sözcük Aramasını Uygulama
- Puan Birleştirme İçin Karşılıklı Sıra Birleştirme
- Pinecone ve pgvector'da Karma Arama