File size: 1,341 Bytes
f2a699d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
from torch import nn
from transformers import RobertaModel, RobertaConfig

class RobertaSNLI(nn.Module):
    def __init__(self):
        super(RobertaSNLI, self).__init__()
        config = RobertaConfig.from_pretrained('roberta-base')
        config.output_attentions = True  # activer sortie des poids d'attention
        config.max_position_embeddings = 130  # gérer la longueur des séquences
        config.hidden_size = 256    # taille des états cachés du modèle
        config.num_hidden_layers = 4    # nombre de couches cachées dans le transformateur
        config.intermediate_size = 512  # taille couche intermédiaire dans modèle de transformateur
        config.num_attention_heads = 4  # nombre de têtes d'attentions 

        self.roberta = RobertaModel(config)
        self.roberta.requires_grad = True
        self.output = nn.Linear(256, 3) # couche de sortie linéaire. Entrée la taille des états cachées et 3 sorties
        
    def forward(self, input_ids, attention_mask=None):
        outputs = self.roberta(input_ids, attention_mask=attention_mask)
        roberta_out = outputs[0]  # séquence des états cachés à la sortie de la dernière couche
        attentions = outputs.attentions   # poids d'attention du modèle RoBERTa
        
        return self.output(roberta_out[:, 0]), attentions