ΠΡΡΡ Π½Π΅ΠΈΠ½ΡΡΠΈΡΠΈΠ²Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ bleu_score.
>>> bleu_score.sentence_bleu([[1,2,3,4]],[5,6,8,1], weights=(0.5, 0.5))
0.5
>>> bleu_score.sentence_bleu([[1,2,3,4]],[5,6,1,2], weights=(0.5, 0.5))
0.408248290463863
>>> bleu_score.sentence_bleu([[1,2,3,4]],[5,6,2,3], weights=(0, 0.5))
0.5773502691896257
>>> bleu_score.sentence_bleu([[1,2,3,4]],[5,6,7,3], weights=(0, 0.5))
1.0
>>> bleu_score.sentence_bleu([[1,2,3,4]],[5,6,8,7], weights=(0, 0.5))
0
ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ SmoothingFunction.method0
ΠΏΡΠΎΠΏΡΡΠΊΠ°Π΅Ρ Π»ΡΠ±ΡΠ΅ Π΄ΡΠΎΠ±ΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°Π²Π½Ρ Π½ΡΠ»Ρ, ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ ΠΎΡΠ΅Π½ΠΊΡ bleu Π² ΡΡΠΈΡ
ΡΠ»ΡΡΠ°ΡΡ
ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ Π½Π΅ ΠΈΠ½ΡΡΠΈΡΠΈΠ²Π½ΠΎ ΠΏΠΎΠ½ΡΡΠ½ΠΎΠΉ. ΠΠ° ΠΌΠΎΠΉ Π²Π·Π³Π»ΡΠ΄, Π±ΡΠ»ΠΎ Π±Ρ Π±ΠΎΠ»Π΅Π΅ ΠΈΠ½ΡΡΠΈΡΠΈΠ²Π½ΠΎ ΠΏΠΎΠ½ΡΡΠ½ΠΎ, Π΅ΡΠ»ΠΈ Π±Ρ log (0) ΠΎΡΠ΅Π½ΠΈΠ²Π°Π» Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ -inf, Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠ΅Π³ΠΎ ΠΎΠ±ΡΠΈΠΉ Π±Π°Π»Π» bleu Π² ΡΡΠΈΡ
ΡΠ»ΡΡΠ°ΡΡ
ΠΎΡΠ΅Π½ΠΈΠ²Π°Π»ΡΡ Π² 0. ΠΡΠΎ Π²ΠΌΠ΅ΡΡΠ΅ Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΡΠΊΠΈΠΌ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ ΡΠ΄Π΅Π»Π°Π»ΠΎ Π±Ρ ΡΡΠΎ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΈΠ½ΡΡΠΈΡΠΈΠ²Π½ΡΠΌ.
Π§ΡΠΎΠ±Ρ ΡΡΠΎΡΠ½ΠΈΡΡ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅, ΠΎΠ½ Π΄Π°Π΅Ρ Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΠΎΠΊΠΈΠΉ bleu Π΄Π»Ρ Ρ ΡΠ΄ΡΠ΅Π³ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΡ, ΠΊΠΎΠ³Π΄Π° Ρ ΡΡΠΈΡΠ°Ρ, ΡΡΠΎ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π±Π°Π»Π» bleu 0.
>>> bleu_score.sentence_bleu([[1,2,3,4]],[5,6,8,1], weights=(0.5, 0.5))
0.5
>>> bleu_score.sentence_bleu([[1,2,3,4]],[5,6,1,2], weights=(0.5, 0.5))
0.408248290463863
ΠΡΠΎΡΡΠΎ ΡΡΠΎΡΠ½Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Π΄ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ ΠΏΠΎΠ³ΡΡΠ·ΠΈΡΡΡΡ Π² ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ. ΠΠΎΠ»ΡΡΠ°Π΅ΡΠ΅ Π»ΠΈ Π²Ρ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅, ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΎΠ±ΡΠ΅ΡΠ΅ ΡΡΠΈ Π²ΡΠΎΡΠΎΡΡΠ΅ΠΏΠ΅Π½Π½ΡΠ΅ ΡΠ»ΡΡΠ°ΠΈ?
ΠΠ°, Ρ ΠΏΠΎΠ»ΡΡΠ°Ρ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅.
Π₯ΠΎΡΠΎΡΠΈΠΉ. ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ, ΠΏΠΎΡΠ΅ΠΌΡ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠ°ΠΊΠΎΠ²Ρ Π²ΡΡ ΠΎΠ΄Ρ:
ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π½Π΅ΡΠ³Π»Π°ΠΆΠ΅Π½Π½ΡΠΉ BLEU Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ°Π»ΡΡ Π΄Π»Ρ ΠΎΡΠ΅Π½ΠΊΠΈ ΡΡΠΎΠ²Π½Ρ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ Π½Π°ΠΉΡΠΈ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΡΠ³Π»Π°ΠΆΠΈΠ²Π°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π²Π°ΡΠΈΠΌ Π΄Π°Π½Π½ΡΠΌ, ΠΏΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΠΏΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ https://github.com/alvations/nltk/blob/develop/ nltk / translate / bleu_score.py # L425
ΠΡΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Ρ ΠΎΡΠ΅Ρ ΠΏΡΠΎΠΏΡΡΡΠΈΡΡ ΡΠ°Π³, ΡΡΠΎΠ±Ρ Π½Π°ΠΉΡΠΈ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠ³Π»Π°ΠΆΠΈΠ²Π°Π½ΠΈΠ΅, Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ Π½Π° ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠ΅ Π²Π°ΠΌΠΈ ΠΏΡΠΈΠΌΠ΅ΡΡ.
ΠΠ΅ΡΠ²ΡΠΉ ΡΡΠ΅Π½Π°ΡΠΈΠΉ, ΠΊΠΎΠ³Π΄Π° Π²Π°Ρ ΠΏΠΎΡΡΠ΄ΠΎΠΊ n-Π³ΡΠ°ΠΌΠΌΠΎΠ² Π±ΠΎΠ»ΡΡΠ΅, ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΊΡΡΡΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΡΠ»ΠΊΠΎΠΉ ΠΈ Π³ΠΈΠΏΠΎΡΠ΅Π·ΠΎΠΉ, BLEU ΠΊΠΎΡΠΏΡΡΠ° / ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅. Π’Π°ΠΊ ΡΡΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΡΡΠΎΠ³ΠΎ Π½Π΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΡΠΈΠ½ΡΡΡ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅:
>>> from nltk.translate.bleu_score import sentence_bleu
>>> sentence_bleu([[1,2,3,4]],[5,6,8,1], weights=(0.5, 0.5))
/usr/local/lib/python2.7/site-packages/nltk/translate/bleu_score.py:490: UserWarning:
Corpus/Sentence contains 0 counts of 2-gram overlaps.
BLEU scores might be undesirable; use SmoothingFunction().
warnings.warn(_msg)
0.5
ΠΠ°Π»Π΅Π΅ Ρ Π½Π°Ρ Π΅ΡΡΡ ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ 1 Π±ΠΈΠ³ΡΠ°ΠΌΠΌΠ°, Π° 2 ΡΠ½ΠΈΠ³ΡΠ°ΠΌΠΌΡ ΠΏΠ΅ΡΠ΅ΠΊΡΡΠ²Π°ΡΡ ΡΡΡΠ»ΠΊΡ ΠΈ Π³ΠΈΠΏΠΎΡΠ΅Π·Ρ. ΠΠΎΡ ΠΎΠΆΠ΅, ΠΎΠ½ Π΄Π°Π΅Ρ ΡΠ°Π·ΡΠΌΠ½ΡΡ ΠΎΡΠ΅Π½ΠΊΡ.
>>> sentence_bleu([[1,2,3,4]],[5,6,1,2], weights=(0.5, 0.5))
0.408248290463863
ΠΠ΅ΡΠ΅Ρ
ΠΎΠ΄Ρ ΠΊ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌΡ ΠΏΡΠΈΠΌΠ΅ΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ weights=(0, 0.5)
, ΡΡΠΎ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π½Π΅ΠΈΠ½ΡΡΠΈΡΠΈΠ²Π½ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π½Π΅ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΠ΅ ΠΎΡΠ΅Π½ΠΎΠΊ Π΄Π»Ρ Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΈΡ
n-Π³ΡΠ°ΠΌΠΌΠΎΠ² ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠ΅Π»ΠΈ BLEU, Π³Π΄Π΅ ΠΌΡ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌ Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠΎ ΠΏΠΎΡΡΠ΄ΠΊΡ n-Π³ΡΠ°ΠΌΠΌΠΎΠ². ΠΠΎ Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ:
>>> sentence_bleu([[1,2,3,4]],[5,6,2,3], weights=(0, 0.5))
0.5773502691896257
ΠΡ Π²ΠΈΠ΄ΠΈΠΌ, ΡΡΠΎ Ρ Π½Π΅Π³ΠΎ ΡΠ°ΠΊΠΈΠ΅ ΠΆΠ΅ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΡ 1 Π±ΠΈΠ³ΡΠ°ΠΌΠΌ ΠΈ 2 ΡΠ½ΠΈΠ³ΡΠ°ΠΌΠΌ, Π½ΠΎ Ρ Π½Π΅Π³ΠΎ Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΠΎΠΊΠΈΠΉ Π±Π°Π»Π». Π ΡΡΠΎ ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ ΠΌΡ Π²Π·Π²Π΅ΡΠΈΠ²Π°Π΅ΠΌ Π±ΠΈΠ³ΡΠ°ΠΌΠΌΡ ΡΡΠΆΠ΅Π»Π΅Π΅, ΡΠ΅ΠΌ ΡΠ½ΠΈΠ³ΡΠ°ΠΌΠΌΡ, ΠΈ Ρ ΡΠ½ΠΈΠ³ΡΠ°ΠΌΠΌΠΎΠ² ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ Π²Π»ΠΈΡΠ½ΠΈΠ΅. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π±ΠΈΠ³ΡΠ°ΠΌΠΌ ΠΌΠ΅Π½ΡΡΠ΅, ΡΠ΅ΠΌ ΡΠ½ΠΈΠ³ΡΠ°ΠΌΠΌ, Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ, ΡΡΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠΈΠΉ BLEU Π²ΡΡΠ΅.
>>> import math
>>> from nltk import ngrams
>>> from nltk.translate.bleu_score import modified_precision
>>> ref, hyp = [1,2,3,4], [5,6,2,3]
>>> list(ngrams(ref, 2)) # 3 bigrams.
[(1, 2), (2, 3), (3, 4)]
>>> list(ngrams(ref, 1)) # 4 unigrams.
[(1,), (2,), (3,), (4,)]
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π±ΠΎΠ»ΡΡΠ΅Π³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠΉ = Π»ΡΡΡΠ΅Π³ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° BLEU ΠΈΠ½ΡΡΠΈΡΠΈΠ²Π½ΠΎ ΠΏΠΎΠ½ΡΡΠ½ΠΎ, Π½ΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΡΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°ΡΡΡ ΡΠΎΡΠΌΡΠ»ΠΈΡΠΎΠ²ΠΊΠΈ BLEU, ΠΎΡΡΠ°ΠΆΠ΅Π½Π½ΠΎΠΉ Π² ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½ΠΎΠΉ ΡΠΎΡΠ½ΠΎΡΡΠΈ:
>>> modified_precision([ref], hyp, 2)
Fraction(1, 3)
>>> modified_precision([ref], hyp, 1)
Fraction(2, 4)
>>> m1 = modified_precision([ref], hyp, 1)
>>> m2 = modified_precision([ref], hyp, 2)
ΠΡΠ»ΠΈ ΠΌΡ ΠΏΠ΅ΡΠ΅ΠΉΠ΄Π΅ΠΌ ΠΊ ΡΡΠ΅Π΄Π½Π΅ΠΌΡ Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ΡΠΊΠΎΠΌΡ Π»ΠΎΠ³Π°ΡΠΈΡΠΌΠΈΡΠ΅ΡΠΊΠΎΠΌΡ, ΠΌΡ ΡΠ²ΠΈΠ΄ΠΈΠΌ, ΡΡΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Π°Ρ ΡΠΎΡΠ½ΠΎΡΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΡΠΊΠ°ΠΆΠ°Π΅ΡΡΡ:
>>> import math
>>> math.log(m1)
-0.6931471805599453
>>> math.log(m2)
-1.0986122886681098
>>> math.exp(0.5 * math.log(m1) + 0.5 * math.log(m2))
0.408248290463863
>>> math.exp(0 * math.log(m1) + 0.5 * math.log(m2))
0.5773502691896257
ΠΡΠ°ΠΊ, ΠΈΠ· ΠΏΠ΅ΡΠ²ΡΡ ΡΡΠ΅Ρ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΡ Π²Π°ΠΌΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² ΠΏΠ΅ΡΠ²ΡΠΉ Π½Π΅Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»Π΅Π½ (ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅), Π²ΡΠΎΡΠΎΠΉ ΠΈ ΡΡΠ΅ΡΠΈΠΉ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π½Π΅ΠΏΡΠΎΡΡΡΠΌΠΈ Π΄Π»Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ, Π½ΠΎ ΠΎΠ½ΠΈ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π²Π΅ΡΠ½Ρ:
>>> sentence_bleu([[1,2,3,4]],[5,6,8,1], weights=(0.5, 0.5))
0.5
>>> sentence_bleu([[1,2,3,4]],[5,6,1,2], weights=(0.5, 0.5))
0.408248290463863
>>> sentence_bleu([[1,2,3,4]],[5,6,2,3], weights=(0, 0.5))
0.5773502691896257
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Ρ ΠΏΡΠΎΠΏΡΡΡΠΈΠ» ΡΠ°Π³ ΡΡΡΠ°ΡΠ° Π·Π° ΠΊΡΠ°ΡΠΊΠΎΡΡΡ, Π½ΠΎ ΠΏΠΎΠ²Π΅ΡΡΡΠ΅ ΠΌΠ½Π΅, ΡΡΠΎ 1.0, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π΄Π»ΠΈΠ½Π° Π³ΠΈΠΏΠΎΡΠ΅Π·Ρ ΡΠ°ΠΊΠ°Ρ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Ρ ΡΡΡΠ»ΠΊΠΈ. ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅ ΡΠ΅Π±Ρ ΡΠΎΠΆΠ΅ =)
ΠΠ΅ΡΠ΅Ρ ΠΎΠ΄Ρ ΠΊ 4-ΠΌΡ ΠΏΡΠΈΠΌΠ΅ΡΡ, ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΡ ΠΆΠ΅ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΠΎΡΠ½ΠΎΡΡΡ, Π° Π·Π°ΡΠ΅ΠΌ Π²ΡΡΠΈΡΠ»ΡΠ΅ΠΌ ΡΡΠ΅Π΄Π½ΠΈΠΉ Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π»ΠΎΠ³Π°ΡΠΈΡΠΌΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ°Π³:
>>> sentence_bleu([[1,2,3,4]],[5,6,7,3], weights=(0, 0.5))
/Users/liling.tan/git-stuff/nltk-alvas/nltk/translate/bleu_score.py:491: UserWarning:
Corpus/Sentence contains 0 counts of 2-gram overlaps.
BLEU scores might be undesirable; use SmoothingFunction().
warnings.warn(_msg)
1.0
>>> ref, hyp = [1,2,3,4], [5,6,7,3]
>>> modified_precision([ref], hyp, 1)
Fraction(1, 4)
>>> modified_precision([ref], hyp, 2)
Fraction(0, 3)
>>> m1 = modified_precision([ref], hyp, 1)
>>> m2 = modified_precision([ref], hyp, 2)
>>> math.exp(0 * math.log(m1) + 0.5 * math.log(m2))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: math domain error
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ bigram BLEU ΡΠ°ΠΊΠΆΠ΅ Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎ Π±Π΅Π· Π½Π°Π΄Π»Π΅ΠΆΠ°ΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ³Π»Π°ΠΆΠΈΠ²Π°Π½ΠΈΡ.
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π»ΠΎΡΡ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ BLEU, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠΈΠ»ΡΡΡ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠΉ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ. Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΡΡΠΎ Ρ ΠΎΡΠΎΡΠ°Ρ ΠΈΠ΄Π΅Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎ, Π½ΠΎ ΠΎΠ½ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ°Π·Π΄ΡΠ°ΠΆΠ°Π΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΎ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΡΠ°ΡΡΠΎ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ Π² ΠΏΠ΅ΡΠΈΡΠ΅ΡΠΈΠΉΠ½ΠΎΠΌ Π½Π°Π±ΠΎΡΠ΅ Π΄Π°Π½Π½ΡΡ .
ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»Π΅Π½, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 0 Π΄Π»Ρ 0 ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡΠ΅ΠΉ ΡΠ½ΠΈΠ³ΡΠ°ΠΌΠΌΡ. Π ΠΈΡΠΎΠ³Π΅:
>>> import warnings
>>> warnings.simplefilter("always")
>>> from nltk.translate.bleu_score import sentence_bleu
# Invalid use of BLEU.
>>> sentence_bleu([[1,2,3,4]],[5,6,8,1], weights=(0.5, 0.5))
/Users/liling.tan/git-stuff/nltk-alvas/nltk/translate/bleu_score.py:491: UserWarning:
Corpus/Sentence contains 0 counts of 2-gram overlaps.
BLEU scores might be undesirable; use SmoothingFunction().
warnings.warn(_msg)
0.5
# Valid BLEU score.
>>> sentence_bleu([[1,2,3,4]],[5,6,1,2], weights=(0.5, 0.5))
0.408248290463863
# Logical BLEU score.
>>> sentence_bleu([[1,2,3,4]],[5,6,2,3], weights=(0, 0.5))
0.5773502691896257
# Invalid use of BLEU.
>>> sentence_bleu([[1,2,3,4]],[5,6,7,3], weights=(0, 0.5))
/Users/liling.tan/git-stuff/nltk-alvas/nltk/translate/bleu_score.py:491: UserWarning:
Corpus/Sentence contains 0 counts of 2-gram overlaps.
BLEU scores might be undesirable; use SmoothingFunction().
warnings.warn(_msg)
1.0
# Valid BLEU score.
>>> sentence_bleu([[1,2,3,4]],[5,6,8,7], weights=(0, 0.5))
0
Π’Π΅ΠΏΠ΅ΡΡ ΠΏΠ΅ΡΠ΅ΠΉΠ΄Π΅ΠΌ ΠΊ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ Π΄Π²ΡΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΠΌ. ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅, ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ - Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ BLEU, Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΡΠΎ ΡΠ²ΠΈΠ΄Π΅ΡΡ:
>>> from nltk.translate.bleu_score import sentence_bleu
>>> sentence_bleu([[1,2,3,4]],[5,6,8,1], weights=(0.5, 0.5))
/Users/liling.tan/git-stuff/nltk-alvas/nltk/translate/bleu_score.py:491: UserWarning:
Corpus/Sentence contains 0 counts of 2-gram overlaps.
BLEU scores might be undesirable; use SmoothingFunction().
warnings.warn(_msg)
0.5
>>> sentence_bleu([[1,2,3,4]],[5,6,1,2], weights=(0.5, 0.5))
0.408248290463863
ΠΡΡΠΊΠΈΠΉ ΡΠ°Π· , ΠΊΠΎΠ³Π΄Π° ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ Π² ΠΏ - Π³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ° Ngram (Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π±ΠΈΠ³ΡΠ°ΠΌΠΌΡ), ΡΠΎ ΠΎΠ±ΡΡΠ½ΠΎ ΡΡΠΎ Π·Π»ΠΎΡΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ BLEU , ΠΈ ΠΎΠ½ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° ΡΡΠ΅Ρ Π²Π΅ΡΠ° ΠΏ-1th ΠΏΠΎΡΡΠ΄ΠΊΠ° (Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π² ΡΠ½ΠΈΠ³ΡΠ°ΠΌΠΌΠ°Ρ ).
ΠΡΠ°ΠΊ, Π΅ΡΠ»ΠΈ ΠΌΡ ΡΠ²ΠΈΠ΄ΠΈΠΌ ΠΏΠ΅ΡΠ²ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ Ρ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΌΠΈ Π²Π΅ΡΠ°ΠΌΠΈ Π΄Π»Ρ ΡΠ½ΠΈΠ³ΡΠ°ΠΌΠΌΡ:
>>> sentence_bleu([[1,2,3,4]],[5,6,8,1], weights=(0,))
1.0
Π‘ΡΠ΅Π΄Π½Π΅Π΅ Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π»ΠΎΠ³Π°ΡΠΈΡΠΌΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ±ΠΈΠ²Π°Π΅Ρ Ρ ΡΠΎΠ»ΠΊΡ, Π½ΠΎ ΠΊΠ»ΡΡΠΎΠΌ ΠΊ ΡΡΠΎΠΌΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ ΡΡΠΌΠΌΠ° Π²Π΅ΡΠΎΠ² ΠΏΠΎΡΡΠ΄ΠΊΠΎΠ² n-Π³ΡΠ°ΠΌΠΌΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΡΡΠ°Π²Π»ΡΡΡ 1,0, ΡΡΠΎΠ±Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°ΡΡ ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΈΠ΄Π΅Π΅ BLEU. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ
>>> sentence_bleu([[1,2,3,4]],[5,6,8,1], weights=(1,))
0.25
Π ΠΎΠ±ΡΠ΅ΠΌ, Π²ΡΡΠΊΠΈΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅, ΡΡΠΎ Π½Π΅-BLEU ΡΠΈΡΡΠ°ΡΠΈΡ, ΠΊΠΎΠ³Π΄Π° BLEU Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, ΠΈ Π½Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ Π°ΠΊΡΠΈΠ²Π½ΡΡ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠΉ, ΡΡΠΎΠ±Ρ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ ΡΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ Π±ΠΎΠ»Ρ, ΠΊΡΠΎΠΌΠ΅ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ, ΡΠΎΠ·Π΄Π°ΡΡΠΈΡ Π½ΠΎΠ²ΡΠ΅ Β«Π»ΡΡΡΠΈΠ΅Β» ΠΎΡΠ΅Π½ΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠΌΠ΅ΡΡ Π΄ΡΡΠ³ΡΡ Π°Ρ ΠΈΠ»Π»Π΅ΡΠΎΠ²Ρ ΠΏΡΡΡ.
Π ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ Π²ΡΠΏΠ»ΡΠ²Π°Π΅Ρ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π±ΡΡΡΡΠΎΠ΅ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅, ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΎΠΏΡΠΈΡ emulate_multibleu
Π½ΠΎ Π²Π΅ΡΠ° Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Ρ ΡΠ°Π²Π½ΡΠΌΠΈ Π΅Π΄ΠΈΠ½ΡΠΌ Π²Π΅ΡΠ°ΠΌ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π΄Π»Ρ Π²ΡΠ΅Ρ
4-Π³ΡΠ°ΠΌΠΌΠΎΠ², Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ
>>> sentence_bleu([[1,2,3,4]],[5,6,8,1], emulate_multibleu=True)
0.0
Π Π΅ΡΠ»ΠΈ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ multi-bleu.perl
:
$ cat ref
1 2 3 4
$ cat hyp
5 6 8 1
$ perl ~/mosesdecoder/scripts/generic/multi-bleu.perl ref < hyp
BLEU = 0.00, 25.0/0.0/0.0/0.0 (BP=1.000, ratio=1.000, hyp_len=4, ref_len=4)
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ Π²ΠΎΠΏΡΠΎΡ:
ΠΡΠΆΠ½Π° Π»ΠΈ Π½Π°ΠΌ ΡΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΊΠΎΡΡΠ΅ΠΊΡΠΈΡΠΎΠ²ΠΊΠΈ Π²Π΅ΡΠΎΠ², Π΅ΡΠ»ΠΈ Π²Π΅ΡΠ°, ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°Π΄Π°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ, Π½Π΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ BLEU? Π Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΡΡΠ½ΠΊΡΠΈΡ auto_reweigh
ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ weights = (0.25, 0.25, 0.25, 0.25)
.
emulate_multibleu
Π²Π°ΡΠΈΠ°Π½ΡΠ‘Π»Π΅Π΄ΡΠ΅Ρ Π»ΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΡΠΈΠ»ΡΡΡ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠΉ Π²ΡΠ΅Π³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ BLEU?
ΠΡΠ»ΠΈ Π΅ΡΡΡ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ Π°ΠΊΡΠΈΠ²Π½ΡΠ΅ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½Π½ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΡΡΠΈΡ Π²ΡΠΎΡΠΎΡΡΠ΅ΠΏΠ΅Π½Π½ΡΡ ΡΠ»ΡΡΠ°Π΅Π² BLEU, ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΎΡΠΊΡΡΡΡ Π΄Π»Ρ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠΈΡ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ.
ΠΠΎ Π΅ΡΠ»ΠΈ ΡΡΠΎ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡ ΠΊ Π±ΠΎΠ»Π΅Π΅ Π΄ΡΡΠ°ΡΠΊΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ Ρ BLEU , ΡΠΎ Ρ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΡΠ΅ΠΊΡΡΠ°Ρ Π²Π΅ΡΡΠΈΡ BLEU Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΡΠ°Π±ΠΈΠ»ΡΠ½Π° Ρ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡΠΌΠΈ Π½Π° ΠΌΠ΅ΡΡΠ΅ =)
@benleetownsend Π― Π½Π°Π΄Π΅ΡΡΡ, ΡΡΠΎ ΠΎΠ±ΡΡΡΠ½Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ» ΠΈ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΡΠΎ ΡΠ΅ΠΊΡΡΠ°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ BLEU Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½Π° Π΄Π»Ρ ΠΏΡΠ΅ΠΎΠ΄ΠΎΠ»Π΅Π½ΠΈΡ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΡ Π²Π°ΠΌΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ².
Π― ΠΏΡΠ΅Π΄Π»Π°Π³Π°Ρ (i) ΠΈΠ·Π±Π΅Π³Π°ΡΡ Π²Π·Π»ΠΎΠΌΠ° Π²Π΅ΡΠΎΠ², Π΅ΡΠ»ΠΈ Π²Ρ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΅ΠΎΡΠ΅ΡΠΈΠΊΠΎ-ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½ΡΠ΅ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄Ρ Π΄Π»Ρ ΠΈΡ
ΠΎΡΠ΅Π½ΠΊΠΈ, (ii) ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠΏΡΠΈΡ emulate_multibleu=True
Ρ Π²Π΅ΡΠ°ΠΌΠΈ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ (0,25, 0,25, 0,25, 0,25) ΠΈΠ»ΠΈ (iii ) ΠΏΠΎΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈΡΡΠΉΡΠ΅ Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ ΡΠ³Π»Π°ΠΆΠΈΠ²Π°Π½ΠΈΡ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΠΎΡΠ½ΠΎΡΡΡ, Π½ΠΎ Π²ΡΠ΅ ΠΆΠ΅ ΠΈΠ·Π±Π΅Π³Π°ΠΉΡΠ΅ Π²Π·Π»ΠΎΠΌΠ° Π²Π΅ΡΠΎΠ².
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΠΉ ΠΎΡΠ²Π΅Ρ. Π― ΡΠΎΠ³Π»Π°ΡΠ΅Π½ ΡΠΎ Π²ΡΠ΅ΠΌ, ΡΡΠΎ Π²Ρ ΡΠΊΠ°Π·Π°Π»ΠΈ, ΠΎΠ΄Π½Π°ΠΊΠΎ Ρ ΠΏΠΎΠ»Π°Π³Π°Ρ, ΡΡΠΎ ΠΌΠΎΡ ΠΎΡΠ½ΠΎΠ²Π½Π°Ρ ΡΠΎΡΠΊΠ° Π·ΡΠ΅Π½ΠΈΡ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΌΠ½Π΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ, ΠΊΠΎΠ³Π΄Π° Π²Ρ ΡΠ½ΠΈΠΆΠ°Π΅ΡΠ΅ n-1 Π³ΡΠ°ΠΌΠΌ, ΠΊΠ°ΠΆΡΡΡΡ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΌΠΈ, ΠΎΡΠ½ΠΎΠ²ΡΠ²Π°ΡΡΡ Π½Π° Π»ΠΈΡΠ΅ΡΠ°ΡΡΡΠ΅, ΠΊΠΎΡΠΎΡΡΡ Ρ Π²ΠΈΠ΄Π΅Π».
>>> sentence_bleu([[1,2,3,4]],[5,6,8,1], weights=(0.5, 0.5))
/Users/liling.tan/git-stuff/nltk-alvas/nltk/translate/bleu_score.py:491: UserWarning:
Corpus/Sentence contains 0 counts of 2-gram overlaps.
BLEU scores might be undesirable; use SmoothingFunction().
warnings.warn(_msg)
0.5
Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Ρ Π±Ρ ΡΠΊΠ°Π·Π°Π», ΡΡΠΎ ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ BLEU ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ 0 Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΠ»ΡΡΠ°Ρ Β«Π½Π΅ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½ΠΎΒ», Π½ΠΎ Π΅ΡΠ»ΠΈ Ρ Π½Π΅ ΠΏΡΠΎΠΏΡΡΡΠΈΠ» ΡΡΠΎ-ΡΠΎ Π² Π»ΠΈΡΠ΅ΡΠ°ΡΡΡΠ΅, ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ 0,5 Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π½Π΅Π²Π΅ΡΠ΅Π½.
Π― Π±Ρ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΠ» Π»ΠΈΠ±ΠΎ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΡΠΊΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π³ΠΎΠ²ΠΎΡΠΈΡΡΡ, ΡΡΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠ΅ (Π° Π½Π΅ Π½Π΅ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½ΡΠ΅), Π»ΠΈΠ±ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΠ° Β«ΡΠ³Π»Π°ΠΆΠΈΠ²Π°Π½ΠΈΡΒ» ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΡΡΠΎΠ±Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ sys.float_info.min
ΡΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ Π±Π°Π»Π»Ρ bleu 0 ΠΏΡΠΈ Β«Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ BLEU. " ΡΠ»ΡΡΠ°ΠΈ.
ΠΡΠ»ΠΈ Π²Ρ Π½Π΅ ΡΠΎΠ³Π»Π°ΡΠ½Ρ, Π·Π°ΠΊΡΠΎΠΉΡΠ΅ ΡΡΠΎΡ Π²ΠΎΠΏΡΠΎΡ. Π― ΡΠ΅ΡΠΈΠ» ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π² ΡΠ²ΠΎΠ΅ΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ³Π»Π°ΠΆΠΈΠ²Π°Π½ΠΈΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅ΠΉ ΡΠΊΠ°Π·Π°Π½Π½ΡΠ΅ Π²ΡΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ.
ΠΡΠ΅ ΡΠ°Π· ΡΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° Π²Π°ΡΠ΅ Π²ΡΠ΅ΠΌΡ.
ΠΠΎΡΠΎΡΠΊΠΈΠ΅ Π²ΠΎΠΏΡΠΎΡΡ.
ΠΠ°Π΄ ΠΊΠ°ΠΊΠΈΠΌ Π½Π°Π±ΠΎΡΠΎΠΌ Π΄Π°Π½Π½ΡΡ Π²Ρ ΡΠ°Π±ΠΎΡΠ°Π΅ΡΠ΅? Π ΠΊΠ°ΠΊ ΡΠ°ΡΡΠΎ ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ?
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π»ΡΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ ΡΠ³Π»Π°ΠΆΠΈΠ²Π°Π½ΠΈΠ΅.
ΠΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΡ ΠΊ ΡΠΎΠΌΡ, ΠΏΠΎΡΠ΅ΠΌΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ sys.float_info.min
Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ Π² Π½Π΅ΡΠ³Π»Π°ΠΆΠΈΠ²Π°ΡΡΠ΅ΠΉ Π²Π΅ΡΡΠΈΠΈ BLEU.
ΠΠΎΠ³Π΄Π° ΠΌΡ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ sys.float_info.min
ΠΊ ΡΠΎΡΠ½ΠΎΡΡΠΈ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ° n-Π³ΡΠ°ΠΌΠΌΠΎΠ² ΠΊ Π½Π΅ΡΠ³Π»Π°ΠΆΠ΅Π½Π½ΠΎΠΌΡ BLEU , ΠΌΡ ΡΠ΅Ρ
Π½ΠΈΡΠ΅ΡΠΊΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅ΠΌ ΡΠ³Π»Π°ΠΆΠ΅Π½Π½ΡΠΉ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΡΠΎΡΠ½ΠΎΡΡΠΈ, ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΉ Π»Π°ΠΏΠ»Π°ΡΡ. ΠΡΠΎ ΠΏΠΎΡ
ΠΎΠΆΠ΅ Π½Π° ΠΌΠ΅ΡΠΎΠ΄ 1 Π² https://github.com/nltk/nltk/blob/develop/nltk/translate/bleu_score.py#L496
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ, Π΅ΡΠ»ΠΈ Ρ ΠΎΡΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ ΡΠ³Π»Π°ΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ BLEU:
>>> from nltk.translate.bleu_score import sentence_bleu
>>> from nltk.translate.bleu_score import SmoothingFunction
>>> import sys
>>> smoother = SmoothingFunction()
# Laplacian smoothing.
>>> sentence_bleu([[1,2,3,4]],[5,6,8,1], smoothing_function=smoother.method1)
0.08034284189446518
# Laplacian smoothing, with altered weights.
>>> sentence_bleu([[1,2,3,4]],[5,6,8,1], weights=(0.5, 0.5), smoothing_function=smoother.method1)
0.09128709291752769
# Canonical multi-bleu smoothing, aka method4().
>>> sentence_bleu([[1,2,3,4]],[5,6,8,1], smoothing_function=smoother.method4)
0.19564209772076444
ΠΠΎ ΠΌΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΡΠΎ Π² SmoothingFunction.method0
ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ method0()
ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π½Π΅ ΡΠ³Π»Π°ΠΆΠΈΠ²Π°ΡΡ BLEU.
ΠΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ sys.float_info.min
Π²ΠΌΠ΅ΡΡΠΎ ΠΎΡΡΡΠΎΡΠΊΠΈ ΡΠΎΠΆΠ΅ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ.
Π€ΠΎΡΠΌΡΠ»Π° BLEU:
ΠΠ΄Π½Π° ΠΈΠ· ΠΏΡΠΈΡΠΈΠ½, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ Π²Π·Π»ΠΎΠΌ Π²Π΅ΡΠΎΠ² Π±Π΅Π· ΡΠΌΠΏΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΈΡΡΠΈΠ½Ρ - ΠΏΠ»ΠΎΡ
Π°Ρ ΠΈΠ΄Π΅Ρ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π²Π΅ΡΠ° Π² BLEU ΠΏΠΎΠ΄ΡΠΈΠ½ΡΡΡΡΡ exp()
.
ΠΡΠ°ΠΊ, Π΅ΡΠ»ΠΈ ΠΌΡ ΠΏΠ΅ΡΠ΅ΠΉΠ΄Π΅ΠΌ ΠΊ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡΠΌ BLEU Ρ ΠΎΠ±ΡΡΠ½ΡΠΌΠΈ ΠΎΠ΄Π½ΠΎΡΠΎΠ΄Π½ΡΠΌΠΈ Π²Π΅ΡΠ°ΠΌΠΈ 0,25, ΠΎΡΠ΅Π½ΠΊΠ° BLEU Π±ΡΠ΄Π΅Ρ ΡΡΠ΅Π·Π²ΡΡΠ°ΠΉΠ½ΠΎ Π½ΠΈΠ·ΠΊΠΎΠΉ - 0.
>>> p_n = [0.25, sys.float_info.min, sys.float_info.min, sys.float_info.min]
>>> weights = (0.25, 0.25, 0.25, 0.25)
>>> math.exp(sum(w*math.log(p_i) for w, p_i in zip(weights, p_n)))
1.288229753919562e-231
ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ weights=(0.5, 0.5)
, ΡΠΎΠΆΠ΅ ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄ΠΈΡ Π² 0.
>>> p_n = [0.25, sys.float_info.min]
>>> weights = (0.5, 0.5)
>>> math.exp(sum(w*math.log(p_i) for w, p_i in zip(weights, p_n)))
7.458340731200295e-155
ΠΠΎΠΆΠ΅Ρ Π±ΡΡΡ, ΡΡΠΎ Π½Π΅ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, Π½ΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΎΡΡΡΠΎΡΠΊΠΈ sys.float_info.min
ΠΠ‘ΠΠΠΠ ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ ΡΠ²Π΅ΡΡ
Π½ΠΈΠ·ΠΊΠΎΠΌΡ Π±Π°Π»Π»Ρ BLEU.
ΠΡΠ»ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ ΡΠ΅Π±Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Ρ ΠΎΡΠΎΡΠ΅Π³ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΡΡΠΈ ΠΈΠ΄Π΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π°, ΠΌΡ ΡΠ²ΠΈΠ΄ΠΈΠΌ Π²ΡΡΡΠ΅ΡΠ½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ:
>>> m1 = modified_precision([[1,2,3,4]], [2,3,4,5], 1)
>>> m2 = modified_precision([[1,2,3,4]], [2,3,4,5], 2)
>>> m3 = modified_precision([[1,2,3,4]], [2,3,4,5], 3)
>>> m4 = modified_precision([[1,2,3,4]], [2,3,4,5], 4)
>>> [m1, m2, m3, m4]
[Fraction(3, 4), Fraction(2, 3), Fraction(1, 2), Fraction(0, 1)]
>>> [m1, m2, m3, sys.float_info.min]
[Fraction(3, 4), Fraction(2, 3), Fraction(1, 2), 2.2250738585072014e-308]
>>> p_n = [m1, m2, m3, sys.float_info.min]
>>> weights = (0.25, 0.25, 0.25, 0.25)
>>> math.exp(sum(w*math.log(p_i) for w, p_i in zip(weights, p_n)))
8.636168555094496e-78
ΠΡΠ½ΠΎΠ²Π½Π°Ρ ΠΏΡΠΈΡΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ Ρ ΡΠΏΡΠΎΡΠΈΠ» ΠΎ Π½Π°Π±ΠΎΡΠ΅ Π΄Π°Π½Π½ΡΡ ΠΈ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΡΠ°ΡΡΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π²Ρ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π΅ ΠΎΠΆΠΈΠ΄Π°Π΅ΡΠ΅ Π²ΠΎΠ»Π½Ρ Π΄ΡΡΠ³ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Π²ΡΡΠ΅.
ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΠΌΡ ΠΏΠΎΠΏΡΡΠ°Π΅ΠΌΡΡ Π²Π΅ΡΠ½ΡΡΡ sys.float_info.min
, ΡΡΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ΅Π»ΡΡ Π²ΠΎΠ»Π½Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ Π½Π΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π»ΠΈ Π²Π½Π΅ ΡΠ²ΠΎΠ΅Π³ΠΎ Π½Π°Π±ΠΎΡΠ° Π΄Π°Π½Π½ΡΡ
.
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ, Π΅ΡΠ»ΠΈ ΠΌΡ Π²Π΅ΡΠ½Π΅ΠΌ n-Π³ΡΠ°ΠΌΠΌ ΠΎΡΡΡΠΎΡΠΊΠΈ:
>>> p_n = [m1, m2, m3]
>>> weights = (0.25, 0.25, 0.25)
>>> math.exp(sum(w*math.log(p_i) for w, p_i in zip(weights, p_n)))
0.7071067811865475
Π Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ BLEU Π½Π° Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π²ΠΎΠ»ΡΠ½ΠΎΠΌ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π΅ ΠΈΠ»ΠΈ ΠΊΠΎΡΠΎΡΠΊΠΈΡ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡΡ Π²ΡΠ΅Π³Π΄Π° Π³Π»Π°Π΄ΠΊΠΎ:
# Laplacian smoothing, with altered weights.
>>> sentence_bleu([[1,2,3,4]],[5,6,8,1], weights=(0.5, 0.5), smoothing_function=smoother.method1)
0.09128709291752769
# Canonical multi-bleu smoothing, aka method4().
>>> sentence_bleu([[1,2,3,4]],[5,6,8,1], smoothing_function=smoother.method4)
0.19564209772076444
@alvations Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° ΠΎΡΠ»ΠΈΡΠ½ΡΠΉ ΠΊΠΎΠ΄ Π² NLTK. ΠΡ Π² ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΡΡΠ΅ΠΏΠ΅Π½ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ Π΅Π³ΠΎ, ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈΡΡΡ Ρ ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΡΡ ΠΎΡΠ²Π΅ΡΠΎΠ² (ΠΈΠ»ΠΈ ΡΠ°Ρ-Π±ΠΎΡΠ°ΠΌΠΈ) Π² True AI .
Π― ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎ Π²ΠΈΠΆΡ ΡΠΌΡΡΠ» ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΎ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ³Π»Π°ΠΆΠΈΠ²Π°Π½ΠΈΡ, ΠΊΠΎΠ³Π΄Π° Π»ΡΠ±Π°Ρ ΠΈΠ· n-Π³ΡΠ°ΠΌΠΌΠΎΠ² ΠΎΡΠ΅Π½ΠΈΠ²Π°Π΅ΡΡΡ ΠΊΠ°ΠΊ 0. ΠΡΠΎΡΠΈΡΠ°Π² ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ³Π»Π°ΠΆΠΈΠ²Π°Π½ΠΈΡ, ΠΌΡ ΡΠ΅ΠΏΠ΅ΡΡ Π½Π°ΡΠ°Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΡΠ³Π»Π°ΠΆΠΈΠ²Π°Π½ΠΈΡ 1 ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ.
ΠΠ΄Π½Π°ΠΊΠΎ Ρ Π²ΡΠ΅ ΠΆΠ΅ Π±ΡΠ» ΠΎΡΠ΅Π½Ρ ΡΠ΄ΠΈΠ²Π»Π΅Π½, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΠ» ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Ρ ΠΎΡΠΊΠ»ΡΡΠ΅Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ ΡΠ³Π»Π°ΠΆΠΈΠ²Π°Π½ΠΈΡ Π² ΡΠ΅Ρ ΡΠ»ΡΡΠ°ΡΡ , ΠΊΠΎΠ³Π΄Π° ΠΎΠ½Π° Π½Π΅ Π½Π°Ρ ΠΎΠ΄ΠΈΠ»Π° Π½ΠΈΠΊΠ°ΠΊΠΈΡ n-Π³ΡΠ°ΠΌΠΌΠΎΠ² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ°. Π― ΠΏΠΎΠ»ΡΡΠΈΠ» ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ, ΠΊΠΎΡΠΎΡΡΡ Π½Π΅ ΠΎΠΆΠΈΠ΄Π°Π», Π³Π»ΡΠ΄Ρ Π½Π° ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Π² Chen et.
ΠΡΠ½ΠΎΠ²Π½ΠΎΠ΅ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ΅ Π΄Π»Ρ ΡΠ°ΡΡΠ΅ΡΠ° ΠΎΡΠ΅Π½ΠΊΠΈ BLEU (Π±Π΅Π· ΡΠ³Π»Π°ΠΆΠΈΠ²Π°Π½ΠΈΡ), ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²Ρ ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΠ»ΠΈ Π²ΡΡΠ΅ (ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ 2 Π² Chen et al. ), Π ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ Π² ΠΊΠΎΠ΄Π΅:
Π³Π΄Π΅ p_m ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ (ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ 3 Π² Chen et. al ):
ΠΠ΄Π½Π°ΠΊΠΎ Π²Ρ Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΠ΅ p_m ΠΊΠ°ΠΊ:
Π Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ Π΄ΡΡΠ³ΠΎΠ΅ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅, ΡΠ΅ΠΌ ΡΠΎ, ΡΡΠΎ Π²Ρ ΡΠ΅ΠΊΠ»Π°ΠΌΠΈΡΡΠ΅ΡΠ΅. ΠΡ ΡΠΏΠΎΠΌΠΈΠ½Π°Π΅ΡΠ΅ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ ΡΠ³Π»Π°ΠΆΠΈΠ²Π°Π½ΠΈΡ 0 ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΡΠ³Π»Π°ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ, ΠΈ ΡΡΠΎ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ Π±Π°Π·ΠΎΠ²ΡΠ΅ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Π΄Π»Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ BLEU. ΠΡΠΎ ΠΏΡΠΎΡΡΠΎ Π½Π΅ΠΏΡΠ°Π²Π΄Π°. ΠΡ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ Π±Π°Π·ΠΎΠ²ΠΎΠ΅ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅, Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π²Π΅ΡΡΠΈΡ Π΄Π»Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ p_m ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ ΡΠΏΠΎΠΌΠΈΠ½Π°Π΅ΡΡΡ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ΅.
ΠΠ³Π°, Π²ΠΎΡ ΠΈ ΠΎΡΠΈΠ±ΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΡΠΌ BLEU ΠΈ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ΠΌ (2) ΠΈΠ· ββChen and Cherry (2014).
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌ BLEU (1992) p_n Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΡΡ ΠΈΠ· Π΄Π΅ΡΡΡΠΈΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° Π² Π»ΠΎΠ³Π°ΡΠΈΡΠΌΠΈΡΠ΅ΡΠΊΠΎΠ΅, ΡΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΎΡΠΈΠ±ΠΊΠ΅ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ, ΠΊΠΎΠ³Π΄Π° p_n = 0:
Π’Π°ΠΊ ΡΡΠΎ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Β«Ρ
ΠΈΡΡΠΎΡΡΠΈΒ», ΡΡΠΎΠ±Ρ ΠΏΡΠ΅ΠΎΠ΄ΠΎΠ»Π΅ΡΡ Π²ΡΠ΅ ΠΊΡΠ°ΠΉΠ½ΠΈΠ΅ ΡΠ»ΡΡΠ°ΠΈ. Π£ multi-bleu.perl
Π±ΡΠ»Π° Π΄ΡΡΠ³Π°Ρ ΡΡΡΠ°ΡΠ΅Π³ΠΈΡ, ΡΡΠΎΠ±Ρ ΠΏΡΠ΅ΠΎΠ΄ΠΎΠ»Π΅ΡΡ ΡΡΠΎ .
ΠΠΎ Π² ΡΠΎΡΠΌΡΠ»ΠΈΡΠΎΠ²ΠΊΠ΅ Π§Π΅Π½Π° ΠΈ Π§Π΅ΡΡΠΈ ΡΡΠΎ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π΄Π΅ΡΡΡΠΈΡΠ½ΡΡ Π·Π½Π°ΠΊΠΎΠ² Ρ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΉ ΡΡΠ΅ΠΏΠ΅Π½ΡΡ N, Ρ. Π.
ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ Π΄ΠΎΠΌΠ΅Π½ΠΎΠ² Π±Π΅Π· ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΆΡΡΠ½Π°Π»Π° ΠΈ exp. ΠΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΡΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ Π½ΠΎΠ²ΠΎΠΉ Π²ΠΎΠ»Π½Π΅ ΠΎΡΠΈΠ±ΠΎΠΊ, ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, ΠΈΠ·-Π·Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ, Π° ΠΌΠΎΠΆΠ΅Ρ ΠΈ Π½Π΅Ρ. ΠΠΎΠΊΠ° unittest Π΄Π»Ρ BLEU ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΡΡΡ, Ρ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΠΎΠ³ΠΎ ΡΠΎΠΆΠ΅ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠΎΡΡΠ΅Π½ΠΈΠ΅ΠΌ; P
Π― ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Ρ, ΡΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠΉΡΠΈ Ρ ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠΉ ΡΠΎΡΠΌΡΠ»ΠΈΡΠΎΠ²ΠΊΠΎΠΉ log + exp, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΌΡ ΡΠ΅ΡΠΈΠ»ΠΈ ΠΏΠΎΠΉΡΠΈ Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π±Π»ΠΈΠΆΠ΅ ΠΊ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ multi-bleu.perl
ΠΈ mteval-v13a.pl
ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΠΎΠ»ΡΡΠ΅ ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π° Π½Π° ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΡΠ³Π»Π°ΠΆΠΈΠ²Π°Π½ΠΈΡ, ΠΊΠΎΠ³Π΄Π° ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡΠΈΠ΅ ΡΠΈΡΠ»Π° ΠΌΠ΅Π½ΡΡΠ΅ 4, ΡΠ΅Π³ΠΎ ΠΎΠ±ΡΡΠ½ΠΎ Π½Π΅ Π±ΡΠ²Π°Π΅Ρ ΠΏΡΠΈ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠΌ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π΅.
Π Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΎΡΠΊΠ°Π·Π°ΡΡΡΡ ΠΎΡ p_n
Π±ΡΠ»ΠΎ ΡΠΈΡΡΠΎ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ, ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ. ΠΠΎ Π΅ΡΠ»ΠΈ Π΅ΡΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΠΏΡΠ΅ΠΎΠ΄ΠΎΠ»Π΅ΡΡ ΠΎΡΠΈΠ±ΠΊΡ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΈΠ· math.log(0)
ΠΈ ΠΏΡΠΈΠ΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΠΎΡΠΌΡΠ»ΠΈΡΠΎΠ²ΠΊΠΈ Ρ log + exp, ΠΌΡ ΠΎΡΠΊΡΡΡΡ Π΄Π»Ρ Π·Π°ΠΏΡΠΎΡΠΎΠ² Π½Π° Π²ΡΡΡΠ³ΠΈΠ²Π°Π½ΠΈΠ΅ / ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ =)
ΠΠ»ΠΈ ΠΊΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ ΠΏΡΠΎΠ³ΠΎΠ»ΠΎΡΡΠ΅Ρ Π·Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ NLTK, ΡΡΠΎΠ±Ρ Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΡΠΌΡΠ»ΠΈΡΠΎΠ²ΠΊΡ Chen and Cherry (2014)?
ΠΠΎ ΡΠ΅ΠΏΠ΅ΡΡ Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ, ΠΏΠΎΡΠ΅ΠΌΡ Ρ Π²Π°Ρ ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ BLEU Π² Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ , Π³Π΄Π΅ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ / ΡΠ΅Π³ΠΌΠ΅Π½ΡΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΎΡΠ΅Π½Ρ ΠΊΠΎΡΠΎΡΠΊΠΈΠΌΠΈ.
Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ SmoothingFunction
Ρ Π²ΡΠ΅Π³Π΄Π° Ρ
ΠΎΡΠ΅Π», ΡΡΠΎΠ±Ρ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π±ΡΠ» ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ ΡΠ³Π»Π°ΠΆΠ΅Π½Π½ΡΠΉ BLEU. ΠΠΎ ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ΅ΡΠΈΡΡ, ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΡΠ³Π»Π°ΠΆΠΈΠ²Π°Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π½Π΅Π³Π»Π°Π΄ΠΊΠΈΠΉ BLEU ΡΠΎ ΡΡΡΠ°Π½Π½ΡΠΌΠΈ ΠΎΡΠΊΠ°ΡΠ°ΠΌΠΈ ΠΈ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡΠΌΠΈ.
ΠΡΡΠ°ΡΠΈ, Π΄Π»Ρ Π»ΠΈΡΠ½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Ρ Π±Ρ Π²ΡΠ΅Π³Π΄Π° ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π» ΡΠ³Π»Π°ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π½Π° SmoothingFunction().method4
.
ΠΠ²Π° ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½Ρ Ρ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ (ΠΊΡΠΎΠΌΠ΅ w_n). Π Π°Π·Π½ΠΈΡΠ° Π² ΡΠΎΠΌ, ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ Π±ΡΡΡ ΠΎΡΡΠΎΡΠΎΠΆΠ½ΡΠΌ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ ΠΏΡΠΈ ΠΎΡΠ΅Π½ΠΊΠ΅ log (0). ΠΠ΄Π΅ΡΡ log (0) Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΎΡΠ΅Π½Π΅Π½ ΠΊΠ°ΠΊ -inf (ΠΈΠ»ΠΈ ΡΡΠΎ-ΡΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅, Π΅ΡΠ»ΠΈ -inf Π½Π΅Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠΉ Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠΈ). ΠΡΠ΅Π½ΠΊΠ° Π΅Π³ΠΎ Π΄ΠΎ 0 Π½Π°ΡΡΡΠ°Π΅Ρ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΡ, ΠΊΠ°ΠΊ ΡΠΊΠ°Π·Π°Π½ΠΎ Π²ΡΡΠ΅. ΠΡΠ΅Π½ΠΊΠ° Π΅Π³ΠΎ Π΄ΠΎ 0 ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ΅ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡ Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΠΎΠΊΠΈΠΉ Π±Π°Π»Π» BLEU, Π΅ΡΠ»ΠΈ Π½Π΅ Π±ΡΠ»ΠΎ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ n-Π³ΡΠ°ΠΌΠΌΠΎΠ² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ°, ΡΠ΅ΠΌ Π΅ΡΠ»ΠΈ Π±Ρ Π±ΡΠ» Π½Π°ΠΉΠ΄Π΅Π½ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ n-Π³ΡΠ°ΠΌΠΌ, ΡΡΠΎ ΠΏΡΠΎΡΠΈΠ²ΠΎΡΠ΅ΡΠΈΡ ΠΈΠ½ΡΡΠΈΡΠΈΠΈ.
ΠΡΠ΅Π½ΠΊΠ° log (0) Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡΠ²Π°Π΅Ρ ΠΏΡΠΎΡΡΠΎΠΉ. Π Ρ ΡΡΠΈΠΌ Π½ΡΠΆΠ½ΠΎ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ Π² ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡΠ°Π»ΡΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅. math
ΡΠ΅ΡΠ°Π΅Ρ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Π±ΡΠΎΡΠ°Ρ ValueError
ΠΈ Π΄ΠΎΠ²Π΅ΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Π΅Π³ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ. numpy
Ρ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ -inf
Π²ΠΌΠ΅ΡΡΠ΅ Ρ RuntimeWarning
. ΠΡΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΊΠ°ΠΊ Π·Π°, ΡΠ°ΠΊ ΠΈ ΠΏΡΠΎΡΠΈΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ -inf Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°.
ΠΠ΄Π½Π°ΠΊΠΎ Π² ΡΡΠΎΠΌ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΌ Π±ΡΠ»ΠΎ Π±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ -inf.
ΠΡΠ»ΠΈ ΠΊΠΎΡΠΎΡΠΊΠΎ Π²Π·Π³Π»ΡΠ½ΡΡΡ Π½Π° ΠΊΠΎΠ΄, ΡΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ ΡΡΠΎ - ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠΎ, ΡΡΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π·Π° ΡΡΠΈΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ else, Π½Π°:
p_n_new.append(sys.float_info.min)
ΠΈΠ»ΠΈ
return [sys.float_info.min]
ΠΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ, Π΅ΡΠ»ΠΈ Ρ ΠΎΡΠΈΡΠ΅.
ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΠΎ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΎ Ρ elif _emulate_multibleu and i < 5:
Π·Π°ΡΠ²Π»Π΅Π½ΠΈΡ ΠΈ Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ else
Π½Π° Π΄Π°Π½Π½ΠΎΠΌ ΡΡΠ°ΠΏΠ΅.
@bamattsson Π’ΠΎΡΠ½ΠΎ, ΡΡΠΎ sys.float_info.min
, Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΡΡΠ΅Π΄Π½Π΅Π³ΠΎ Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡΡ.
ΠΠ· ΠΏΡΠΈΠΌΠ΅ΡΠ° Π² ΠΌΠΎΠ΅ΠΌ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ , Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ sys.float_info.min
ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠ»ΠΎΡ
ΠΎΠΉ ΠΈΠ΄Π΅Π΅ΠΉ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΊΠΎΡΠΏΡΡΠ°.
>>> m1 = modified_precision([[1,2,3,4]], [2,3,4,5], 1)
>>> m2 = modified_precision([[1,2,3,4]], [2,3,4,5], 2)
>>> m3 = modified_precision([[1,2,3,4]], [2,3,4,5], 3)
>>> m4 = modified_precision([[1,2,3,4]], [2,3,4,5], 4)
>>> [m1, m2, m3, m4]
[Fraction(3, 4), Fraction(2, 3), Fraction(1, 2), Fraction(0, 1)]
>>> [m1, m2, m3, sys.float_info.min]
[Fraction(3, 4), Fraction(2, 3), Fraction(1, 2), 2.2250738585072014e-308]
>>> p_n = [m1, m2, m3, sys.float_info.min]
>>> weights = (0.25, 0.25, 0.25, 0.25)
>>> math.exp(sum(w*math.log(p_i) for w, p_i in zip(weights, p_n)))
8.636168555094496e-78
ΠΡΠΎ ΠΏΡΠΈΠ²Π΅Π»ΠΎ ΠΊ ΡΠ±ΠΎΡ unittest Π½Π° https://nltk.ci.cloudbees.com/job/pull_request_tests/430/TOXENV=py35-jenkins , jdk = jdk8latestOnlineInstall / testReport / junit / nltk.translate / bleu_score / offer_bleu / ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, Π½Π΅Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ Π½Π° β 1844.
ΠΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΠ§ΠΠΠ¬ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠΎΠ³ΠΎ, Π½Π°Π΄ ΠΊΠ°ΠΊΠΈΠΌ Π½Π°Π±ΠΎΡΠΎΠΌ Π΄Π°Π½Π½ΡΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. ΠΡΠΎ ΠΠΠΠΠΠΠ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ Π² ΠΊΠΎΡΠΏΡΡΠ΅ BLEU, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΠΊΠΎΡΠΏΡΡΠ° Π²ΡΠ΅Π³Π΄Π° Π±ΡΠ»ΠΎ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΡΡΠΎ ΠΌΠ΅ΠΆΠ΄Ρ Π³ΠΈΠΏΠΎΡΠ΅Π·Π°ΠΌΠΈ ΠΈ ΠΈΡ ΡΡΡΠ»ΠΊΠ°ΠΌΠΈ Π΅ΡΡΡ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ 1 4-Π³ΡΠ°ΠΌΠΌΠΎΠ²ΡΡ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠΉ.
ΠΠΎΡΡΠΎΠΌΡ Ρ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Ρ ΠΏΠ΅ΡΠ΅Π΄Π΅Π»Π°ΡΡ Π²Π°ΡΠ΅ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊ ΡΠ»Π°Π³ / Π°ΡΠ³ΡΠΌΠ΅Π½Ρ / ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ bleu. Π Π΅ΡΠ»ΠΈ Ρ ΠΎΡΠΈΡΠ΅, ΡΠ΄Π΅Π»Π°ΠΉΡΠ΅ ΡΠ»Π°Π³ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΈ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ Π²Π΅ΡΠ½ΠΈΡΠ΅ΡΡ ΠΊ ΡΠ΅Ρ Π½ΠΈΠΊΠ΅ ΠΎΡΡΡΠΎΡΠΊΠΈ ngram, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½Π° Π²ΡΠΊΠ»ΡΡΠ΅Π½Π°. ΠΡΠ»ΠΎ ΠΏΡΠΈΠ½ΡΡΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΎΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ, ΡΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ Π²ΡΠ±ΠΎΡ Π² ΠΏΠΎΠ»ΡΠ·Ρ ΠΎΡΡΡΠΎΡΠΊΠΈ ngram. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΡΠ΅Π½ΠΈΠ΅ β1330 ΡΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΌΠΎΡΡ.
Π‘ΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ, Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠΌΠΎΡΡΠΈΠΌ Π½Π° PR. ΠΠ΅ΡΠ½ΠΎ Π»ΠΈ, ΡΡΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΡΠ΅ΡΡΠΎΠ² Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΠΌΠΎΠ³ΠΎ Π²Π°ΠΌΠΈ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π΄Π°ΡΡ ΡΠΎΡ ΠΆΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ, ΡΡΠΎ ΠΈ emulate_multibleu=True
?
Π Π΅ΡΠ΅Π½ΠΎ Π² β 1844
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ @alvations , @bamattsson , @benleetownsend
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
Π₯ΠΎΡΠΎΡΠΈΠΉ. ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ, ΠΏΠΎΡΠ΅ΠΌΡ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠ°ΠΊΠΎΠ²Ρ Π²ΡΡ ΠΎΠ΄Ρ:
ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π½Π΅ΡΠ³Π»Π°ΠΆΠ΅Π½Π½ΡΠΉ BLEU Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ°Π»ΡΡ Π΄Π»Ρ ΠΎΡΠ΅Π½ΠΊΠΈ ΡΡΠΎΠ²Π½Ρ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ Π½Π°ΠΉΡΠΈ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΡΠ³Π»Π°ΠΆΠΈΠ²Π°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π²Π°ΡΠΈΠΌ Π΄Π°Π½Π½ΡΠΌ, ΠΏΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΠΏΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ https://github.com/alvations/nltk/blob/develop/ nltk / translate / bleu_score.py # L425
ΠΡΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Ρ ΠΎΡΠ΅Ρ ΠΏΡΠΎΠΏΡΡΡΠΈΡΡ ΡΠ°Π³, ΡΡΠΎΠ±Ρ Π½Π°ΠΉΡΠΈ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠ³Π»Π°ΠΆΠΈΠ²Π°Π½ΠΈΠ΅, Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ Π½Π° ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠ΅ Π²Π°ΠΌΠΈ ΠΏΡΠΈΠΌΠ΅ΡΡ.
ΠΠ΅ΡΠ²ΡΠΉ ΡΡΠ΅Π½Π°ΡΠΈΠΉ, ΠΊΠΎΠ³Π΄Π° Π²Π°Ρ ΠΏΠΎΡΡΠ΄ΠΎΠΊ n-Π³ΡΠ°ΠΌΠΌΠΎΠ² Π±ΠΎΠ»ΡΡΠ΅, ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΊΡΡΡΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΡΠ»ΠΊΠΎΠΉ ΠΈ Π³ΠΈΠΏΠΎΡΠ΅Π·ΠΎΠΉ, BLEU ΠΊΠΎΡΠΏΡΡΠ° / ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅. Π’Π°ΠΊ ΡΡΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΡΡΠΎΠ³ΠΎ Π½Π΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΡΠΈΠ½ΡΡΡ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅:
ΠΠ°Π»Π΅Π΅ Ρ Π½Π°Ρ Π΅ΡΡΡ ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ 1 Π±ΠΈΠ³ΡΠ°ΠΌΠΌΠ°, Π° 2 ΡΠ½ΠΈΠ³ΡΠ°ΠΌΠΌΡ ΠΏΠ΅ΡΠ΅ΠΊΡΡΠ²Π°ΡΡ ΡΡΡΠ»ΠΊΡ ΠΈ Π³ΠΈΠΏΠΎΡΠ΅Π·Ρ. ΠΠΎΡ ΠΎΠΆΠ΅, ΠΎΠ½ Π΄Π°Π΅Ρ ΡΠ°Π·ΡΠΌΠ½ΡΡ ΠΎΡΠ΅Π½ΠΊΡ.
ΠΠ΅ΡΠ΅Ρ ΠΎΠ΄Ρ ΠΊ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌΡ ΠΏΡΠΈΠΌΠ΅ΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ
weights=(0, 0.5)
, ΡΡΠΎ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π½Π΅ΠΈΠ½ΡΡΠΈΡΠΈΠ²Π½ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π½Π΅ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΠ΅ ΠΎΡΠ΅Π½ΠΎΠΊ Π΄Π»Ρ Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΈΡ n-Π³ΡΠ°ΠΌΠΌΠΎΠ² ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠ΅Π»ΠΈ BLEU, Π³Π΄Π΅ ΠΌΡ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌ Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠΎ ΠΏΠΎΡΡΠ΄ΠΊΡ n-Π³ΡΠ°ΠΌΠΌΠΎΠ². ΠΠΎ Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ:ΠΡ Π²ΠΈΠ΄ΠΈΠΌ, ΡΡΠΎ Ρ Π½Π΅Π³ΠΎ ΡΠ°ΠΊΠΈΠ΅ ΠΆΠ΅ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΡ 1 Π±ΠΈΠ³ΡΠ°ΠΌΠΌ ΠΈ 2 ΡΠ½ΠΈΠ³ΡΠ°ΠΌΠΌ, Π½ΠΎ Ρ Π½Π΅Π³ΠΎ Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΠΎΠΊΠΈΠΉ Π±Π°Π»Π». Π ΡΡΠΎ ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ ΠΌΡ Π²Π·Π²Π΅ΡΠΈΠ²Π°Π΅ΠΌ Π±ΠΈΠ³ΡΠ°ΠΌΠΌΡ ΡΡΠΆΠ΅Π»Π΅Π΅, ΡΠ΅ΠΌ ΡΠ½ΠΈΠ³ΡΠ°ΠΌΠΌΡ, ΠΈ Ρ ΡΠ½ΠΈΠ³ΡΠ°ΠΌΠΌΠΎΠ² ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ Π²Π»ΠΈΡΠ½ΠΈΠ΅. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π±ΠΈΠ³ΡΠ°ΠΌΠΌ ΠΌΠ΅Π½ΡΡΠ΅, ΡΠ΅ΠΌ ΡΠ½ΠΈΠ³ΡΠ°ΠΌΠΌ, Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ, ΡΡΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠΈΠΉ BLEU Π²ΡΡΠ΅.
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π±ΠΎΠ»ΡΡΠ΅Π³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠΉ = Π»ΡΡΡΠ΅Π³ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° BLEU ΠΈΠ½ΡΡΠΈΡΠΈΠ²Π½ΠΎ ΠΏΠΎΠ½ΡΡΠ½ΠΎ, Π½ΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΡΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°ΡΡΡ ΡΠΎΡΠΌΡΠ»ΠΈΡΠΎΠ²ΠΊΠΈ BLEU, ΠΎΡΡΠ°ΠΆΠ΅Π½Π½ΠΎΠΉ Π² ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½ΠΎΠΉ ΡΠΎΡΠ½ΠΎΡΡΠΈ:
ΠΡΠ»ΠΈ ΠΌΡ ΠΏΠ΅ΡΠ΅ΠΉΠ΄Π΅ΠΌ ΠΊ ΡΡΠ΅Π΄Π½Π΅ΠΌΡ Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ΡΠΊΠΎΠΌΡ Π»ΠΎΠ³Π°ΡΠΈΡΠΌΠΈΡΠ΅ΡΠΊΠΎΠΌΡ, ΠΌΡ ΡΠ²ΠΈΠ΄ΠΈΠΌ, ΡΡΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Π°Ρ ΡΠΎΡΠ½ΠΎΡΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΡΠΊΠ°ΠΆΠ°Π΅ΡΡΡ:
ΠΡΠ°ΠΊ, ΠΈΠ· ΠΏΠ΅ΡΠ²ΡΡ ΡΡΠ΅Ρ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΡ Π²Π°ΠΌΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² ΠΏΠ΅ΡΠ²ΡΠΉ Π½Π΅Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»Π΅Π½ (ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅), Π²ΡΠΎΡΠΎΠΉ ΠΈ ΡΡΠ΅ΡΠΈΠΉ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π½Π΅ΠΏΡΠΎΡΡΡΠΌΠΈ Π΄Π»Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ, Π½ΠΎ ΠΎΠ½ΠΈ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π²Π΅ΡΠ½Ρ:
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Ρ ΠΏΡΠΎΠΏΡΡΡΠΈΠ» ΡΠ°Π³ ΡΡΡΠ°ΡΠ° Π·Π° ΠΊΡΠ°ΡΠΊΠΎΡΡΡ, Π½ΠΎ ΠΏΠΎΠ²Π΅ΡΡΡΠ΅ ΠΌΠ½Π΅, ΡΡΠΎ 1.0, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π΄Π»ΠΈΠ½Π° Π³ΠΈΠΏΠΎΡΠ΅Π·Ρ ΡΠ°ΠΊΠ°Ρ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Ρ ΡΡΡΠ»ΠΊΠΈ. ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅ ΡΠ΅Π±Ρ ΡΠΎΠΆΠ΅ =)
ΠΠ΅ΡΠ΅Ρ ΠΎΠ΄Ρ ΠΊ 4-ΠΌΡ ΠΏΡΠΈΠΌΠ΅ΡΡ, ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΡ ΠΆΠ΅ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΠΎΡΠ½ΠΎΡΡΡ, Π° Π·Π°ΡΠ΅ΠΌ Π²ΡΡΠΈΡΠ»ΡΠ΅ΠΌ ΡΡΠ΅Π΄Π½ΠΈΠΉ Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π»ΠΎΠ³Π°ΡΠΈΡΠΌΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ°Π³:
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ bigram BLEU ΡΠ°ΠΊΠΆΠ΅ Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎ Π±Π΅Π· Π½Π°Π΄Π»Π΅ΠΆΠ°ΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ³Π»Π°ΠΆΠΈΠ²Π°Π½ΠΈΡ.
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π»ΠΎΡΡ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ BLEU, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠΈΠ»ΡΡΡ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠΉ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ. Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΡΡΠΎ Ρ ΠΎΡΠΎΡΠ°Ρ ΠΈΠ΄Π΅Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎ, Π½ΠΎ ΠΎΠ½ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ°Π·Π΄ΡΠ°ΠΆΠ°Π΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΎ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΡΠ°ΡΡΠΎ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ Π² ΠΏΠ΅ΡΠΈΡΠ΅ΡΠΈΠΉΠ½ΠΎΠΌ Π½Π°Π±ΠΎΡΠ΅ Π΄Π°Π½Π½ΡΡ .
ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»Π΅Π½, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 0 Π΄Π»Ρ 0 ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡΠ΅ΠΉ ΡΠ½ΠΈΠ³ΡΠ°ΠΌΠΌΡ. Π ΠΈΡΠΎΠ³Π΅: