쉽게 이해하는 BLEU

신재완·2025년 6월 25일

AI & Data Science/NLP

목록 보기
2/2
post-thumbnail

개요

이전 글에서 ROUGE에 대해 알아보았다. 다음으로 BLEU를 알아보겠다.

https://velog.io/@jzahnny/rougen-rouge-l
https://velog.io/@jzahnny/rougen-rouge-l

BLEU는 2002년 BLEU: a Method for Automatic Evaluation of Machine Translation 논문에서 설명한 개념으로 여러 단계의 n-gram을 사용하여 사람이 입력한 Reference에 비해 기계가 번역한 Candidate의 품질이 어떠한지 측정하는 지표이다.

n-gram

BLEU를 구하기 위해서는 먼저 n-gram이 무엇인지 알아야 한다. n-gram은 n개의 인접한 기호를 순서대로 묶은 나열을 말한다.
예를 들어 아래 문장을 어절 단위로 기호를 구분한다고 해보자.

나는 너를 너무 좋아해

이때 1-gram과 2-gram은 다음과 같다.

1-gram (unigram)

[나는], [너를], [너무], [좋아해]

2-gram (bigram)

[나는 너를], [너를 너무], [너무 좋아해]

3-gram (trigram)

[나는 너를 너무], [너를 너무 좋아해]

BLEU 공식

BLEU를 구하는 공식은 아래와 같다. 차근차근 뜯어보자.

BLEU=BPexp(n=1Nwnlogpn)\text{BLEU} = \text{BP}\cdot\text{exp}\left(\sum\limits_{n=1}^Nw_n\log{p_n}\right)

BP\text{BP}는 Brevity Penalty를 의미한다. 말 그대로 기계가 만든 번역의 길이가 짧을 수록 큰 패널티를 주는 것이다. cc는 candidate의 길이, rr은 reference의 길이이다. 기계가 만든 게 더 길면 1로 둬서 패널티를 안 주지만 더 짧다면 패널티를 준다.

BP={1if c>re(1r/c)if cr\text{BP} = \begin{cases} 1 & \text{if } c > r \\ e^{(1-r/c)} & \text{if } c \leq r \end{cases}

NN은 n-gram을 얼마까지 쓸지를 나타낸다.

wnw_n은 각 n-gram에 대한 weight이다. 일반적으로는 uniform weights인 wn=1/Nw_n = 1 / N을 사용할 수 있다.

pnp_n은 n-gram에 대한 precision으로 아래와 같이 구한다.

pn=n-gram overlapCandinate의 n-gram 길이p_n = \frac{\text{n-gram overlap}}{\text{Candinate의 n-gram 길이}}

예시

예를 들어 BLEU-2를 구하고 uniform weight을 사용하며 번역 결과가 아래와 같이 나왔다고 해보자.

Ref: 나는 너를 너무 좋아해
Can: 나는 너무 좋아해 너를

우선 rrcc가 같으므로 BP\text{BP}는 1이다.

Ref 1-gram: [나는], [너를], [너무], [좋아해]
Can 1-gram: [나는], [너무], [좋아해], [너를]

p1p_1을 구해보자. 위에서 모든 덩어리가 겹치므로 4/4 = 1이다.

Ref 2-gram: [나는 너를], [너를 너무], [너무 좋아해]
Can 2-gram: [나는 너무], [너무 좋아해], [좋아해 너를]

p2p_2에서는 can의 길이가 3, 겹친게 1이므로 1/3이다.

uniform weight을 사용하므로 w1w_1, w2w_2는 모두 1/2이다.

이제 모든 걸 합쳐보자.

BLEU-2=BPexp(n=12wnlogpn)=1exp(w1logp1+w2logp2)=exp(12log1+12log13)0.577\begin{aligned} \text{BLEU-2} &= \text{BP} \cdot \exp\left(\sum_{n=1}^{2} w_n \log p_n\right) \\ &= 1 \cdot \exp\left(w_1 \log p_1 + w_2 \log p_2\right) \\ &= \exp\left(\frac{1}{2} \log 1 + \frac{1}{2} \log \frac{1}{3}\right) \\ &\approx 0.577 \end{aligned}

참고로 pnp_n의 분자가 0이 될 수도 있는데 그렇게 되면 값이 exp()\exp(-\infty)가 되고 결국 BLEU가 0이 된다.

Reference

[1] Kishore Papineni, Salim Roukos, Todd Ward, and Wei-Jing Zhu. 2002. Bleu: a Method for Automatic Evaluation of Machine Translation. In Proceedings of the 40th Annual Meeting of the Association for Computational Linguistics, pages 311–318, Philadelphia, Pennsylvania, USA. Association for Computational Linguistics.

profile
Developer, 출판사 운영, 콘텐츠 크리에이터, 드론, 3D프린팅

0개의 댓글