paraphrastic_test / modeling_paragram_sp.py
jwieting's picture
Update modeling_paragram_sp.py
77a3be3
raw
history blame
1.36 kB
import torch
from torch import nn
from transformers import BertPreTrainedModel
class ParagramSPModel(BertPreTrainedModel):
def __init__(self, config):
super().__init__(config)
self.config = config
self.word_embeddings = nn.Embedding(config.vocab_size, config.hidden_size, padding_idx=config.pad_token_id)
# Initialize weights and apply final processing
self.post_init()
def filter_input_ids(self, input_ids):
output = []
length = input_ids.shape[1]
for i in range(input_ids.shape[0]):
ids = input_ids[i]
filtered_ids = []
for j in ids:
if j > 0:
filtered_ids.append(j)
if len(filtered_ids) == 0:
filtered_ids = [0]
output.append(filtered_ids + [config.pad_token_id] * (length - length(filtered_ids)))
return torch.tensor(output)
def forward(self, input_ids, attention_mask):
print(input_ids)
print(attention_mask)
input_ids = self.filter_input_ids(input_ids)
attention_mask = input_ids > 0
embeddings = self.word_embeddings(input_ids)
masked_embeddings = embeddings * attention_mask[:, :, None]
mean_pooled_embeddings = masked_embeddings.sum(dim=1) / attention_mask[:, :, None].sum(dim=1)
return (embeddings, mean_pooled_embeddings, embeddings)