2015-09-04 3 views
6

Существует тестовое предложение и контрольное предложение. Как я могу написать скрипт Python, который измеряет сходство между этими двумя предложениями в виде метрики BLEU, используемой при оценке автоматического машинного перевода?Рассчитать баллы BLEU в Python

+1

Другое чем BLEU, если вы хотите использовать метрики MT подобия: http://alt.qcri.org/semeval2015/cdrom/pdf/SemEval015.pdf – alvas

ответ

9

Вы действительно просите две разные вещи. Я попытаюсь пролить свет на каждый из вопросов.

Часть I: Вычисление BLEU оценка

Вы можете рассчитать BLEU счет с помощью модуля BLEU под nltk. См. here.

Оттуда вы можете легко вычислить оценку выравнивания между кандидатом и ссылочными предложениями.

Часть II: Вычислительное сходство

Я бы не предположить, используя BLEU оценку как мера сходства между первым кандидатом и вторым кандидатом, если вы стремитесь, чтобы измерить сходство на основе эталонного предложения.

Теперь, позвольте мне подробно остановиться на этом. Если вы подсчитаете баллы BLEU для кандидата по ссылке, то эта оценка просто поможет вам понять сходство между оценкой BLEU другого кандидата в сравнении с эталонным предложением, хотя ссылочное предложение остается неизменным.

Если вы намерены измерить сходство между двумя предложениями, лучший способ - word2vec. Вы можете вычислить угловое косинусное расстояние между векторами предложения, чтобы понять их сходство.

Для полного понимания того, что BLEU метрика делает, я предлагаю читать this, а также this для word2vec сходства.

+0

вместо word2vec , более продвинутый doc2vec (или любое другое вложение предложений) был бы лучшим aproach, чтобы найти сходство в предложениях –

7

Оценка BLEU состоит из двух частей, измененной точности и краткости. Подробнее можно найти на странице paper. Вы можете использовать модуль nltk.align.bleu_score внутри NLTK. примера Один кода можно увидеть, как показано ниже:

import nltk 

hypothesis = ['It', 'is', 'a', 'cat', 'at', 'room'] 
reference = ['It', 'is', 'a', 'cat', 'inside', 'the', 'room'] 
#there may be several references 
BLEUscore = nltk.translate.bleu_score.sentence_bleu([reference], hypothesis) 
print BLEUscore 

Обратите внимание, что оценка BLEU по умолчанию использует п = 4, который включает в себя юниграммы до 4 грамм. Если ваше предложение меньше 4, вам необходимо сбросить значение N, в противном случае будет возвращена ошибка ZeroDivisionError: Fraction(0, 0). Таким образом, вы должны сбросить вес, как это:

import nltk 

hypothesis = ["open", "the", "file"] 
reference = ["open", "file"] 
#the maximum is bigram, so assign the weight into 2 half. 
BLEUscore = nltk.translate.bleu_score.sentence_bleu([reference], hypothesis, weights = (0.5, 0.5)) 
print BLEUscore 
+0

Выполняет ли это это, если я передаю числа (словарные индексы в словаре) вместо фактических слов в массивах? –

+0

@AshutoshBaheti Я думаю, что он должен быть таким же, как и число, столь же значимое, как и слово. Поэтому он должен работать хорошо. – ccy

0

Вы можете использовать пакет питона SacréBLEU (Python 3 только):

SacréBLEU обеспечивает беспроблемное вычисление разделяемых, сопоставимый, и воспроизводимые оценки BLEU. Вдохновленный Rico Sennrich's multi-bleu-detok.perl, он производит официальные оценки WMT, но работает с простым текстом. Он также знает все стандартные тестовые наборы и обрабатывает загрузку, обработку и токенизацию для вас.

Зачем использовать эту версию BLEU?

  • Он автоматически загружает общий WMT тестовых наборы и обрабатывает их в обычный текст
  • Он производит короткую строку версии, которая облегчает кросс-бумага сравнение
  • Он правильно вычисляет оценки на detokenized выходов, используя WMT (Conference on Machine Translation) стандарт лексического анализ
  • Он производит то же значение, как официальный сценарий (mteval-v13a.pl) используется WMT
  • Он выдает счет BLEU без запятой, так что вам не нужен, чтобы удалить его с sed (Глядя на вас, multi-bleu.perl)

Для установки: pip install sacrebleu

Смежные вопросы