| | import torch |
| | import torch.nn as nn |
| |
|
| | import random |
| | import numpy as np |
| |
|
| | import numpy as np |
| |
|
| | import pandas as pd |
| |
|
| | import torch.nn.functional as F |
| |
|
| | from transformers import BertModel, PreTrainedModel |
| | from configuration_cbert import BertCustomConfig |
| |
|
| | import torch.optim as optim |
| |
|
| | class BertSentiment(PreTrainedModel): |
| | config_class = BertCustomConfig |
| | def __init__(self, config, weight_path=None): |
| | super().__init__(config) |
| | self.config = config |
| | self.num_labels = self.config.hyperparams["num_labels"] |
| | |
| | if weight_path: |
| | self.bert = BertModel.from_pretrained(weight_path) |
| | else: |
| | self.bert = BertModel(self.config) |
| |
|
| | self.dropout = nn.Dropout(self.config.hidden_dropout_prob) |
| | self.hidden = nn.Linear(self.config.hidden_size, self.config.hidden_size) |
| | self.classifier = nn.Linear(self.config.hidden_size, self.config.hyperparams["num_labels"]) |
| | |
| | nn.init.xavier_normal_(self.hidden.weight) |
| | nn.init.xavier_normal_(self.classifier.weight) |
| |
|
| | def forward(self, input_ids, token_type_ids=None, attention_mask=None, labels=None, graphEmbeddings=None): |
| | |
| | output, ctoken = self.bert(input_ids, token_type_ids, attention_mask, return_dict=False) |
| | pooled_output = torch.mean(output, 1) |
| | pooled_output = self.hidden(pooled_output) |
| | pooled_output = self.dropout(pooled_output) |
| | pooled_output = F.relu(pooled_output) |
| | logits = self.classifier(pooled_output) |
| | |
| | |
| | |
| |
|
| | return logits |
| |
|