Dynaaminen few-shot-valinta
Esimerkkien hakeminen kyselykohtaisesti
Dynaaminen few-shot-valinta on ilmainen Tekoälyn prompt engineering-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Tekoälyn prompt engineering-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Tekoälyn prompt engineering-kurssilla on yhteensä 4 oppituntia.
Staattisista dynaamisiin esimerkkeihin
Staattisessa few-shot-menetelmässä käytetään samoja esimerkkejä jokaisessa kyselyssä. Dynaaminen few-shot hakee jokaiselle kyselylle olennaisimmat esimerkit joukosta ja ohjaa mallia nykyistä syötettä muistuttavien esimerkkien avulla.
Tämä on hakua hyödyntävää in-context-oppimista: se parantaa esimerkkien olennaisuutta, joka on yksi vahvimmista ICL-laadun säätökeinoista erityisesti heterogeenisissa syötteissä.
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]Esimerkkijoukon upottaminen
Laskekaa jokaiselle ehdokasesimerkille upotusvektori etukäteen ja tallentakaa vektorit likimääräisten lähimpien naapureiden indeksiin (FAISS, HNSW tai vektoritietokanta). Muodostakaa ajohetkellä syötteestä upotusvektori kerran ja hakekaa lähimmät osumat.
Valitkaa upotusmalli, joka vastaa tehtävän semantiikkaa. Yleiskäyttöinen upotusmalli voi ryhmitellä esimerkit pintapiirteiden eikä oikean tunnisteen ennustamiseen vaikuttavan ulottuvuuden perusteella.
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-kehotteistus
Perinteinen menetelmä (Liu et al., 2022) hakee kyselyn k lähintä naapuria tunnisteellisesta joukosta ja käyttää niitä esimerkkeinä. Hakuperustainen valinta päihittää satunnaisen valinnan johdonmukaisesti, koska olennaiset esimerkit auttavat mallia paikantamaan tehtävän ja tarjoavat oikean tunnisteavaruuden.
Haetut tunnisteet toimivat myös pehmeän kNN-luokittelijan priorina ja ohjaavat mallia naapureiden vastausten suuntaan.
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)Monimuotoisuuden huomioiva haku
Pelkkä top-k voi palauttaa lähes identtisiä esimerkkejä ja tuhlata kontekstia. Käyttäkää MMR-menetelmää tai ryhmittelyä haettujen ehdokkaiden joukossa, jotta olennaisuus säilyy ja valitut esimerkit kattavat kyselyn eri puolet.
Tämä on tärkeintä koostesyntaksisissa syötteissä, joissa eri osa-alueet tarvitsevat kukin edustavan esimerkin.
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 + diversityViive ja haun budjetti
Dynaaminen valinta lisää jokaiseen pyyntöön upotuskutsun ja ANN-haun. Huomioikaa tämä budjetoinnissa: tallentakaa toistuvien syötteiden upotusvektorit välimuistiin, suorittakaa haut erissä ja pitäkää indeksi muistissa.
Suurten QPS-määrien järjestelmissä hakuvaiheen on kestettävä alle millisekunti. Muuten lisätty häntäviive syö olennaisuudesta saatavan hyödyn.
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 prefetchVälimuistin ja dynaamisten esimerkkien ristiriita
Dynaamiset esimerkit rikkovat kehotteen etuliitteen välimuistituksen, koska esimerkkilohko muuttuu jokaisen kyselyn yhteydessä. Lieventäkää tätä pitämällä käytössä vakaa välimuistiin tallennettu johdanto (ohjeet ja muutama yleinen esimerkki) ja lisäämällä sen jälkeen vain haetut, kyselykohtaiset esimerkit.
Näin suurin osa välimuistin säästöistä säilyy ja loppuosan kyselykohtainen olennaisuus voidaan silti säilyttää.
prompt = (
STATIC_PREAMBLE # cached: instructions + anchor demos
+ render(diverse_retrieve(query, selector, k)) # dynamic tail
+ format_query(query)
)Opetus- ja testidatan vuodon välttäminen
Jos kysely itse kuuluu joukkoon, kuten arvioinnin aikana usein tapahtuu, haku voi palauttaa täsmälleen oikean vastauksen ja paisuttaa mittareita. Poistakaa kysely ja samankaltaisuuskynnyksen ylittävät lähes identtiset naapurit aina arvioinnin ajaksi.
Tuotannossa poistakaa joukosta kaksoiskappaleet ja estäkää käyttäjän oman aiemman syötteen palautuminen esimerkkinä.
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]Kylmäkäynnistys ja joukon kasvattaminen
Aluksi joukko on pieni ja haku voi palauttaa heikkoja osumia. Käynnistäkää järjestelmä kuratoidulla staattisella joukolla ja kasvattakaa joukkoa sen jälkeen varmennettujen tuotantotapahtumien perusteella. Laskekaa upotusvektorit ja rakentakaa indeksi uudelleen säännöllisesti.
Seuratkaa esimerkkikohtaista käyttöä ja tuloksia, jotta voitte poistaa vähäarvoiset tai vanhentuneet esimerkit ja pitää indeksin kevyenä.
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))Valinta samankaltaisuutta laajemmin
Lähimmän naapurin olennaisuus on hyvä oletus, mutta se ei ole aina optimaalinen. Kehittyneet valitsimet painottavat informatiivisuutta (ratkaiseeko esimerkki kyselyn epäselvyyden?), monimuotoisuutta ja tunnisteiden kattavuutta. Joissakin menetelmissä opitaan valintapolitiikka, joka maksimoi lopputuloksen tarkkuuden raakaa samankaltaisuutta paremmin.
Muotoilkaa valinta sellaisen esimerkkijoukon valitsemiseksi, joka vähentää mallin epävarmuutta juuri tästä kyselystä eniten.
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]]Dynaamisen putken arviointi
Verratkaa dynaamista järjestelmää staattisiin ja satunnaisiin vertailumenetelmiin vuotamisen estävässä, pidätysjoukkoon perustuvassa aineistossa. Raportoikaa tarkkuus, haettujen samankaltaisuuksien jakauma, päästä päähän -viive ja välimuistiosumien määrä.
Tarkkuudessa voittava dynaaminen järjestelmä voi olla kokonaiskustannuksiltaan tappiollinen, jos se heikentää välimuistin uudelleenkäyttöä voimakkaasti. Arvioikaa koko tavoitetta, älkää pelkkää laatua.
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(),
}Viitearkkitehtuuri
Päästä päähän -toteutus sisältää varmennetun esimerkkijoukon, upotusmallin, muistissa olevan ANN-indeksin, valitsimen, joka soveltaa vuotamisen estämistä, monimuotoisuutta ja samankaltaisuusjärjestystä, vakaan välimuistiin tallennetun johdannon sekä palautesilmukan, joka kasvattaa ja karsii joukkoa.
Tämä arkkitehtuuri muuttaa few-shot-kehotteistuksen hakuun perustuvaksi järjestelmäksi ja tuo mukanaan siihen tarvittavan operatiivisen kurinalaisuuden.
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 outPikatarkistus
Selvittäkää harhaanjohtavan vahvan arviointituloksen syy.
Kertaus
Tärkeimmät opit:
- Dynaaminen few-shot hakee esimerkit kyselykohtaisesti ja päihittää satunnaisen tai staattisen menetelmän parantamalla olennaisuutta.
- Upottakaa joukko ANN-indeksiin. kNN-kehotteistus on vahva oletus, ja esimerkit kannattaa järjestää nousevan samankaltaisuuden mukaan.
- Lisätkää monimuotoisuutta (MMR) ja harkitkaa informatiivisuutta tai epävarmuuden vähentämistä painottavia valitsimia.
- Estäkää haun vuotaminen, hallitkaa viivettä ja pitäkää käytössä välimuistiin tallennettu staattinen johdanto sekä dynaaminen loppuosa.
- Kasvattakaa ja karsikaa joukkoa varmennettujen tuotantotapahtumien perusteella. Arvioikaa tarkkuus, viive ja välimuistiosumat yhdessä.
Opi Tekoälyn prompt engineering tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 53
- Oppitunnit
- 199
Usein kysytyt kysymykset
Onko oppitunti ”Dynaaminen few-shot-valinta” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Tekoälyn prompt engineering-oppimispolun 3 oppituntia, myös oppitunnin “Dynaaminen few-shot-valinta”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Tekoälyn prompt engineering-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Dynaaminen few-shot-valinta”?
Esimerkkien hakeminen kyselykohtaisesti Harjoittelet Tekoälyn prompt engineering-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Tekoälyn prompt engineering-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Tekoälyn prompt engineering-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.
Kuinka kauan ”Dynaaminen few-shot-valinta”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Tekoälyn prompt engineering-oppitunnilla?
Kyllä. Jokainen Tekoälyn prompt engineering-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Zero-, one- ja few-shot
- Tehokkaiden esimerkkien suunnittelu
- Esimerkkien järjestys ja tuoreus
- Dynaaminen few-shot-valinta