Почему вложения BERT / X LNet необратимы? - PullRequest
0 голосов
/ 02 апреля 2020

Я недавно экспериментировал с языковыми моделями стеков и заметил кое-что интересное: выходные вложения BERT и X LNet не совпадают с входными вложениями. Например, этот фрагмент кода:

bert = transformers.BertForMaskedLM.from_pretrained("bert-base-cased")
tok = transformers.BertTokenizer.from_pretrained("bert-base-cased")

sent = torch.tensor(tok.encode("I went to the store the other day, it was very rewarding."))
enc = bert.get_input_embeddings()(sent)
dec = bert.get_output_embeddings()(enc)

print(tok.decode(dec.softmax(-1).argmax(-1)))

Выводит это для меня:

,,,,,,,,,,,,,,,,,

Я ожидал, что (отформатированная) последовательность ввода будет возвращена, так как у меня сложилось впечатление, что входные и выходные токены были связаны.

Что интересно, большинство других моделей не демонстрируют такого поведения. Например, если вы выполняете тот же фрагмент кода на GPT2, Albert или Roberta, он выводит последовательность ввода.

Это ошибка? Или это ожидается для BERT / X LNet?

...