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

Не видим ли мы очень крутую, построенную на нейросетях, память переводов просто, а не хорошо натренированную модель? 

Немного нагляднее об этом — в этой презентации.
Обращайтесь за правильной подготовкой датасета — это нетривиальная задача
. Честным быть не просто
.

