import logging import datasets from datasets import load_dataset import pandas as pd import matplotlib.pyplot as plt import seaborn as sns from datasets import load_metric import transformers import torch import io import torch.nn.functional as F import random import numpy as np import time import math import datetime import torch.nn as nn from torch.utils.data import Dataset,TensorDataset, DataLoader, RandomSampler, SequentialSampler from transformers import ( AutoModel, AutoConfig, AutoModelForSequenceClassification, AutoTokenizer, DataCollatorWithPadding, default_data_collator, set_seed, get_constant_schedule_with_warmup, Trainer,TrainingArguments,EarlyStoppingCallback) from datasets import Dataset import torch.nn as nn import torch.nn.functional as F import sys #------------------------------ # The Generator as in # https://www.aclweb.org/anthology/2020.acl-main.191/ # https://github.com/crux82/ganbert #------------------------------ class Generator(nn.Module): def __init__(self, noise_size=100, output_size=512, hidden_sizes=[512], dropout_rate=0.1): super(Generator, self).__init__() layers = [] hidden_sizes = [noise_size] + hidden_sizes for i in range(len(hidden_sizes)-1): layers.extend([nn.Linear(hidden_sizes[i], hidden_sizes[i+1]), nn.LeakyReLU(0.2, inplace=True), nn.Dropout(dropout_rate)]) layers.append(nn.Linear(hidden_sizes[-1],output_size)) self.layers = nn.Sequential(*layers) def forward(self, noise): output_rep = self.layers(noise) return output_rep #------------------------------ # The Discriminator # https://www.aclweb.org/anthology/2020.acl-main.191/ # https://github.com/crux82/ganbert #------------------------------ class Discriminator(nn.Module): def __init__(self, input_size=512, hidden_sizes=[512], num_labels=2, dropout_rate=0.3): super(Discriminator, self).__init__() self.input_dropout = nn.Dropout(p=dropout_rate) layers = [] hidden_sizes = [input_size] + hidden_sizes for i in range(len(hidden_sizes)-1): layers.extend([nn.Linear(hidden_sizes[i], hidden_sizes[i+1]), nn.LeakyReLU(0.2, inplace=True), nn.Dropout(dropout_rate)]) self.layers = nn.Sequential(*layers) #per il flatten self.logit = nn.Linear(hidden_sizes[-1],num_labels+1) # +1 for the probability of this sample being fake/real. self.softmax = nn.Softmax(dim=-1) def forward(self, input_rep): input_rep = self.input_dropout(input_rep) last_rep = self.layers(input_rep) logits = self.logit(last_rep) probs = self.softmax(logits) return last_rep, logits, probs