Почему цифра BLEU, как правило, завышена

При тренировке моделей есть общее правило: разбить датасет на 90% для обучения и 10% для проверки, натренировать модель на 90%, а проверять на 10%.
 
Если речь идет о картинках кошек/собак, то достаточно просто воспользоваться стандартной функцией библиотеки scikit-learn.
 
Однако с текстами все иначе. Если натренировать модель на памяти переводов (TM), а потом дать ей на вход предложение из этой TM, которое она уже видела, то модель сработает как память переводов — выдаст уже сделанный перевод. НО все еще хитрее: текст-то состоит из ПОХОЖИХ предложений. И если разбить датасет механически, то в тестовом корпусе будут предложения, которые очень близки к тем, что модель уже видела. И они будут очень хорошо переведены.
 
Но увы — такое тестирование не отражает качество модели и ее тренировки. Чтобы получить честный BLEU, нужно удалить из тестового корпуса не только те предложения, что есть в тренировочном корпусе, но и близкие к ним (аналогично метрике high fuzzy для ТМ). Потому что непохожие предложения будут переведены гораздо хуже, но именно они и являются показателем качества работы натренированной модели. Эта задача достаточно сложная, CAT-тулы тут бессильны, они не для этого написаны. И правильно удалить high fuzzy из тестового корпуса… «А зачем? Это сложно, долго, BLEU будет НИЖЕ…»
 
Так что не удивляйтесь тому, что кто-то отрапортует о подозрительно хороших результатах тренировки. Я бы задал в такой ситуации вопрос — а как вы готовили тестовый датасет? ?
 
Не видим ли мы очень крутую, построенную на нейросетях, память переводов просто, а не хорошо натренированную модель? ?
 
Немного нагляднее об этом — в этой презентации.
 
Обращайтесь за правильной подготовкой датасета — это нетривиальная задача ?. Честным быть не просто ?.