Scorery deterministyczne

Scorery sekwencyjne: BLEU, chrF, ROUGE

Aktualizacja: 11 października 2026

Po co n-gramy

W tłumaczeniu i streszczeniu nie istnieje jedna poprawna sekwencja słów. Miary n-gramowe porównują wyjście z referencją na poziomie fragmentów długości nn: nagradzają zgodność lokalną i tolerują przestawienia.

BLEU — precyzja z karą za zwięzłość

BLEU uśrednia (logarytmicznie) precyzje n-gramowe pnp_n dla n=1..4n = 1..4 i mnoży przez karę za zbyt krótkie wyjście (brevity penalty):

BLEU=BP⋅exp⁡(∑n=1414log⁡pn),BP=min⁡(1,e1−r/c)BLEU = BP \cdot \exp\left(\sum_{n=1}^{4} \tfrac{1}{4}\log p_n\right), \quad BP = \min\left(1, e^{1 - r/c}\right)

gdzie rr to długość referencji, a cc długość wyjścia. Kara BPBP pilnuje, by model nie „oszczędzał" na długości: krótkie, pewne n-gramy dają wysoką precyzję, ale nie tłumaczenie. Karta: BLEU / chrF.

chrF — F-score na n-gramach znakowych

chrF liczy precyzję i recall n-gramów znakowych, przez co jest mniej wrażliwy na morfologię i tokenizację niż BLEU:

chrFβ=(1+β2)⋅chrP⋅chrRβ2⋅chrP+chrRchrF_\beta = (1 + \beta^2) \cdot \frac{chrP \cdot chrR}{\beta^2 \cdot chrP + chrR}

Popularny wariant β=2\beta = 2 waży recall dwukrotnie (chrF2) i bywa uznawany za stabilniejszą alternatywę BLEU przy porównywaniu systemów tłumaczeniowych.

ROUGE — rodzina zorientowana na recall

ROUGE odwraca akcent: dla streszczeń ważne jest, ile treści referencji pokrywa wyjście. ROUGE-N to recall n-gramów:

ROUGE-N=∑S∈Ref∑gn∈SCount⁡match(gn)∑S∈Ref∑gn∈SCount⁡(gn)ROUGE\text{-}N = \frac{\sum_{S \in Ref}\sum_{g_n \in S} \operatorname{Count}_{match}(g_n)}{\sum_{S \in Ref}\sum_{g_n \in S} \operatorname{Count}(g_n)}

ROUGE-L używa zamiast n-gramów najdłuższego wspólnego podciągu. Karta: ROUGE.

Kiedy która miara

BLEU i chrF sprawdzają się w tłumaczeniu (ocena korpusowa, najlepiej z wieloma referencjami), ROUGE w streszczeniu, gdzie liczy się pokrycie treści. Żadna z nich nie nadaje się do oceny pojedynczej odpowiedzi QA — tam zbyt wiele zależy od konkretnego sformułowania.

W praktyce: jedna biblioteka, jeden protokół

Wyniki BLEU i chrF zależą od tokenizacji — potrafi ona przesunąć wynik o kilka punktów, a implementacje różnie traktują diakrytyki i interpunkcję — dlatego porównuj wyłącznie liczby z tej samej biblioteki:

import sacrebleu
 
ref = ["Kot siedzi na macie."]
hyp = "Kot leży na macie."
print(sacrebleu.sentence_bleu(hyp, ref).score)
print(sacrebleu.sentence_chrf(hyp, ref).score)

Źródła: BLEU (Papineni i in.), chrF (Popović), ROUGE (Lin), SacreBLEU.

Scorery sekwencyjne: BLEU, chrF, ROUGE