LLM arvioijana -malli
Ymmärrä, miten vahva LLM voidaan ohjata pisteyttämään tai vertailemaan tuloksia oikeellisuuden, hyödyllisyyden ja sävyn kaltaisilla kriteereillä sekä miksi tämä skaalautuu ihmisen tekemää arviointia paremmin.
LLM arvioijana -malli on ilmainen AI Engineering Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu AI Engineering Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. AI Engineering Academy-kurssilla on yhteensä 4 oppituntia.
Miksi automaattinen arviointi on tarpeen
LLM:n tulosten manuaalinen arviointi on hidasta ja kallista. Ihmisarvioijista koostuva tiimi voi arvioida muutaman sata tulosta viikossa, mutta tuotantojärjestelmä tuottaa tuhansia päivässä. LLM-as-judge käyttää tehokasta kielimallia muiden LLM-tulosten laadun arviointiin suuressa mittakaavassa. Näin voidaan toteuttaa automaattinen regressiotestaus ja jatkuva laadunvalvonta ilman suuren arvioijajoukon palkkaamista.
Perusajatus: yksi LLM arvioi toista
LLM-as-judge-mallissa lähetätte arviointikriteerit määrittävän järjestelmäkehotteen, alkuperäisen kysymyksen, mallin vastauksen ja halutessanne vertailuvastauksen arviointimallille (yleensä GPT-4o tai Claude). Arviointimalli palauttaa numeerisen pistemäärän, tunnisteen tai järjestyksen. Tämä toimii, koska huippuluokan mallit ymmärtävät riittävästi laadun käsitteitä, kuten oikeellisuutta, hyödyllisyyttä ja johdonmukaisuutta.
JUDGE_SYSTEM_PROMPT = '''
You are an expert evaluator of AI-generated responses.
Given a question and an AI-generated answer, score the answer on:
- Correctness (0-5): Is the information factually accurate?
- Completeness (0-5): Does it fully address the question?
- Clarity (0-5): Is it easy to understand?
Return a JSON object with scores and a brief rationale.
'''Arviointikehotteen kirjoittaminen
Hyvä arviointikehote määrittää täsmälliset arviointiperusteet ja pisteiden merkitykset epämääräisten termien, kuten ”hyvä” tai ”huono”, sijaan. Määritelkää konkreettisesti, mitä pistemäärä 5, 3 tai 1 tarkoittaa kunkin kriteerin kohdalla. Antakaa mukaan kysymys, arvioitava vastaus ja halutessanne vertailuvastaus. Pyytäkää mallia perustelemaan arvio ennen pistemäärän antamista (chain-of-thought), jotta mielivaltaiset arviot vähenevät.
def build_judge_prompt(question: str, answer: str, reference: str = None) -> str:
ref_section = f'Reference answer:\n{reference}\n\n' if reference else ''
return f'''
Question: {question}
{ref_section}Answer to evaluate:
{answer}
Score this answer on correctness (1-5) where:
5 = Completely accurate, no factual errors
3 = Mostly accurate with minor errors
1 = Contains significant factual errors
First explain your reasoning, then provide the score as JSON:
{{"correctness": <1-5>, "rationale": "..."}}
'''Arviointimallin kutsuminen
Kutsukaa arviointimallia arviointikehotteellanne. Jäsentäkää JSON-vastaus ja poimikaa siitä pisteet. Käyttäkää aina rakenteisia tulosteita tai JSON-tilaa varmistaaksenne, että arviointimalli palauttaa jäsennettävää tietoa. Saman mallin käyttäminen sekä testattavana järjestelmänä että arviointimallina voi aiheuttaa vinoumaa — suosikaa arviointiin eri mallia tai vähintään eri määritystä.
from pydantic import BaseModel
import instructor
from openai import OpenAI
class JudgeScore(BaseModel):
correctness: int
completeness: int
clarity: int
rationale: str
judge_client = instructor.from_openai(OpenAI())
def judge(question: str, answer: str) -> JudgeScore:
return judge_client.chat.completions.create(
model='gpt-4o', # Use stronger judge than the model being tested
response_model=JudgeScore,
messages=[
{'role': 'system', 'content': JUDGE_SYSTEM_PROMPT},
{'role': 'user', 'content': build_judge_prompt(question, answer)}
]
)Vertailuvastaukseton ja vertailuvastaukseen perustuva arviointi
LLM-arvioinnissa on kaksi toimintatilaa. Vertailuvastauksettomassa arvioinnissa arviointimallia pyydetään arvioimaan laatua ilman oikeaa vastausta — tämä on hyödyllistä, kun oikeaa vastausta ei ole, esimerkiksi avoimessa keskustelussa. Vertailuvastaukseen perustuvassa arvioinnissa annetaan mallille kultainen vakiovastaus ja pyydetään arvioimaan, vastaako mallin vastaus sitä — tämä sopii paremmin faktapohjaiseen kysymysten vastaamiseen, jossa oikea vastaus tunnetaan. Käyttäkää vertailuvastaukseen perustuvaa arviointia, kun käytettävissä on nimetty testiaineisto.
# Reference-free: good for open-ended generation
judge_result = judge(question='What is machine learning?', answer=model_answer)
# Reference-based: better for factual QA
judge_result = judge(
question='What year was Python created?',
answer=model_answer,
reference='Python was created by Guido van Rossum and released in 1991.'
)Arviointimallin vinouman hallinta
LLM-arviointimalleilla on tunnettuja vinoumia: ne suosivat pidempiä vastauksia (runsassanaisuusvinouma), itsevarmalta kuulostavia vastauksia ja vastauksia, jotka vastaavat niiden opetusdatan tyyliä. Lieventäkää runsassanaisuusvinoumaa määrittämällä arviointiperusteisiin selkeästi tarpeettoman pituuden vähentävän vaikutuksen. Vähentäkää sijaintivinoumaa parivertailussa arpomalla, kumpi vastaus esitetään ensin, ja laskemalla molempien esitysjärjestysten keskiarvo.
# Anti-verbosity note in rubric:
ANTI_VERBOSITY_CLAUSE = '''
Note: A concise, accurate answer should score higher than a long,
rambling answer that happens to contain the correct information.
Do not reward length for its own sake.
'''
# Position-debiasing for pairwise comparison:
async def debiased_pairwise(q, a, b):
score_ab = await compare(q, answer_a=a, answer_b=b)
score_ba = await compare(q, answer_a=b, answer_b=a)
# A wins if it wins in both orderings
a_wins = (score_ab == 'A' and score_ba == 'B')
return 'A' if a_wins else 'B' if (score_ab == 'B' and score_ba == 'A') else 'tie'Arviointien eräajo nopeuden lisäämiseksi
Suorittakaa arviointimallin arvioinnit rinnakkain, jotta voitte arvioida suuret testiaineistot nopeasti. Asynkronisuuden ja semaforin avulla voitte arvioida satoja tuloksia minuutissa. Varatkaa arviointimallin kutsuille erillinen rate limit -budjetti (nekin käyttävät tokeneita) ja harkitkaa pienemmän mutta edelleen kyvykkään arviointimallin, kuten GPT-4o-minin, käyttöä kriteereissä, jotka eivät vaadi syvällistä päättelyä. Säästäkää GPT-4o kriittisimpiin kriteereihin.
import asyncio
async def batch_judge(qa_pairs: list, concurrency: int = 20) -> list:
sem = asyncio.Semaphore(concurrency)
async def judge_one(item):
async with sem:
return await async_judge(item['question'], item['answer'])
return await asyncio.gather(
*[judge_one(item) for item in qa_pairs],
return_exceptions=True
)Arviointimallin pisteiden yhdistäminen
Kun testiaineisto on arvioitu, yhdistäkää pisteet yhteenvetotilastoiksi: keskiarvoksi, mediaaniksi ja niiden vastausten prosenttiosuudeksi, joiden pistemäärä ylittää laatukynnyksen (kuten oikeellisuus ≥ 4). Verratkaa näitä koontituloksia malliversioiden tai kehotemuunnelmien välillä. Jos laatukynnyksen ylittävien vastausten osuus laskee yli 5 %, uuden version käyttöönottoa edeltää tarkistus.
import statistics
def summarize_judge_results(scores: list) -> dict:
correctness = [s.correctness for s in scores if isinstance(s, JudgeScore)]
return {
'n': len(correctness),
'mean_correctness': round(statistics.mean(correctness), 2),
'median_correctness': statistics.median(correctness),
'pct_above_4': round(100 * sum(1 for s in correctness if s >= 4) / len(correctness), 1)
}LLM-versioiden vertaaminen arviointimallilla
Käyttäkää LLM-as-judge-mallia järjestelmänne kahden version vertaamiseen — esimerkiksi ennen kehotteen muuttamista ja sen jälkeen. Suorittakaa molemmat versiot samoilla testikysymyksillä, arvioikaa kaikki tulokset ja laskekaa voittosuhde: niiden tapausten prosenttiosuus, joissa versio B saa paremman pistemäärän kuin versio A. Yli 55 prosentin voittosuhde vähintään 100 otoksella on yleensä tilastollisesti riittävän merkitsevä uuden version julkaisemisen perustelemiseksi.
async def ab_compare(test_questions: list, version_a, version_b) -> dict:
a_wins = b_wins = ties = 0
for q in test_questions:
answer_a = await version_a.answer(q)
answer_b = await version_b.answer(q)
winner = await debiased_pairwise(q, answer_a, answer_b)
if winner == 'A': a_wins += 1
elif winner == 'B': b_wins += 1
else: ties += 1
total = len(test_questions)
return {'a_win_rate': a_wins/total, 'b_win_rate': b_wins/total, 'tie_rate': ties/total}Arviointimallin pisteiden kalibrointi ihmisten arvioita vasten
Vahvistakaa arviointimallinne vertaamalla sen pisteitä ihmisten arvioihin 50–200 esimerkin kalibrointiaineistossa. Laskekaa Pearsonin korrelaatio arviointimallin ja ihmisten antamien pisteiden välillä. Yli 0,7:n korrelaatio osoittaa arviointimallin olevan luotettava. Jos korrelaatio on pieni, tarkastakaa arviointikehote nähdäksenne, missä kohdissa malli on eri mieltä ihmisten kanssa, ja lisätkää arviointiperusteisiin esimerkkejä tai täsmennyksiä. Älkää koskaan ottako arviointimallia tuotantokäyttöön ilman kalibrointia.
from scipy.stats import pearsonr
def calibrate_judge(human_scores: list, judge_scores: list) -> dict:
corr, p_value = pearsonr(human_scores, judge_scores)
mean_abs_error = sum(abs(h - j) for h, j in zip(human_scores, judge_scores)) / len(human_scores)
return {
'pearson_r': round(corr, 3),
'p_value': round(p_value, 4),
'mean_abs_error': round(mean_abs_error, 2),
'reliable': corr >= 0.7
}Milloin LLM-as-judge-mallia ei pidä käyttää
LLM-as-judge ei sovi kaikkiin arviointitilanteisiin. Välttäkää sitä, kun kriteeri edellyttää arviointimallilta puuttuvaa erityisosaamista (lääketieteellisen diagnoosin oikeellisuus, lainmukaisuus), kun tarvitaan juridisesti puolusteltava arvio (ihmisen on tehtävä arviointi), kun arvioitava malli on arviointimallia vahvempi (arviointimalli ei pysty luotettavasti pisteyttämään tuotosta, jota se ei itse pystyisi tuottamaan) tai kun arviointibudjetti on liian tiukka ylimääräisiin API-kustannuksiin. Käyttäkää näissä tapauksissa ihmisen tekemää arviointia tai deterministisiä mittareita.
# Appropriate uses of LLM-as-judge:
# YES: General helpfulness, clarity, tone, factual accuracy (general knowledge)
# YES: Code correctness for common languages
# YES: Translation quality comparison
# YES: Content safety classification
#
# NOT appropriate:
# NO: Medical/legal/financial accuracy (needs domain expert)
# NO: Evaluating GPT-4o with GPT-4o (same capability ceiling)
# NO: Formal compliance audits (non-deterministic judge)
# NO: Streaming quality at individual token levelPikakoe
Testatkaa, miten hyvin ymmärrätte LLM-as-judge-arviointimallin.
Oppitunnin kertaus
Tässä oppitunnissa opitte, että LLM-as-judge käyttää tehokasta mallia laadun arviointiin suuressa mittakaavassa täsmällisten arviointiperusteiden avulla, vertailuvastauksettomat ja vertailuvastaukseen perustuvat toimintatilat sopivat eri arviointitilanteisiin ja kalibrointi ihmisten arvioita vasten varmistaa arviointimallin luotettavuuden ennen sen käyttämistä tuotannossa. Seuraavaksi toteutamme yksittäisten vastausten ja vastausparien arviointistrategiat.
Opi Python 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
- 30
- Oppitunnit
- 120
Usein kysytyt kysymykset
Onko oppitunti ”LLM arvioijana -malli” ilmainen?
Kyllä – oppitunnin ”LLM arvioijana -malli” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko AI Engineering Academy-kurssin, päivitä CoddyKit PROhon. AI Engineering Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”LLM arvioijana -malli”?
Ymmärrä, miten vahva LLM voidaan ohjata pisteyttämään tai vertailemaan tuloksia oikeellisuuden, hyödyllisyyden ja sävyn kaltaisilla kriteereillä sekä miksi tämä skaalautuu ihmisen tekemää arviointia… Harjoittelet AI Engineering Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni AI Engineering Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin AI Engineering Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.
Kuinka kauan ”LLM arvioijana -malli”-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ä AI Engineering Academy-oppitunnilla?
Kyllä. Jokainen AI Engineering Academy-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
- LLM arvioijana -malli
- Pistekohtainen ja parivertailuun perustuva arviointi
- Arvioijamallien kalibrointi ihmisten arvioita vasten
- Jatkuvan arviointiputken rakentaminen