Dinamik Az Örnekli Seçim
Her sorgu için örnekleri alma.
Dinamik Az Örnekli Seçim, CoddyKit'te ücretsiz bir AI Prompt Engineering dersidir. Bu, 4 dersinin 4. 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 Prompt Engineering öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. AI Prompt Engineering kursu toplamda 4 dersten oluşur.
Statik Gösterimlerden Dinamik Gösterimlere
Statik az örnekli öğrenme, her sorgu için aynı örnekleri kullanır. Dinamik az örnekli öğrenme, her sorgu için bir havuzdan en ilgili gösterimleri erişir ve modeli mevcut girdiye benzeyen örneklerle koşullandırır.
Bu, erişim destekli bağlam içi öğrenmedir: gösterimlerin ilgililiğini artırır. Bu da özellikle heterojen isteklerde ICL kalitesi için en güçlü etkenlerden biridir.
class DynamicSelector:
def __init__(self, pool, embedder, index):
self.pool = pool # candidate demonstrations
self.embed = embedder
self.index = index # ANN index over pool embeddings
def select(self, query, k):
q = self.embed(query)
ids = self.index.search(q, k)
return [self.pool[i] for i in ids]Gösterim Havuzunu Gömme
Aday gösterimlerin her biri için gömme vektörlerini önceden hesaplayın ve bunları bir yaklaşık en yakın komşu dizininde (FAISS, HNSW veya bir vektör veritabanı) saklayın. Sorgu zamanında girdiyi bir kez embed edin ve en yakın eşleşmeleri alın.
Görevinizin anlamlarıyla uyumlu bir gömme modeli seçin; genel amaçlı bir gömücü, doğru etiketi öngören boyut yerine yüzeysel özelliklere göre kümelenebilir.
import numpy as np
def build_index(pool, embed):
vecs = np.stack([embed(d.input) for d in pool]).astype('float32')
vecs /= np.linalg.norm(vecs, axis=1, keepdims=True) # cosine via dot
index = HNSW(dim=vecs.shape[1])
index.add(vecs)
return indexkNN ile İstemleme
Temel yöntem (Liu ve ark., 2022), etiketli havuzdan sorgunun k en yakın komşusunu alır ve bunları gösterim olarak kullanır. Erişime dayalı seçim, rastgele seçimi tutarlı biçimde geride bırakır; çünkü ilgili gösterimler görevin daha iyi anlaşılmasını sağlar ve doğru etiket uzayını sunar.
Erişilen etiketler aynı zamanda yumuşak bir kNN sınıflandırıcısı önceliği görevi görerek modeli komşuların yanıtlarına doğru yönlendirir.
def knn_prompt(query, selector, k, build):
demos = selector.select(query, k)
demos = order_by_similarity(embed(query), demos) # most similar last
return build(demos, query)Çeşitliliği Gözeten Erişim
Salt en üst k seçimi birbirinin neredeyse aynısı olan sonuçlar döndürebilir ve bağlamı boşa harcayabilir. İlgililiği korurken seçilen gösterimlerin sorgunun farklı yönlerini kapsamasını sağlamak için erişilen adaylara MMR veya kümeleme uygulayın.
Bu, farklı alt yönlerin her biri için temsili bir gösterim gerektiren bileşimsel girdilerde özellikle önemlidir.
def diverse_retrieve(query, selector, k, pool_n=30, lam=0.7):
cand = selector.select(query, pool_n)
q = embed(query)
return mmr_against_query(cand, q, k, lam) # relevance + diversityGecikme ve Erişim Bütçesi
Dinamik seçim, her isteğe bir gömme çağrısı ve bir ANN araması ekler. Bunun için bütçe ayırın: tekrarlanan girdilerin sorgu gömmelerini önbelleğe alın, erişimleri toplu hâlde gerçekleştirin ve dizini bellekte tutun.
QPS değeri yüksek sistemlerde erişim adımı bir milisaniyeden kısa sürmelidir; aksi hâlde ilgililik kazanımı, ek kuyruk gecikmesiyle ortadan kalkar.
from functools import lru_cache
@lru_cache(maxsize=50_000)
def cached_embed(text):
return embed(text)
# Plus: warm in-RAM HNSW, batched search, async prefetchDinamik Gösterimlerle Önbelleğe Alma Çatışması
Dinamik gösterimler, örnek bloğu her sorguda değiştiği için istem ön eki önbelleğe almayı bozar. Bunu azaltmak için kararlı, önbelleğe alınmış bir giriş (yönergeler ve birkaç evrensel örnek) tutun ve yalnızca erişilen, sorguya özgü gösterimleri bunun arkasına ekleyin.
Bu yöntem, kuyruk bölümü için sorguya özgü ilgililiği korurken önbelleğe almanın sağladığı tasarrufların çoğunu geri kazandırır.
prompt = (
STATIC_PREAMBLE # cached: instructions + anchor demos
+ render(diverse_retrieve(query, selector, k)) # dynamic tail
+ format_query(query)
)Eğitim/Sınama Sızıntısından Kaçınma
Sorgunun kendisi havuzda bulunuyorsa (değerlendirme sırasında sık rastlanır), erişim tam yanıtı döndürebilir ve ölçümleri yapay olarak yükseltebilir. Değerlendirme sırasında her zaman sorguyu ve benzerlik eşiğini aşan neredeyse özdeş komşuları dışarıda bırakın.
Üretimde havuzdaki yinelenenleri kaldırın ve kullanıcının kendi önceki girdisinin gösterim olarak yeniden sunulmasına karşı önlem alın.
def leak_safe_select(query, selector, k, sim_cap=0.97):
cand = selector.select(query, k + 5)
q = embed(query)
cand = [d for d in cand if cos(q, d.emb) < sim_cap]
return cand[:k]Soğuk Başlangıç ve Havuzun Büyümesi
Başlangıçta havuz küçüktür ve erişim zayıf eşleşmeler döndürebilir. Seçilmiş bir statik kümeyle başlangıç yapın, ardından havuzu doğrulanmış üretim izlerinden büyütün; gömme vektörlerini yeniden oluşturup dizini belirli aralıklarla yeniden oluşturun.
Düşük değerli veya güncelliğini yitirmiş örnekleri ayıklayabilmek ve dizini yalın tutabilmek için her gösterimin kullanımını ve sonucunu izleyin.
def maybe_add_to_pool(trace, verified):
if verified and novelty(trace, index) > THRESH:
emb = embed(trace.input)
index.add(emb)
pool.append(Demo(trace.input, trace.output, trace.meta))Benzerliğin Ötesinde Seçim
En yakın komşu ilgililiği güçlü bir varsayılandır, ancak her zaman en iyi seçenek değildir. Gelişmiş seçiciler bilgilendiriciliği (gösterim sorgudaki belirsizliği gideriyor mu?), çeşitliliği ve etiket kapsamını dikkate alır. Bazı yöntemler ham benzerlik yerine sonraki aşamadaki doğruluğu en üst düzeye çıkaran bir seçim politikası öğrenir.
Seçimi, bu sorguda modelin belirsizliğini en fazla azaltan gösterim kümesini seçmek olarak ele alın.
def select_by_uncertainty_reduction(query, pool, k):
base = entropy(model_probs(build([], query)))
gains = []
for d in pool:
h = entropy(model_probs(build([d], query)))
gains.append((d, base - h)) # info gain per demo
return [d for d, _ in sorted(gains, key=lambda x: -x[1])[:k]]Dinamik İşlem Hattını Değerlendirme
Dinamik yaklaşımı, sızıntının kontrol edildiği ve eğitimde kullanılmayan veriler üzerindeki statik ve rastgele temel yöntemlerle karşılaştırın. Doğruluğu, erişim benzerliklerinin dağılımını, uçtan uca gecikmeyi ve önbellek isabet oranını raporlayın.
Doğrulukta kazanan ancak önbelleğin yeniden kullanılmasını büyük ölçüde azaltan dinamik bir sistem maliyet açısından net bir kayıp yaratabilir; yalnızca kaliteyi değil, hedefin tamamını değerlendirin.
def eval_pipeline(eval_set):
return {
'acc_dynamic': run(dynamic, eval_set),
'acc_static': run(static, eval_set),
'acc_random': run(random_sel, eval_set),
'p95_latency': latency_p95(),
'cache_hit': cache_hit_rate(),
}Başvuru Mimarisi
Uçtan uca yapı şöyledir: doğrulanmış bir gösterim havuzu, bir gömme modeli, bellekte tutulan bir ANN dizini, sızıntı önlemleri, çeşitlilik ve benzerlik sıralaması uygulayan bir seçici, kararlı ve önbelleğe alınmış bir giriş ile havuzu büyütüp budayan bir geri bildirim döngüsü.
Bu mimari, az örnekli istemlemeyi, gerektirdiği operasyonel disipline sahip bir erişim sistemine dönüştürür.
def answer(query):
demos = leak_safe_select(query, selector, k=4)
demos = mmr_against_query(demos, embed(query), 4)
demos = order_by_similarity(embed(query), demos)
prompt = STATIC_PREAMBLE + render(demos) + format_query(query)
out = llm(prompt)
log_for_pool_growth(query, out)
return outKısa Kontrol
Yanıltıcı derecede güçlü bir değerlendirme sonucunu teşhis edin.
Özet
Temel çıkarımlar:
- Dinamik az örnekli öğrenme, her sorgu için gösterimlere erişerek ilgililiği artırır ve rastgele/statik yaklaşımları geride bırakır.
- Havuzu bir ANN dizinine gömün; kNN ile istemleme güçlü bir varsayılandır ve artan benzerliğe göre sıralanır.
- Çeşitlilik ekleyin (MMR) ve bilgilendiricilik/belirsizlik azaltma seçicilerini değerlendirin.
- Erişim sızıntısına karşı önlem alın, gecikmeyi yönetin ve dinamik kuyruk bölümüyle birlikte önbelleğe alınmış statik bir giriş tutun.
- Havuzu doğrulanmış izlerden büyütün ve budayın; doğruluğu, gecikmeyi ve önbellek isabetini birlikte değerlendirin.
Sıkça Sorulan Sorular
“Dinamik Az Örnekli Seçim” dersi ücretsiz mi?
Evet — “Dinamik Az Örnekli Seçim” 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 Prompt Engineering kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. AI Prompt Engineering kursu toplamda 4 dersten oluşur.
“Dinamik Az Örnekli Seçim” dersinde ne öğreneceğim?
Her sorgu için örnekleri alma. AI Prompt Engineering 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 Prompt Engineering öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te AI Prompt Engineering, 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 4. dersidir.
“Dinamik Az Örnekli Seçim” 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 Prompt Engineering dersinde kod yazıp çalıştırabilir miyim?
Evet. Her AI Prompt Engineering 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
- Sıfır, Bir ve Az Örnekli Öğrenme
- Etkili Örnekler Tasarlama
- Örnek Sıralaması ve Yenilik
- Dinamik Az Örnekli Seçim