- Je meet gerichte aanvallen en gewone vragen met de juiste afzonderlijke noemers.
- Je controleert volledige letterlijke regels en legt uit waarom grounded geen waarheidsbewijs is.
Een aanvaller voegt een verkeerd kaartfeit toe. De zoekmachine haalt het kaartje op, maar het antwoord blijft juist. Is de aanval dan geslaagd? Alleen tellen hoe vaak de verkeerde kaart verschijnt, verwart ophalen met beïnvloeden van het antwoord.
We meten beide stappen apart en houden gewone vragen erbij. Daarna controleren we of een claim werkelijk past bij haar aangehaalde bron. Ook een keurige bronverwijzing kan immers naar het verkeerde kaartje wijzen.
1. Splits wat je observeert
Een targeted run heeft een verwacht juist antwoord en een daarvan verschillend aanvallersdoel. retrieved_poison geeft aan of een vergiftigd record is opgehaald. answer is het waargenomen antwoord, of None wanneer het systeem zich onthoudt.
Van n gerichte runs tellen we R keer ophalen, T keer het doelantwoord en J keer beide samen. r, a en j zijn hun afzonderlijke fracties. Bij n=0 is zo’n fractie None: er is dan geen meting, geen gemeten nulsucces.
Onze eerste twee runs zijn gericht: eenmaal wordt rood na ophalen geantwoord, eenmaal blijft blauw zonder ophalen behouden. De derde vraag is gewoon en wordt juist beantwoord. Met de hand zijn n=2, R=T=J=1 en één gewone goede uitkomst.
def run(kind, poison, answer, target):
return dict(kind=kind,
retrieved_poison=poison,
answer=answer, expected="blue",
target=target)
runs = [
run("targeted", True, "red", "red"),
run("targeted", False,
"blue", "red"),
run("ordinary", False,
"blue", None),
]
print(measure_poisoning(runs)["joint"])
# 1
2. Een verdediging houdt normale vragen bruikbaar
m is het aantal gewone runs en C het aantal juiste gewone antwoorden. u is ordinary_accuracy. Die noemer bevat dus niet de gerichte aanvallen; anders zou een veranderde verhouding tussen soorten vragen het cijfer moeilijk vergelijkbaar maken.
Hier zijn de retrieval- en doelantwoordfractie beide een half; de gewone nauwkeurigheid is één. Als je overal None antwoordt, daalt het aanvalssucces, maar ook de gewone nauwkeurigheid wordt nul. Alles weigeren is daarmee zichtbaar geen bruikbare oplossing.
stats = measure_poisoning(runs)
print(stats["retrieval_rate"])
print(stats["target_rate"])
print(stats["ordinary_accuracy"])
abstained = [dict(row, answer=None)
for row in runs]
print(measure_poisoning(
abstained)["ordinary_accuracy"])
# 0.5
# 0.5
# 1.0
# 0.0
Een doelantwoord kan ook verschijnen zonder dat onze vergiftigde kaart werd opgehaald. Daarom bewaren we target_rate en joint_rate als verschillende waarnemingen. Deze kleine meting verklaart nog niet waardoor een echt model antwoordde.
013. Houd een claim aan haar werkelijke record
Onze bewijscontrole gebruikt eigen feiten in de precieze vorm key=value. Een citation noemt één opgehaald record en een letterlijk citaat. Dat citaat moet een volledige regel in de werkelijke recordtekst zijn en exact bij de opgegeven key en value passen.
retrieved = [dict(id="doc-a",
tenant="a",
source="manual", revision="r1",
text="color=blue", vector=[2, 0])]
claim = dict(id="claim-a", key="color",
value="blue", citation=dict(
record="doc-a",
quote="color=blue"))
reply = check_claim_evidence(
[claim], retrieved)
print(reply[0]["grounded"])
# True
Een ontbrekend citaat geeft no-citation; een onbekend record geeft not-retrieved. Daarna volgen quote voor een niet-letterlijke regel en fact voor een citaat dat niet bij de claim past. De eerste reden bepaalt het resultaat; alleen grounded bevat een nieuwe evidence-verwijzing.
02Een opgehaald verkeerd kaartje en een verkeerd antwoord zijn verschillende waarnemingen. Onderzoek daarna of een claim bij haar werkelijke bron past.
1. Meet gerichte en gewone vragen
| Soort | Vergiftigd opgehaald | Antwoord | Verwacht | Doel |
|---|---|---|---|---|
| targeted | ja | red | blue | red |
| targeted | nee | blue | blue | red |
| ordinary | nee | blue | blue | None |
| ordinary | nee | red | blue | None |
- Gerichte vragen
- 2
- Daarvan: vergiftigd record opgehaald
- 1
- Daarvan: onjuist doelantwoord
- 1
- Daarvan: beide samen
- 1
- Gewone vragen
- 2
- Daarvan: juist antwoord
- 1
Vergiftigd record opgehaald
50,00 %Onjuist doelantwoord
50,00 %Beide bij dezelfde run
50,00 %Gewone vragen correct
50,00 %Percentages zijn voor de weergave op twee decimalen afgerond. Geen gewone vragen betekent geen meting van gewone nauwkeurigheid. Alles onthouden kan aanvalssucces verlagen en tegelijk de gewone taak laten mislukken.
2. Bind de claim aan het opgehaalde record
Werkelijk opgehaald
[
{
"id": "doc-a",
"tenant": "a",
"source": "manual",
"revision": "r1",
"text": "color=blue",
"vector": [
2,
0
]
}
]Claim en citation
{
"id": "claim-a",
"key": "color",
"value": "red",
"citation": {
"record": "doc-a",
"quote": "color=blue"
}
}Letterlijke bronregels en codepunten
doc-a
color=blue
U+0063 U+006F U+006C U+006F U+0072 U+003D U+0062 U+006C U+0075 U+0065De letterlijke quote past niet bij de opgegeven key en value.
fact{
"id": "claim-a",
"grounded": false,
"reason": "fact",
"evidence": null
}Grounded betekent hier alleen de exacte koppeling tussen record, regel en key=value. Een onware bron kan letterlijk worden geciteerd. Een bronnaam in tekst creëert geen opgehaald record; herkomst, tenantgrenzen en waarheid vragen eigen controles.
Alle kaarten, tenants, receipts, meetrijen en claims zijn eigen oefengegevens. Deze vergelijking doet geen echte zoek- of netwerkopdracht.
4. Grounded is nog geen waar
Verander alleen de geclaimde kleur: het oude blauwe citaat onderbouwt rood niet. Verander daarna ook de oefenbron en het citaat naar rood. De letterlijke koppeling klopt opnieuw, maar deze functie kan niet vaststellen welke kleur buiten onze tabel werkelijk juist is.
claim["value"] = "red"
print(check_claim_evidence(
[claim], retrieved)[0]["reason"])
# fact
claim["citation"]["quote"] = "color=red"
retrieved[0]["text"] = "color=red"
print(check_claim_evidence(
[claim], retrieved)[0]["grounded"])
# True
De wijziging hierboven is eigen invoer voor een demonstratie, geen goedgekeurde corpusupdate. Tenantbegrenzing en de afzonderlijke herkomstcontrole blijven nodig. Onze exacte regel is bovendien geen algemene controle van natuurlijke taal, volledigheid of waarheid.
Samenvatting
- Meet ophalen, doelantwoord en gewone taak afzonderlijk, met hun juiste noemers.
- Bind het citaat aan een werkelijk opgehaald record en de precieze claim.
- Bronbinding helpt controleren, maar vervangt geen herkomstbeoordeling of waarheidscontrole.
Hierna verschuift de aandacht naar gevoelige gegevens, verborgen context en wat modelgedrag daarover kan verraden.