def __init__(self, args, dep_tag_num, pos_tag_num): super(Aspect_Bert_GAT, self).__init__() self.args = args # Bert config = BertConfig.from_pretrained(args.bert_model_dir) self.bert = BertModel.from_pretrained( args.bert_model_dir, config=config, from_tf =False) self.dropout_bert = nn.Dropout(config.hidden_dropout_prob) self.dropout = nn.Dropout(args.dropout) args.embedding_dim = config.hidden_size # 768 if args.highway: self.highway_dep = Highway(args.num_layers, args.embedding_dim) self.highway = Highway(args.num_layers, args.embedding_dim) gcn_input_dim = args.embedding_dim # GAT self.gat_dep = [RelationAttention(in_dim=args.embedding_dim).to(args.device) for i in range(args.num_heads)] self.dep_embed = nn.Embedding(dep_tag_num, args.embedding_dim) last_hidden_size = args.embedding_dim * 2 layers = [ nn.Linear(last_hidden_size, args.final_hidden_size), nn.ReLU()] for _ in range(args.num_mlps - 1): layers += [nn.Linear(args.final_hidden_size, args.final_hidden_size), nn.ReLU()] self.fcs = nn.Sequential(*layers) self.fc_final = nn.Linear(args.final_hidden_size, args.num_classes)
def __init__(self, args, dep_tag_num, pos_tag_num): super(Aspect_Text_GAT_ours, self).__init__() self.args = args num_embeddings, embed_dim = args.glove_embedding.shape self.embed = nn.Embedding(num_embeddings, embed_dim) self.embed.weight = nn.Parameter(args.glove_embedding, requires_grad=False) self.dropout = nn.Dropout(args.dropout) self.tanh = nn.Tanh() if args.highway: self.highway_dep = Highway(args.num_layers, args.embedding_dim) self.highway = Highway(args.num_layers, args.embedding_dim) self.bilstm = nn.LSTM(input_size=args.embedding_dim, hidden_size=args.hidden_size, bidirectional=True, batch_first=True, num_layers=args.num_layers) gcn_input_dim = args.hidden_size * 2 # if args.gat: self.gat_dep = [ RelationAttention(in_dim=args.embedding_dim).to(args.device) for i in range(args.num_heads) ] if args.gat_attention_type == 'linear': self.gat = [ LinearAttention(in_dim=gcn_input_dim, mem_dim=gcn_input_dim).to(args.device) for i in range(args.num_heads) ] # we prefer to keep the dimension unchanged elif args.gat_attention_type == 'dotprod': self.gat = [ DotprodAttention().to(args.device) for i in range(args.num_heads) ] else: # reshaped gcn self.gat = nn.Linear(gcn_input_dim, gcn_input_dim) self.dep_embed = nn.Embedding(dep_tag_num, args.embedding_dim) last_hidden_size = args.hidden_size * 4 layers = [ nn.Linear(last_hidden_size, args.final_hidden_size), nn.ReLU() ] for _ in range(args.num_mlps - 1): layers += [ nn.Linear(args.final_hidden_size, args.final_hidden_size), nn.ReLU() ] self.fcs = nn.Sequential(*layers) self.fc_final = nn.Linear(args.final_hidden_size, args.num_classes)