신경 기계 번역(NMT) 의 표준 작업입니다. NLP 원본 언어의 텍스트를 대상 언어로 번역하는 작업이 포함됩니다. BLEU(이중언어 평가 연구) 기계 번역기가 수행한 번역을 평가하는 데 사용되는 점수입니다. 이 기사에서는 BLEU 점수의 수학적 원리와 Python에서의 구현을 살펴보겠습니다.
내용의 테이블
BLEU 점수란 무엇입니까?
위에서 언급한 바와 같이 BLEU 점수는 기계 번역 작업에 대한 평가 지표입니다. 비교하여 계산됩니다. n-그램 기계 번역 문장의 n-그램 인간 번역 문장. 일반적으로 문장 길이가 길어질수록 BLEU 점수가 감소하는 것으로 관찰되었습니다. 그러나 이는 번역에 사용되는 모델에 따라 달라질 수 있습니다. 다음은 문장 길이에 따른 BLEU Score의 변화를 나타낸 그래프입니다.
BLEU 점수에 대한 수학적 표현
수학적으로 BLEU 점수는 다음과 같이 지정됩니다.
BLEU Score = BP * exp(sum_{i=1}^{N}(w_i * ln(p_i))
리눅스 $home여기,
- BP 약자 간결성 페널티
w_i i차 n-gram 정밀도에 대한 가중치입니다. 일반적으로 가중치는 모든 i에 대해 동일합니다.p_i i차의 n-gram 수정 정밀도 점수입니다.- N은 고려해야 할 최대 n-gram 순서입니다(일반적으로 최대 4).
수정된 n-그램 정밀도(p_i )
수정된 정밀도
p_i = frac{ ext{Count Clip}(matches_i, ext{max-ref-count}_i)}{ ext{candidate-n-grams}_i}
여기,
- Count Clips는 일치하는 n-gram 수(
matches_i ) 모든 참조 번역에서 n-gram의 최대 개수(ext{max-ref-count}_i .matches_i 일치하는 차수 i의 n-그램 수입니다. 정확히 후보 번역과 참조 번역 사이.ext{max-ref-count}_i 단일 참조 번역에서 발견된 i 순서의 특정 n-그램이 나타나는 최대 횟수입니다.ext{candidate-n-grams}_i 후보 번역에 존재하는 순서 i의 총 n-그램 수입니다.
간결성 페널티(BP)
간결성 페널티 참조 번역보다 짧은 번역에 불이익을 줍니다. 에 대한 수학적 표현 간결성 페널티 다음과 같이 주어진다:
BP = exp(1- frac{r}{c}) 여기,
- r은 후보 번역의 길이입니다.
- c는 참조 번역의 평균 길이입니다.
BLEU 점수를 계산하는 방법은 무엇입니까?
BLEU 점수 계산을 더 잘 이해하기 위해 예를 들어 보겠습니다. 다음은 프랑스어에서 영어로 번역하는 경우입니다.
- 소스 텍스트(프랑스어) : 이 이미지는 내가 클릭한 것입니다.
- 기계 번역된 텍스트 : 내가 찍은 사진
- 참고문헌-1 : 이 사진은 내가 클릭한 것입니다
- 참고문헌-2 : 내가 클릭한 사진입니다
우리는 기계에 의한 번역이 정확하지 않다는 것을 분명히 볼 수 있습니다. 번역의 BLEU 점수를 계산해 보겠습니다.
유니그램 수정 정밀도
을 위한 n = 1, 우리는 유니그램 수정 정밀도:
| 유니그램 | 기계 번역에서 계산 | 참조의 최대 개수 | 잘린 수 = min(MT의 개수, Ref의 최대 개수) |
|---|---|---|---|
| 그만큼 | 2 | 1 | 1 |
| 그림 | 2 | 1 | 1 |
| ~에 의해 | 1 | 1 | 1 |
| 나 | 1 | 1 | 1 |
여기서 유니그램(the, picture, by, me)은 기계 번역된 텍스트에서 가져온 것입니다. 개수는 모든 기계 번역 텍스트에서 n-gram의 빈도를 의미하고, Clipped Count는 참조 텍스트에서 유니그램의 빈도를 집합적으로 나타냅니다.
Bigram 수정 정밀도
을 위한 n = 2 , 우리는 Bigram 수정 정밀도 :
| 바이그램 | MT로 계산 | 참조의 최대 개수 | 잘린 수 = min(MT의 개수, Ref의 최대 개수) |
|---|---|---|---|
| 사진 | 2 | 1 이진 트리와 이진 검색 트리의 차이점 | 1 |
| 그림을 그리다 | 1 | 0 | 0 |
| 사진: | 1 | 0 | 0 |
| 나에게서부터로 | 1 | 1 | 1 |
트라이그램 수정 정밀도
을 위한 n = 3 , 우리는 트라이그램 수정 정밀도:
| 트라이그램 | MT로 계산 | 참조의 최대 개수 | 잘린 수 = min(MT의 개수, Ref의 최대 개수) |
|---|---|---|---|
| 그림은 | 1 | 0 | 0 |
| 그림을 그리다 | 1 | 0 | 0 |
| 사진 | 1 | 0 | 0 |
| 내가 찍은 사진 | 1 | 0 | 0 |
4그램 수정 정밀도
을 위한 n =4 , 우리는 4그램 수정 정밀도:
| 4그램 | 세다 | 참조의 최대 개수 vlc는 YouTube에서 비디오를 다운로드합니다. | 잘린 수 = min(MT의 개수, Ref의 최대 개수) |
|---|---|---|---|
| 그림 그림 | 1 | 0 | 0 |
| 그림을 그리다 | 1 | 0 | 0 |
| 내가 찍은 사진 | 1 | 0 | 0 |
컴퓨팅 간결성 페널티
이제 모든 정밀도 점수를 계산했습니다. 번역에 대한 간결성 페널티를 찾아보겠습니다.
- 기계 번역 출력 길이 = 6 (기계 번역 텍스트: 사진은 제가 찍은 사진입니다)
- 최대 기준 출력 길이 = 6 (참고문헌-2: 제가 클릭한 사진입니다)
BLEU 점수 계산
마지막으로 위 번역의 BLEU 점수는 다음과 같이 계산됩니다.
값을 대체하면 다음을 얻습니다.
마지막으로 주어진 번역에 대한 BLEU 점수를 계산했습니다.
Java에서 유형 변환 및 캐스팅
Python에서 BLEU 점수 구현
BLEU 점수를 수동으로 계산하면 이제 BLEU 점수의 수학적 작업에 익숙해집니다. 그러나 파이썬의 NLTK BLEU 점수 계산을 위한 내장 모듈을 제공합니다. 위와 동일한 번역 예시에 대해 이번에는 NLTK를 사용하여 BLEU 점수를 계산해 보겠습니다.
암호:
파이썬3
from> nltk.translate.bleu_score>import> sentence_bleu> # Define your desired weights (example: higher weight for bi-grams)> weights>=> (>0.25>,>0.25>,>0>,>0>)># Weights for uni-gram, bi-gram, tri-gram, and 4-gram> # Reference and predicted texts (same as before)> reference>=> [[>'the'>,>'picture'>,>'is'>,>'clicked'>,>'by'>,>'me'>],> >[>'this'>,>'picture'>,>'was'>,>'clicked'>,>'by'>,>'me'>]]> predictions>=> [>'the'>,>'picture'>,>'the'>,>'picture'>,>'by'>,>'me'>]> # Calculate BLEU score with weights> score>=> sentence_bleu(reference, predictions, weights>=>weights)> print>(score)> |
Output: 0.7186082239261684 We can see that the BLEU score computed using Python is the same as the one computed manually. Thus, we have successfully calculated the BLEU score and understood the mathematics behind it.>