์ฃผ์ด์ง ๊ฐ์ค์น = [0.25, 0.25, 0.25, 0.25](๊ธฐ๋ณธ๊ฐ),
๋ฌธ์ฅ_๋ธ๋ฃจ([['์', 'b', 'c']], ['์', 'b', 'c']) = 0
๋์ sentence_bleu([['a', 'b', 'c']], ['a', 'b', 'd']) = 0.7598
๋ถ๋ช
ํ ์ด์ ์ ์๋ ํ์๋ณด๋ค ์ปค์ผ ํ๊ฑฐ๋ ๋ ์ ์๊ฐ ๋ชจ๋ 0์ด์ด์ผ ํฉ๋๋ค.
์ด๋ค ๋ฒ์ ์ ์ฝ๋๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๊น?
$ python
>>> import nltk
>>> nltk.__version__
'3.2.1'
BLEU ๊ตฌํ์ ์ต๊ทผ #1330์ด ํด๊ฒฐ๋์ด ์์ ๋์์ต๋๋ค. ๋น์ ์ด ์ฌ์ฉํ๋ ๊ฒฝ์ฐ develop
๋ถ๊ธฐ nltk
,์ด ์ถ๋ ฅ๋์ด์ผํ๋ค :
>>> import nltk
>>> from nltk import bleu
>>> ref = hyp = 'abc'
>>> bleu([ref], hyp)
1.0
>>> from nltk import bleu
>>> ref, hyp = 'abc', 'abd'
>>> bleu([ref], hyp)
0.7598356856515925
๋ฌธ์์ด์ ๋ฌธ์ ๋ชฉ๋ก์ด๊ณ nltk
๋ sentence_bleu()
๋ฅผ ์ต์์ ๊ฐ์ ธ์ค๊ธฐ๋ก ๊ฐ์ ธ์ค๊ธฐ ๋๋ฌธ์ ์์ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
>>> from nltk.translate.bleu_score import sentence_bleu
>>> sentence_bleu([['a', 'b', 'c']], ['a', 'b', 'c'])
1.0
>>> sentence_bleu([['a', 'b', 'c']], ['a', 'b', 'd'])
0.7598356856515925
์ต์ develop
๋ถ๊ธฐ๋ฅผ ์ค์นํ๋ ค๋ฉด ๋ค์์ ์๋ํ์ญ์์ค.
pip install https://github.com/nltk/nltk/archive/develop.zip
( ๊ฐ๋ฐ ๋ธ๋์น๋ _์์์น ๋ชปํ ๋ฒ๊ทธ๊ฐ ๋ ๋ง์ด ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์๊ฐ master
๋๋ ๊ณต์ ๋ฆด๋ฆฌ์ค๋ฅผ ์ค์นํ๋ ๊ฒ์ด ์ข์ต๋๋ค. )
๊ด๋ จ ์ฐธ๊ณ ์ฌํญ์ด์ง๋ง bleu
์ ํ์ฌ nltk
๊ตฌํ๊ณผ ์ง์ ์ ์ผ๋ก ๊ด๋ จ๋์ง๋ ์์์ง๋ง #1330 ์์ ์ฌํญ์ด ์๋ ์ด์ ๊ตฌํ์ ์ธ๊ธฐ ์๋ multi-bleu.perl
์ ๋์ผํ ๊ฒฐํจ์ ๋
ธ์ถ๋ฉ๋๋ค. ์ต๊ทผ ์์ ์์ด 0์ ๋ฐํํ ์ด์ ๋ฅผ ์๋ ๊ฒ์ด ํฅ๋ฏธ๋ก์ธ ์๋ ์์ต๋๋ค. https://gist.github.com/alvations/e5922afa8c91472d25c58b2d712a93e7
@alvations ๊ฐ์ฌ
BLEU์ ์ ์ผํ ์์ ์ ์ธ ๋ฒ์ ์ develop
๋ถ๊ธฐ์ ์์ต๋๋ค. NLTK 3.2.2์์ ๋ฆด๋ฆฌ์ค๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๊ฑฐ๋ develop
๋ถ๊ธฐ๋ฅผ ์ค์นํ์ญ์์ค(๊ทธ๋ฌ๋ ๊ฐ๋ฐ ๋ถ๊ธฐ๋ ํ
์คํธ๋์ง ์์ ๋ฒ๊ทธ์ ์ํฅ์ ๋ฐ์ ์ ์์ต๋๋ค).
ํ์ธ. ๊ธฐ๋ค๋ฆด๊ฒ. ๊ทธ๋ฌ๋ ์์์ ์ธ๊ธํ ๊ฒฝ์ฐ ๊ฐ์ค์น๊ฐ [0.25, 0.25, 0.25, 0.25]์ธ ๊ฒฝ์ฐ ๋ฌธ์ฅ_bleu([['a', 'b', 'c']], ['a', 'b ', 'c']) ๋ฐ sentence_bleu([['a', 'b', 'c']], ['a', 'b', 'd'])๋ ์๋ณธ ๋ ผ๋ฌธ์ ๋ฐ๋ฅด๋ฉด ๋ ๋ค 0์ด์ด์ผ ํฉ๋๋ค.
์๋ณธ ๋
ผ๋ฌธ์ ์ฐธ์กฐ/๊ฐ์ค์ ๊ธธ์ด๊ฐ n
๋ณด๋ค ์์ผ๋ฉด p_n
๊ฐ 0์ด ๋ ์ ์๋ค๋ ์ฌ์ค์ ์ค๋ช
ํ์ง ์์์ต๋๋ค . http://www.aclweb ์น์
2.3์ ๋ฐฉ์ ์ ์ฐธ์กฐ n
๋ณด๋ค ์์ ์ฐธ์กฐ/๊ฐ์ค์ด ์์ ๊ฐ๋ฅ์ฑ์ ๋
ผ๋ฌธ์์ ๋ค๋ฃจ์ง ์์์ต๋๋ค.
2.3์ ์ ๊ณต์์ ๋ณด๋ฉด exp(log(p_n))
์ทจํ๊ณ p_n
๊ฐ 0์ผ ๋ ๋์ ํจ์(์: y = log x
) ๋๋ฌธ์ ์ํ ์์ญ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. x = 0 ์ ์ ๊ทผ์ ์ด ์์ผ๋ฏ๋ก x ๋ฒ์๋ 0๋ณด๋ค ์ปค์ผ ํฉ๋๋ค.
๋ฐ๋ผ์ ์๋ BLEU๋ฅผ ๊ตฌํํ๋ ๊ฒฝ์ฐ ์ฌ์ฉ์๋ ์ํ ๋๋ฉ์ธ ์ค๋ฅ๊ฐ ๋ฐ์ํ ๋๋ง๋ค "BLEU๋ฅผ ๊ณ์ฐํ ์ ์์ต๋๋ค"์ ๊ฐ์ ๊ฒฝ๊ณ ๋ฅผ ๋ฐ์์ผ ํฉ๋๋ค. ๋ฐ๋ผ์ BLEU์ ์ต์ ๋ฒ์ ์ ์ฌ๋ฌ ๊ฐ์ง ๋ค๋ฅธ ํดํน์ผ๋ก ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๊ณ ํฉ๋๋ค. ๋ฒ์ ๊ธฐ๋ก์ https://github.com/moses-smt/mosesdecoder/blob/master/scripts/generic/mteval-v13a ์์ ์ฐพ์ ์ ์์ต๋๋ค
BLEU์ ์ต์ ๋ฒ์ ์ Chen and Cherry(2014) ๋
ผ๋ฌธ์ ์ค๋ฌด๋ฉ ๊ธฐ๋ฅ๊ณผ ํจ๊ป ์ ๊ณต๋๋ฉฐ mteval.pl
์ Moses ๋ฒ์ ์๋ ์์ต๋๋ค.
์ค๋ช ์ด ๋์์ด ๋์์ผ๋ฉด ํฉ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์๋ณธ ๋ ผ๋ฌธ์ ์ฐธ์กฐ/๊ฐ์ค์ ๊ธธ์ด๊ฐ
n
๋ณด๋ค ์์ผ๋ฉดp_n
๊ฐ 0์ด ๋ ์ ์๋ค๋ ์ฌ์ค์ ์ค๋ช ํ์ง ์์์ต๋๋ค . http://www.aclweb ์น์ 2.3์ ๋ฐฉ์ ์ ์ฐธ์กฐn
๋ณด๋ค ์์ ์ฐธ์กฐ/๊ฐ์ค์ด ์์ ๊ฐ๋ฅ์ฑ์ ๋ ผ๋ฌธ์์ ๋ค๋ฃจ์ง ์์์ต๋๋ค.2.3์ ์ ๊ณต์์ ๋ณด๋ฉด
exp(log(p_n))
์ทจํ๊ณp_n
๊ฐ 0์ผ ๋ ๋์ ํจ์(์:y = log x
) ๋๋ฌธ์ ์ํ ์์ญ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. x = 0 ์ ์ ๊ทผ์ ์ด ์์ผ๋ฏ๋ก x ๋ฒ์๋ 0๋ณด๋ค ์ปค์ผ ํฉ๋๋ค.๋ฐ๋ผ์ ์๋ BLEU๋ฅผ ๊ตฌํํ๋ ๊ฒฝ์ฐ ์ฌ์ฉ์๋ ์ํ ๋๋ฉ์ธ ์ค๋ฅ๊ฐ ๋ฐ์ํ ๋๋ง๋ค "BLEU๋ฅผ ๊ณ์ฐํ ์ ์์ต๋๋ค"์ ๊ฐ์ ๊ฒฝ๊ณ ๋ฅผ ๋ฐ์์ผ ํฉ๋๋ค. ๋ฐ๋ผ์ BLEU์ ์ต์ ๋ฒ์ ์ ์ฌ๋ฌ ๊ฐ์ง ๋ค๋ฅธ ํดํน์ผ๋ก ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๊ณ ํฉ๋๋ค. ๋ฒ์ ๊ธฐ๋ก์ https://github.com/moses-smt/mosesdecoder/blob/master/scripts/generic/mteval-v13a ์์ ์ฐพ์ ์ ์์ต๋๋ค
BLEU์ ์ต์ ๋ฒ์ ์ Chen and Cherry(2014) ๋ ผ๋ฌธ์ ์ค๋ฌด๋ฉ ๊ธฐ๋ฅ๊ณผ ํจ๊ป ์ ๊ณต๋๋ฉฐ
mteval.pl
์ Moses ๋ฒ์ ์๋ ์์ต๋๋ค.์ค๋ช ์ด ๋์์ด ๋์์ผ๋ฉด ํฉ๋๋ค.