Эксперименты с использованием NMT модели NNLB-200 для перефразировки русскоязычных текстов

Jul 27, 2022 13:21

В рамках проекта со стихами у меня есть задачка: научиться генерировать из текста стихотворения близкий по смыслу текст в прозе.
По сути - перефразировка. Я давно пытаюсь применить к ней машинный перевод, но пока неудачно. Далее небольшой отчет об очередной попытке, на этот раз с хайповой моделью от Меты NNLB-200 (название пафосно расшифровывается как No Language Left Behind).

Я взял вот этот колаб от Давида Дале, добавил в нем в процедуре paraphrase вариант с сэмплингом.

Попытка первая - прогоняем через paraphrase стишки - однострочники, полупирожки и пирожки.

Например, однострочник

дарёный конь увы стоял беззубый

дает такие результаты:

Beam search temperature=1.0:
Даровая лошадь, к сожалению, стояла без зубов.

Sampling temperature=1.0:
Какая же лошадь, как и у нее, без зубов.

Sampling temperature=1.2:
Половой коня, к несчастью, стоял безубыт.


Для двустрочника:

я говорил что пули дуры
и не сдадут они егэ

получаются такие перефразировки:

Beam search temperature=1.0:
Я говорил, пули дураки, и они не сдадут его.

Sampling temperature=1.0:
Я же сказал, что пулями глупо. Они не будут отказываться!

Sampling temperature=1.2:
Мы же говорили, чтобы пули не были полными, чтобы они сдавали вечья.

Тут тоже beam search выглядит лучше сэмплинга.

К сожалению, для 4-строчников генерация сильно деградирует. Возможно из-за того, что формат поэтического текста дистрибутивно далек от того, на чем тренировалась модель. Например, для

я выбираю мир в котором
есть ты а тысячи миров
в которых нет тебя не могут
меня заинтересовать

получаем такие перефразировки (выведено по 5 альтернативных вариантов):

Beam search temperature=1.0:
[1] Я выбирай мир с тобой, а тысяча миров без тебя меня не интересуют.
[2] Я выбрал мир, в котором ты есть, и тысячи мир, в котором нет тебя, не могут заинтересовать меня.
[3] я выбирал мир, в котором ты есть, и тысячи мир, в котором ты нет, меня не интересуют.
[4] Я выбирал мир, где ты есть, а тысяча миров, где ты нет, меня не интересуют.
[5] Я выбрал мир, в котором ты есть, и тысячи мир, в котором нет тебя, не могут заинтересовать меня. "

Sampling temperature=1.0:
[1] Ты - мой вариант, я не имею за этого ничего, но я все выбрал по миру с тобой, а тысяча миров без тебя меня не интересуют.
[2] Я не люблю быть с тобой в этом мире. Тысячи мирей, в которых не было тебя, не интересуют меня.
[3] И я выбіраю мир, в котором ты, а тысячы миров, где ты нет, меня не интересует
[4] Я выбирай мир, в котором ты есть. Но тысячи существ, в которых ты нет, меня не могут заинтересовать.
[5] Я выбирал мир с тобой, а тысячу миров без тебя меня не интересуют.

Sampling temperature=1.2:
[1] Я делаю выбор за мир, где есть ты, а тысяча миров, которые тебя не имеют, не волнует.
[2] Я выбирает мир с тобой, и тысячи сведений без тебя меня так сильно не интересуют.
[3] Я выбирают мир с тобой и тысячи Миров, в которых ты не существуешь,
[4] Я выбирал мир с тобой, а тысяче стран без тебя, они не интересуют меня.
[5] Я выбирают мир с тобой, а тысяча миров без тебя.

Только первый вариант в beam search нормальный.

А вот, например, классика:

Белая береза
Под моим окном
Принакрылась снегом
Точно серебром.

И вот что получилось на выходе при использовании beam search:

Белая борода Под моим оконным окном покрыто снегом Прямо серебряным.

Кстати, возможно, что причина те только в необычном для модели формате текста. Вот что получилось при перефразировки "бусидо", то есть "самурайских афоризмов":

У самурая нет цели, у него есть только путь. ==(beam search)=> У самураи нет цели. У него только путь.
У самурая нет цели, у него есть только путь. ==(sampling)=> У самураи нет ни точки, ни пути.

Весел лишь тот самурай, который не спешит. ==(beam search)=> Веселится только самурай, не торопящийся.
Весел лишь тот самурай, который не спешит. ==(sampling)=> Радует только самурай... тот, кто не спешил.

Пьяный самурай тем плох, что он предсказуем. ==(beam search)=> У пьяного самурая плохие предсказания, которые он может предсказать.
Пьяный самурай тем плох, что он предсказуем. ==(sampling)=> Пьяное самураи - всё то, что мы можем предсказать.

Мудрый самурай никогда не признается в том, откуда у него растут руки. ==(beam search)=> Мудрые самураи никогда не говорят о том, где растут их руки.
Мудрый самурай никогда не признается в том, откуда у него растут руки. ==(sampling)=> Мудрий самурай не знает, что такое руки.

машинный перевод, перефразировки

Previous post Next post
Up