В рамках проекта со стихами у меня есть задачка: научиться генерировать из текста стихотворения близкий по смыслу текст в прозе.
По сути - перефразировка. Я давно пытаюсь применить к ней машинный перевод, но пока неудачно. Далее небольшой отчет об очередной попытке, на этот раз с хайповой моделью от Меты 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)=> Мудрий самурай не знает, что такое руки.