26.3.4 Összehasonlító elemző kódok

2025.10.06.
AI Biztonság Blog

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.

Kapcsolati űrlap

AI Biztonság kérdésed van? Itt elérsz minket:

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.

Tesztesetek száma 100 0 Hossz különbség (karakter) < -20 -20..-1 0 1..20 > 20 Kimeneti Hossz Különbség Eloszlása

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.