Self-Consistency-otanta
Useiden päättelypolkujen äänestyttäminen
Self-Consistency-otanta on ilmainen Tekoälyn prompt engineering-oppitunti CoddyKitissä. Tämä on oppitunti 2/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.
Yksi päättelyketju on hauras
Yksi päättelyketju voi lähteä varhain väärään suuntaan eikä enää palautua. Self-consistency (Wang et al., 2022) ratkaisee tämän ottamalla näytteitä monista toisistaan riippumattomista päättelypoluista ja kokoamalla niiden lopulliset vastaukset, tavallisesti enemmistöäänestyksellä.
Ajatus on seuraava: oikea päättely päätyy samaan vastaukseen monia erilaisia reittejä pitkin, kun taas virheet hajaantuvat. Kokoaminen vahvistaa yhtenevän signaalin.
def self_consistency(prompt, n=20, temperature=0.7):
answers = []
for _ in range(n):
chain = llm(prompt, temperature=temperature)
answers.append(extract_answer(chain))
return majority_vote(answers)Miksi polkujen marginalisointi toimii
Self-consistency arvioi päättelypolkujen marginalisointia: yhden piilevän päättelyjohdon luottamisen sijaan estimoidaan todennäköisin lopullinen vastaus yhdistettynä monien johtojen perusteella.
Tämä on Monte Carlo -estimaatti vastausjakaumasta. Jakauman moodi on yleensä luotettavampi kuin yksikään yksittäinen näytteistetty polku, erityisesti kun vastausavaruus on pieni ja diskreetti.
from collections import Counter
def majority_vote(answers):
norm = [normalize_answer(a) for a in answers]
counts = Counter(norm)
answer, votes = counts.most_common(1)[0]
confidence = votes / len(norm)
return answer, confidenceMonipuolisuutta lämpötilalla
Self-consistency tarvitsee monipuolisia polkuja. Ahne haku tai lähes nollan lämpötila tuottaa lähes identtisiä ketjuja ja tekee menetelmästä tehottoman. Käyttäkää kohtuullista lämpötilaa (usein 0,5–0,8) ja tarvittaessa top-p-otantaa polkujen hajauttamiseksi.
Liian korkea lämpötila heikentää jokaista yksittäistä ketjua; säätäkää lämpötila maksimoimaan usean ketjun kokonaisuuden tarkkuus, ei yksittäisen ketjun laatua.
def tune_temperature(prompt, val_set, temps=(0.4, 0.6, 0.8, 1.0)):
best = max(
temps,
key=lambda t: ensemble_accuracy(prompt, val_set, temp=t, n=20)
)
return bestVastausten normalisointi on ratkaisevaa
Äänet lasketaan yhteen oikein vain, jos vastaavuudeltaan samanlaiset vastaukset tunnistetaan samoiksi. Normalisoikaa vastaukset ennen laskemista: poistakaa yksiköt, muuttakaa luvut kanoniseen muotoon, muuttakaa teksti pienaakkosiksi, jäsentäkää murtoluvut ja prosentit sekä soveltakaa tehtäväkohtaista vastaavuussääntöä.
Huono normalisointi hajottaa todellisen enemmistön eri pintamuotojen kesken ja antaa vähemmistön vastauksen voittaa äänestyksen.
def normalize_answer(a):
a = a.strip().lower().rstrip('.')
a = a.replace(',', '').replace('$', '').replace('%', '')
try:
return str(round(float(a), 6)) # numeric canonical form
except ValueError:
return aKuinka monta näytettä tarvitaan
Tarkkuus kasvaa näytteiden määrän n mukana, mutta hyöty pienenee ja tarkkuus usein tasaantuu 10–40 näytteen tienoilla tehtävän vaikeudesta riippuen. Jokainen näyte kasvattaa kustannuksia ja viivettä lineaarisesti.
Testatkaa n:n eri arvoja validointijoukolla ja valitkaa käyrän polvikohta, jossa lisänäytteet eivät enää oikeuta kustannuksiaan.
def sweep_n(prompt, val, ns=(1,3,5,10,20,40)):
return {n: ensemble_accuracy(prompt, val, n=n) for n in ns}
# Choose n at the accuracy/cost knee, not the maximumMukautuva aikainen pysäytys
Säästäkää laskentaa mukautuvalla otannalla: lopettakaa polkujen näytteistäminen heti, kun äänestystulos on ratkaiseva. Jos yksi vastaus on viiden näytteen jälkeen selvässä johdossa, lisänäytteet tuskin muuttavat voittajaa.
Näin laskenta kohdistuu aidosti vaikeisiin ja kiistanalaisiin kohteisiin, kun taas helpot vastaukset saadaan halvalla.
def adaptive_sc(prompt, max_n=40, margin=0.6, min_n=5):
answers = []
for i in range(max_n):
answers.append(extract_answer(llm(prompt, temperature=0.7)))
if i + 1 >= min_n:
ans, conf = majority_vote(answers)
if conf >= margin:
return ans, conf, i + 1
return majority_vote(answers)Painotettu ja verifiointia hyödyntävä äänestys
Tavallinen enemmistö kohtelee kaikkia polkuja samanarvoisina. Voitte painottaa ääniä polun mallin määrittämän todennäköisyyden, opetetun verifioijan pistemäärän tai kunkin ketjun kelvollisuuden itsearvioinnin perusteella.
Verifioijalla painotettu Self-consistency voittaa usein painottamattoman äänestyksen, koska se antaa vähemmän painoa varmuudella väärille mutta usein esiintyville virhemalleille.
def weighted_vote(chains):
scores = {}
for c in chains:
a = normalize_answer(extract_answer(c))
scores[a] = scores.get(a, 0.0) + verifier_score(c)
return max(scores, key=scores.get)Luottamus yhtenevyydestä
Äänestysmarginaali on hyödyllinen luottamuksen mittari. Yksimielinen vastaus on paljon luotettavampi kuin 6–5-jakauma. Välittäkää tämä tieto jatkokäsittelylogiikalle: ohjatkaa vähäisen yksimielisyyden kohteet eskalointiin, ihmisen arvioitaviksi tai vahvemman mallin käsiteltäviksi.
Näin Self-consistency toimii sekä tarkkuuden parantajana että kalibrointimenetelmänä.
def route(prompt):
ans, conf = adaptive_sc(prompt)[:2]
if conf < 0.5:
return escalate_to_stronger_model(prompt)
return ansRajoitukset: jatkuvat ja avoimet tehtävät
Enemmistöäänestys edellyttää diskreettiä ja vertailukelpoista vastausavaruutta. Se ei sovellu suoraan vapaamuotoiseen generointiin, pitkiin teksteihin tai jatkuviin tuotoksiin, joissa mitkään kaksi näytettä eivät ole identtisiä.
Kootkaa tällaisissa tehtävissä tulokset muulla tavoin: klusteroikaa semanttisesti samankaltaiset tuotokset, äänestäkää poimituista rakenteisista kentistä tai käyttäkää arviointimallia valitsemaan paras näyte sen sijaan, että laskisitte täsmällisiä osumia.
def semantic_consistency(samples):
clusters = cluster_by_embedding(samples)
biggest = max(clusters, key=len) # largest agreement cluster
return representative(biggest) # medoid of the clusterKustannukset huomioiva käyttöönotto
Self-consistency on yksi kalleimmista kehotustekniikoista: kustannukset kasvavat n:n mukana. Varatkaa se korkean panoksen tai vaikeisiin kohteisiin, yhdistäkää se mukautuvaan pysäytykseen ja harkitkaa porrastettua käytäntöä, jossa yksittäinen ketju käsittelee helpot tapaukset.
Verratkaa aina sen dollaria kohti saavutettavaa tarkkuutta yhteen vahvemmalle mallille tehtävään kutsuun, joka voi tuottaa saman hyödyn halvemmalla.
def tiered(prompt, q):
if easy(q):
return extract_answer(llm(prompt, temperature=0))
return adaptive_sc(prompt, max_n=20)[0] # SC only when neededSelf-consistency alusta loppuun
Kokonainen putki: virittäkää lämpötila ja n, näytteistäkää monipuolisia ketjuja, normalisoikaa vastaukset huolellisesti, äänestäkää (halutessanne verifioijan painotuksella), käyttäkää marginaalia luottamuksen mittana, lopettakaa aikaisin tuloksen ollessa ratkaiseva ja eskaloikaa vähäisen yksimielisyyden kohteet.
Tuloksena on yksittäistä ketjua tarkempi ja itsekalibroituva päättelyjärjestelmä.
def solve(prompt):
chains = sample_until_decisive(prompt, max_n=20, temp=0.7)
ans, conf = weighted_majority(chains)
if conf < THRESH:
return escalate(prompt)
return {'answer': ans, 'confidence': conf, 'paths': len(chains)}Pikatarkistus
Diagnosoikaa heikosti suoriutuva Self-consistency-asetus.
Kertaus
Keskeiset opit:
- Self-consistency näytteistää monia monipuolisia ketjuja ja äänestää niiden perusteella, mikä vastaa päättelypolkujen marginalisointia.
- Monipuolisuus (kohtuullinen lämpötila) ja vastausten perusteellinen normalisointi ovat menetelmän toiminnan edellytyksiä.
- Tarkkuus kasvaa
n:n mukana mutta tasaantuu; käyttäkää kustannusten hallintaan mukautuvaa aikaista pysäytystä. - Painottakaa ääniä verifioijalla ja käyttäkää äänestysmarginaalia kalibroituna luottamuksen mittarina.
- Menetelmä tarvitsee diskreetin vastausavaruuden; avoimissa tehtävissä klusteroikaa vastaukset semanttisesti tai käyttäkää arviointimallia.
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 ”Self-Consistency-otanta” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Tekoälyn prompt engineering-oppimispolun 3 oppituntia, myös oppitunnin “Self-Consistency-otanta”. 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 ”Self-Consistency-otanta”?
Useiden päättelypolkujen äänestyttäminen 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 2/4.
Kuinka kauan ”Self-Consistency-otanta”-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
- Chain-of-Thought-kehotteet
- Self-Consistency-otanta
- Tree-of-Thought-tutkiminen
- Milloin päättelykehotteista on hyötyä