dimhold.by
← Статьи

Арендатор вернулся арендодателем после круга через русский

У машинного перевода есть старая проверка. Переводишь текст, потом переводишь результат обратно. Если вернулся исходник, середине можно верить. Я в эту проверку верил и ни разу не подсчитывал, что она пропускает. Чтобы это подсчитать, нужна пара, в которой я сам могу прочитать середину и сказать, верна ли она. Для меня это пара с английского на русский и обратно.

Сомнение не новое. Гарольд Сомерс ещё в 2005 году писал, что обратный перевод плохо годится для оценки системы перевода. Плохая середина может вернуться так, будто всё в порядке. Я хотел посмотреть на это на своих предложениях, сразу на нескольких видах смысла и с отдельной проверкой середины.

Стенд

Модели opus-mt-en-ru и opus-mt-ru-en от Helsinki-NLP, это MarianMT, ревизии сентября 2022 года со своим конфигом, то есть beam search на 4 луча. Python 3.9, torch 1.13, transformers 4.25.1, только CPU, 4 ядра виртуальной машины на AMD EPYC. Один круг из 600 предложений туда и 600 обратно занимает около 4 минут.

Скрипт с seed 2022 написал 600 коротких английских предложений, по 100 каждого из 6 видов. В каждом есть то, что регулярка может проверить после круга:

  • число с валютой или датой, например The invoice for 1,028,211 zlotys is due on 26 December.;
  • слово отрицания вроде not или never в 50 предложениях и те же 50 без него;
  • модальный глагол must, may или should;
  • граница at least, at most, more than или less than с числом;
  • роль и местоимение, The doctor called because she needs the invoice.;
  • имена людей и названия компаний, в основном польские и беларусские, часть с диакритикой.

Потом я прогнал 5 кругов. Каждый круг переводит английский, вернувшийся из предыдущего.

Первый круг

Числа вернулись 100 из 100. Слово отрицания вернулось 50 из 50. В 50 предложениях без отрицания оно не появилось ни разу. Местоимения вернулись 100 из 100. Границы вернулись 92 раза. 7 раз at least или at most просто пропали. The office is at most 80 kilometers from the station вернулось как The office is 80 kilometres from the station. Один раз 3631 доллар превратился в 631.

Вид модальности вернулся 67 раз. should 32 раза из 33 стал должен по-русски и must или has to по-английски. В русском есть слово мягче, следует, но модель взяла его только один раз.

Хуже всего вышло с именами. Из 300 имён точно вернулись 113. Из 65 с польскими буквами только 7. Piotr стал Peter, Paweł Wiśniewski стал Pavel Vignevsky. Сеть магазинов Żabka по-русски стала Абка, по-английски Abka, компания Mleczna Dolina стала Melena Valley.

До этого места ожидание сбылось наполовину. Что пропадёт диакритика, я ждал, а что Piotr станет Peter, нет. А местоимения, за которые я боялся больше всего, вернулись все.

вернулось после круга, из всех предложений этого вида 1-й круг 5-й круг проверяла регулярка число, валюта, дата 100/100 98/100 слово отрицания 100/100 100/100 местоимение she/he 100/100 99/100 at least / at most ... 92/100 91/100 must / may / should 67/100 67/100 имена 113/300 106/300 нашлось при чтении 1-го круга tenant 0/21 refundable 0/10 invoice 46/66
Регулярка проверяет только слово, на котором держится смысл. На 3 нижних слова она не смотрела.

Где ошиблась моя проверка

Скрипт сказал, что с отрицанием всё идеально. Потом я глазами прочитал все 600 русских предложений первого круга и нашёл 3 вещи, которых скрипт не увидел.

Во всех 21 предложении арендатор стал арендодателем. The tenant has not paid the rent for 30 months ушло в русский как Арендодатель не платил арендную плату. То есть не платил арендодатель. Вернулось The lessor did not pay rent for 30 months. not на месте, проверка отрицания прошла, только должен теперь другой человек.

Вторая ошибка в обратную сторону. The fee is not refundable after 3 days стало не подлежит возмещению. Это верный перевод. Вернулось This fee is not payable. В 9 из 10 таких предложений русский был верным, а вернувшийся английский нет. Значит, в этих 9 ошибка случилась на обратном пути.

Третья вещь это invoice. Иногда модель переводит его как счёт-фактура, формальный документ. Иногда просто как счёт. Счёт-фактура вернулась как invoice 46 раз из 46. Просто счёт вернулся как invoice 0 раз из 20, чаще всего как account. По-русски счёт это ещё и банковский счёт.

В другую сторону

С местоимениями, где проверка показала 100 из 100, нашлась своя беда.

В русском у глагола в прошедшем времени есть род. В 16 из 60 предложений с таким глаголом род глагола идёт за привычным родом профессии, а не за местоимением. The accountant called because she needs the invoice стало Бухгалтер позвонил, потому что ей нужен счет. Русский читатель, скорее всего, увидит здесь 2 человек. Позвонил мужчина, а счёт нужен какой-то женщине. Мужской род глагола после “бухгалтер” возможен и про женщину, так что это ещё не доказывает, что людей 2, но читателя туда толкает. В 13 случаях из 16 это мужской глагол рядом с she. С медсестрой 3 раза вышло наоборот: женский глагол рядом с he.

Вернулось The accountant called because she needs an account. Проверка местоимения прошла во всех 16 предложениях. У английского глагола рода нет, поэтому ошибке из середины в вернувшемся английском просто негде проявиться. Английская фраза и сама немного двусмысленна, she может быть кем-то другим, но я понимаю её так, что человек 1.

верен ли русский и выглядит ли верным вернувшийся английский вернулось верно вернулось неверно русский верен русский неверен проверка работает числа 100 из 100 ложная тревога not refundable → не подлежит возмещению → not payable 9 из 10 проверка не видит the accountant ... she → Бухгалтер позвонил ... ей → the accountant ... she 16 из 16 проверка работает the tenant → Арендодатель → the lessor 21 из 21
Опасна нижняя левая клетка: ошибка была в середине, а в английском ей не на чем вернуться.

Ещё круги

Я ждал, что текст перестанет меняться после 2 или 3 кругов. Почти так и вышло. По сравнению с предыдущим кругом в 1-м изменились 540 предложений, потом 172, 63, 31 и 25. Слово в слово исходник вернулся только в 60 случаях из 600.

После первого круга что-то потеряли 138 предложений, после 5 кругов 142. Я уже собирался написать, что круги со 2-го по 5-й добавляют 4 новые потери. Потом посмотрел на них. Первая на совести моей регулярки: at most 1817 вернулось как does not require more than 1,817, а это то же самое. Мой шаблон знал только not more than, написанное подряд. Вторая это просто разнобой разделителей в 1,028 211. А 2 действительно меняют смысл. Our rent went up to 54,466 zlotys во 2-м круге стало 54 466 человек. К 5-му кругу аренда была уже $54,466. Во 2-м круге разработчик, который был she, ушёл в русский как Застройщик, то есть строитель домов. Местоимение в русском пропало, а английский вернулся с he.

Из 25 предложений, которые ещё меняются в 5-м круге, 17 качаются между 2 вариантами, чаще всего she needs the bill и she needs an account. Только 8 ещё меняются как-то иначе.

600 предложений, 5 кругов изменилось с предыдущего круга потеряло что-то к этому кругу 540 138 круг 1 172 142 круг 2 63 142 круг 3 31 142 круг 4 25 142 круг 5
В 1-м круге изменение считается от исходника. Из 25 предложений, которые ещё меняются в 5-м круге, 17 качаются между 2 вариантами.

Чего я не проверял

Это одна пара моделей. Второй я планировал NLLB-200 на 600 млн параметров, который Meta выпустила в июле этого года. Он не поместился на диск машины. Проверки это регулярки по словам, на которых держится смысл. Смысла они не понимают: refundable в payable прошло проверку отрицания. Первый круг я прочитал глазами. Круги со 2-го по 5-й не читал, так что там может быть что-то ещё. Предложения короткие, около 9 слов, из шаблонов. Разных предложений с отрицанием всего 36, так что 100 предложений там весят меньше, чем кажется. Русский был только серединой. Польский или беларусский в середине я не пробовал.

С числами обратный перевод справился. Бухгалтера он пропустил во всех 16 предложениях, а верный русский перевод про невозвратный сбор забраковал 9 раз из 10. В следующий раз, когда мне понадобится такая проверка, я прочитаю середину сам или попрошу того, кто знает этот язык.