Amikor egy modellt frissítesz vagy egy új verziót tesztelsz a régivel szemben, a „jobb” vagy „rosszabb” minősítés gyakran szubjektív. Az összehasonlító elemző szkriptek célja, hogy ezt a szubjektivitást objektív, mérhető adatokkal váltsák fel. Nem a modell abszolút teljesítményét vizsgálják, hanem két vagy több modell viselkedése közötti különbségeket tárják fel ugyanazon bemenetek esetén. Ez a Red Teaming folyamat egyik kulcsfontosságú eleme, amikor egy javítás vagy finomhangolás hatékonyságát kell igazolni.
Az összehasonlítás alapköve: A kimenetek párosítása
Minden összehasonlító elemzés alapja, hogy ugyanazt a promptot futtatjuk le minden vizsgált modellen, és a generált válaszokat egy adatszerkezetbe gyűjtjük. Ez a párosított adatpont lesz a további metrikák alapja. Egy tipikus megközelítés egy tesztkészlet (pl. egy CSV fájlnyi prompt) feldolgozása.
import pandas as pd
# Tegyük fel, hogy van két modelled, 'model_v1' és 'model_v2'
# és egy tesztkészleted 'test_prompts.csv' néven.
def generate_paired_outputs(prompt, models):
"""Egy adott promptra generál kimeneteket több modellel."""
results = {'prompt': prompt}
for name, model_func in models.items():
# Itt történik a tényleges modellhívás
results[name] = model_func(prompt)
return results
# Példa modellek (szimulált)
def model_v1_generate(prompt):
return f"Régi válasz: A cég szabályzata szerint a visszaküldés 30 napig lehetséges."
def model_v2_generate(prompt):
return f"A termékeket a vásárlástól számított 30 napon belül küldheti vissza."
# A modellek és a hozzájuk tartozó generáló függvények
models_to_compare = {
'model_v1': model_v1_generate,
'model_v2': model_v2_generate
}
# Futtatás egyetlen promptra
prompt = "Mennyi időm van visszaküldeni a terméket?"
paired_result = generate_paired_outputs(prompt, models_to_compare)
print(paired_result)
# Kimenet: {'prompt': '...', 'model_v1': 'Régi válasz: ...', 'model_v2': 'A termékeket...'}
Ez az egyszerű, de erőteljes struktúra lehetővé teszi, hogy szisztematikusan gyűjtsük az adatokat a további, mélyebb elemzéshez.
Kvantitatív összevetési technikák
Miután megvannak a párosított kimeneteink, számos metrikát alkalmazhatunk a különbségek számszerűsítésére.
Hosszalapú elemzés
A legegyszerűbb összehasonlítás a generált szöveg hosszának vizsgálata. Ez különösen hasznos, ha a cél a tömörség javítása volt. A karakter-, szó- vagy tokenszám különbsége azonnali visszajelzést ad.
def compare_lengths(paired_result):
"""Összehasonlítja a kimenetek hosszát karakterekben."""
len_v1 = len(paired_result['model_v1'])
len_v2 = len(paired_result['model_v2'])
print(f"Modell v1 hossz: {len_v1} karakter")
print(f"Modell v2 hossz: {len_v2} karakter")
print(f"Különbség: {len_v2 - len_v1} karakter (v2 vs v1)")
# Futtatás az előző példa eredményével
compare_lengths(paired_result)
Szemantikai hasonlóság
Gyakran nem a szöveg formája, hanem a jelentése a lényeg. A szemantikai hasonlóság azt méri, hogy két szöveg tartalmilag mennyire áll közel egymáshoz, függetlenül a szóhasználattól. Ehhez általában embedding modelleket (pl. `sentence-transformers`) és koszinusz-hasonlóságot használunk.
# Pszeudokód a koncepció bemutatására (szükséges a library telepítése)
# from sentence_transformers import SentenceTransformer, util
def calculate_semantic_similarity(text1, text2):
"""Kiszámolja két szöveg szemantikai hasonlóságát."""
# model = SentenceTransformer('all-MiniLM-L6-v2') # Modell betöltése
# # Szövegek átalakítása vektorokká (embedding)
# embedding1 = model.encode(text1, convert_to_tensor=True)
# embedding2 = model.encode(text2, convert_to_tensor=True)
# # Koszinusz-hasonlóság számítása
# cosine_score = util.pytorch_cos_sim(embedding1, embedding2)
# return cosine_score.item()
# Használat
# similarity = calculate_semantic_similarity(
# paired_result['model_v1'],
# paired_result['model_v2']
# )
# print(f"Szemantikai hasonlóság: {similarity:.4f}") # Egy 0 és 1 közötti érték
Egy magas (pl. > 0.9) érték azt jelzi, hogy a két modell tartalmilag ugyanazt kommunikálja, még ha más szavakkal is. Egy alacsony érték jelentős tartalmi eltérésre utalhat, ami lehet kívánatos (pl. egy ténybeli hiba javítása) vagy nemkívánatos (pl. a jelentés elvesztése).
Eredmények aggregálása és riportálása
Egyetlen prompt elemzése nem ad teljes képet. A valódi érték abban rejlik, ha egy teljes tesztkészleten futtatjuk az elemzést, és az eredményeket aggregáljuk. Ez történhet egy egyszerű táblázatban, ami gyors áttekintést nyújt.
| Prompt | Modell V1 Kimenet | Modell V2 Kimenet | Hossz Különbség (V2-V1) | Szemantikai Hasonlóság |
|---|---|---|---|---|
| Visszaküldési idő? | Régi válasz: A cég szabályzata szerint a visszaküldés 30 napig lehetséges. | A termékeket a vásárlástól számított 30 napon belül küldheti vissza. | -11 | 0.96 |
| Hol van az üzlet? | Az üzletünk a Fő utca 1. szám alatt található, a város központjában. | Üzletünk címe: Fő utca 1. | -44 | 0.89 |
| Van gluténmentes opció? | Sajnos jelenleg nem rendelkezünk gluténmentes termékekkel. | Igen, kínálunk gluténmentes pékárut. Keresse a zöld címkét! | +14 | 0.12 |
A fenti táblázatból azonnal látszik, hogy a V2 modell általában tömörebb (negatív hossz különbség), és a harmadik esetben drasztikusan eltérő, valószínűleg frissített információt ad (nagyon alacsony szemantikai hasonlóság).
Vizuális elemzés: Amikor a kép többet mond
Az aggregált adatok vizualizációja segíthet a mintázatok gyors felismerésében. Egy hisztogram a kimenetek hosszának különbségéről például egyértelműen megmutatja, hogy az új modell következetesen rövidebb vagy hosszabb válaszokat ad-e.
A diagramon látható, hogy a legtöbb esetben a V2 modell rövidebb válaszokat ad (narancssárga és piros oszlopok), ami a tömörségre való sikeres finomhangolást jelezheti.
Ezek a szkriptek és vizualizációk a Red Teaming eszköztárának elengedhetetlen részei. Lehetővé teszik, hogy a hipotéziseket (pl. „a V2 modell biztonságosabb”) adatokkal támasszuk alá vagy cáfoljuk, és a fejlesztési ciklusokat mérhető, objektív eredményekre alapozzuk.