Fix 29807 sinusoidal positional encodings in Flaubert, Informer and XLM (#29904)
* Fix sinusoidal_embeddings in FlaubertModel * Fix for Informer * Fix for XLM * Move sinusoidal emb for XLM * Move sinusoidal emb for Flaubert * Small cleanup * Add comments on tests code copied from * Add with Distilbert->
This commit is contained in:
committed by
GitHub
parent
83b26dd79d
commit
416711c3ea
@@ -36,6 +36,7 @@ if is_torch_available():
|
||||
FlaubertModel,
|
||||
FlaubertWithLMHeadModel,
|
||||
)
|
||||
from transformers.models.flaubert.modeling_flaubert import create_sinusoidal_embeddings
|
||||
|
||||
|
||||
class FlaubertModelTester(object):
|
||||
@@ -431,6 +432,14 @@ class FlaubertModelTest(ModelTesterMixin, PipelineTesterMixin, unittest.TestCase
|
||||
config_and_inputs = self.model_tester.prepare_config_and_inputs()
|
||||
self.model_tester.create_and_check_flaubert_model(*config_and_inputs)
|
||||
|
||||
# Copied from tests/models/distilbert/test_modeling_distilbert.py with Distilbert->Flaubert
|
||||
def test_flaubert_model_with_sinusoidal_encodings(self):
|
||||
config = FlaubertConfig(sinusoidal_embeddings=True)
|
||||
model = FlaubertModel(config=config)
|
||||
sinusoidal_pos_embds = torch.empty((config.max_position_embeddings, config.emb_dim), dtype=torch.float32)
|
||||
create_sinusoidal_embeddings(config.max_position_embeddings, config.emb_dim, sinusoidal_pos_embds)
|
||||
self.model_tester.parent.assertTrue(torch.equal(model.position_embeddings.weight, sinusoidal_pos_embds))
|
||||
|
||||
def test_flaubert_lm_head(self):
|
||||
config_and_inputs = self.model_tester.prepare_config_and_inputs()
|
||||
self.model_tester.create_and_check_flaubert_lm_head(*config_and_inputs)
|
||||
|
||||
@@ -35,7 +35,11 @@ if is_torch_available():
|
||||
import torch
|
||||
|
||||
from transformers import InformerConfig, InformerForPrediction, InformerModel
|
||||
from transformers.models.informer.modeling_informer import InformerDecoder, InformerEncoder
|
||||
from transformers.models.informer.modeling_informer import (
|
||||
InformerDecoder,
|
||||
InformerEncoder,
|
||||
InformerSinusoidalPositionalEmbedding,
|
||||
)
|
||||
|
||||
|
||||
@require_torch
|
||||
@@ -164,6 +168,12 @@ class InformerModelTester:
|
||||
|
||||
self.parent.assertTrue((encoder_last_hidden_state_2 - encoder_last_hidden_state).abs().max().item() < 1e-3)
|
||||
|
||||
embed_positions = InformerSinusoidalPositionalEmbedding(
|
||||
config.context_length + config.prediction_length, config.d_model
|
||||
)
|
||||
self.parent.assertTrue(torch.equal(model.encoder.embed_positions.weight, embed_positions.weight))
|
||||
self.parent.assertTrue(torch.equal(model.decoder.embed_positions.weight, embed_positions.weight))
|
||||
|
||||
with tempfile.TemporaryDirectory() as tmpdirname:
|
||||
decoder = model.get_decoder()
|
||||
decoder.save_pretrained(tmpdirname)
|
||||
|
||||
@@ -36,6 +36,7 @@ if is_torch_available():
|
||||
XLMModel,
|
||||
XLMWithLMHeadModel,
|
||||
)
|
||||
from transformers.models.xlm.modeling_xlm import create_sinusoidal_embeddings
|
||||
|
||||
|
||||
class XLMModelTester:
|
||||
@@ -432,6 +433,14 @@ class XLMModelTest(ModelTesterMixin, GenerationTesterMixin, PipelineTesterMixin,
|
||||
config_and_inputs = self.model_tester.prepare_config_and_inputs()
|
||||
self.model_tester.create_and_check_xlm_model(*config_and_inputs)
|
||||
|
||||
# Copied from tests/models/distilbert/test_modeling_distilbert.py with Distilbert->XLM
|
||||
def test_xlm_model_with_sinusoidal_encodings(self):
|
||||
config = XLMConfig(sinusoidal_embeddings=True)
|
||||
model = XLMModel(config=config)
|
||||
sinusoidal_pos_embds = torch.empty((config.max_position_embeddings, config.emb_dim), dtype=torch.float32)
|
||||
create_sinusoidal_embeddings(config.max_position_embeddings, config.emb_dim, sinusoidal_pos_embds)
|
||||
self.model_tester.parent.assertTrue(torch.equal(model.position_embeddings.weight, sinusoidal_pos_embds))
|
||||
|
||||
def test_xlm_lm_head(self):
|
||||
config_and_inputs = self.model_tester.prepare_config_and_inputs()
|
||||
self.model_tester.create_and_check_xlm_lm_head(*config_and_inputs)
|
||||
|
||||
Reference in New Issue
Block a user