자연어 처리의 결과를 평가하기 위해서 크게 2가지의 평가 지표가 있다 하나는 ROUGE지표이고 다른 하나는 BLEU지표이다
1. 맞춘 단어 개수로 측정
ROUGE는 정답문장에 예측한 단어가 몇 개가 있는지 평가하는 것이고
BLEU는 예측문장에 정답 단어가 몇 개가 있는지 평가하는 것이다
예를 들어
정답문장 : "He did his homework before having dinner"
예측문장 : "I did his homework yesterday"
ROUGE = 3/7 ,
BLEU = 3/5 이다
하지만 번역에서는 정답이 하나만 있는 것이 아니다 따라서 정답 문장이 여러개 존재할 수 있으며 BLUE를 기준으로 설명하자면 모든 정답 문장중 어느 한곳에라도 포함된 단어라면 정답으로 인정한다
2. 중복 제거하기
하지만 이 방식은 문제가 있다 아래의 문장을 보자
정답문장 : "He did his homework before having dinner"
예측문장 : "did did did did"
어처구니 없는 번역이지만 모든 단어가 정답문장에 포함되므로 위의 BLEU지표는 4/4 이다
따라서 우리는 중복을 제거해야할 필요가 있다
따라서 중복된 단어가 있을 경우 정답으로 인정해주는 최대 개수는 정답문장에서 해당 단어가 등장하는 횟수로 보정한다
이에 따라 보정된 값은 1/4 이다
3. 순서 고려하기
하지만 여전히 문제가 남아있다 아래의 문장을 보자
정답문장 : "He did his homework before having dinner"
예측문장 : "having did his homework dinner before he"
상당히 틀렸음에도 BLEU지표는 5/5이다 순서가 고려되지 않았기 때문이다
따라서 2개씩, 3개씩 묶어서 평가해보자 2개씩 묶어보면 다음과 같다
정답문장 분해: "He did" "did his" "his homework" "homework before" "befre having" "having dinner"
예측문장 분해: "having did" "did his" "his homework" "homework dinner" "dinner before" "before he"
이제 BLEU 지표는 2/6이고 좀 더 나아졌다
4. 길이 고려하기
이번 문제는 짧은 문장에 대한 문제이다
정답문장 : "He did his homework before having dinner"
예측문장 : "He did"
1개씩 보더라도 2개씩 보더라도 평가지표는 1/1, 2/2 이다 하지만 우리는 이것이 잘못된 번역임을 안다 따라서 짧은 문장에 해단 패널티를 주어야한다 긴 문장에 대한 패널티를 주지 않는 이유는 더 길단 이야기는 정답이 아닌 단어가 더 들어가 있단 것이고(중복이 고려되기에 정답문장보다 많은 정답단어는 존재할수없다) 따라서 굳이 패널티를 따로 주지 않더라도 더 긴 문장은 점수가 낮아진다
부여할 패널티는 다음과 같다
- 예측문장 길이가 정답문장보다 같거나 길다면 1 * BLEU
- 예측문장 길이(c)가 정답문장길이(r)보다 짧다면 exp(1-r / c) * BLEU
5. 최종 BLEU
c 는 예측문장의 길이, r은 정답문장의 길이이다
N은 순서를 고려하기 위해 묶을 최대 단어의 개수이다 N=3이라면 1단어묶음, 2단어묶음, 3단어묶음을 전부 계산하여 더한다
wₙ 은 가중치를 의미한다 1단어일 때, 2단어일 때 반영 비율을 조정할 수 있다
pₙ 은 중복을 고려하여 단어를 센 개수이다
참고 링크
https://jrc-park.tistory.com/273