nlomov's picture
Added all source code
ab33b80
Raw
History Blame Contribute Delete
1.82 kB
import torch
from torch.utils.data import Dataset
import scipy.sparse
class CTMDataset(Dataset):
"""Class to load BoW and the contextualized embeddings."""
def __init__(self, X_contextual, X_bow, idx2token, labels=None):
if X_bow.shape[0] != len(X_contextual):
raise Exception("Wait! BoW and Contextual Embeddings have different sizes! "
"You might want to check if the BoW preparation method has removed some documents. ")
if labels is not None:
if labels.shape[0] != X_bow.shape[0]:
raise Exception(f"There is something wrong in the length of the labels (size: {labels.shape[0]}) "
f"and the bow (len: {X_bow.shape[0]}). These two numbers should match.")
self.X_bow = X_bow
self.X_contextual = X_contextual
self.idx2token = idx2token
self.labels = labels
def __len__(self):
"""Return length of dataset."""
return self.X_bow.shape[0]
def __getitem__(self, i):
"""Return sample from dataset at index i."""
if type(self.X_bow[i]) == scipy.sparse.csr_matrix:
X_bow = torch.FloatTensor(self.X_bow[i].todense())
X_contextual = torch.FloatTensor(self.X_contextual[i])
else:
X_bow = torch.FloatTensor(self.X_bow[i])
X_contextual = torch.FloatTensor(self.X_contextual[i])
return_dict = {'X_bow': X_bow, 'X_contextual': X_contextual}
if self.labels is not None:
labels = self.labels[i]
if type(labels) == scipy.sparse.csr_matrix:
return_dict["labels"] = torch.FloatTensor(labels.todense())
else:
return_dict["labels"] = torch.FloatTensor(labels)
return return_dict