def METHOD_NAME(self):
    data = HeteroData()
    node_types = ['author', 'paper', 'term', 'conference']
    for i, node_type in enumerate(node_types[:2]):
        x = sp.load_npz(osp.join(self.raw_dir, f'features_{i}.npz'))
        data[node_type].x = torch.from_numpy(x.todense()).to(torch.float)
    x = np.load(osp.join(self.raw_dir, 'features_2.npy'))
    data['term'].x = torch.from_numpy(x).to(torch.float)
    node_type_idx = np.load(osp.join(self.raw_dir, 'node_types.npy'))
    node_type_idx = torch.from_numpy(node_type_idx).to(torch.long)
    data['conference'].num_nodes = int((node_type_idx == 3).sum())
    y = np.load(osp.join(self.raw_dir, 'labels.npy'))
    data['author'].y = torch.from_numpy(y).to(torch.long)
    split = np.load(osp.join(self.raw_dir, 'train_val_test_idx.npz'))
    for name in ['train', 'val', 'test']:
        idx = split[f'{name}_idx']
        idx = torch.from_numpy(idx).to(torch.long)
        mask = torch.zeros(data['author'].num_nodes, dtype=torch.bool)
        mask[idx] = True
        data['author'][f'{name}_mask'] = mask
    s = {}
    N_a = data['author'].num_nodes
    N_p = data['paper'].num_nodes
    N_t = data['term'].num_nodes
    N_c = data['conference'].num_nodes
    s['author'] = (0, N_a)
    s['paper'] = (N_a, N_a + N_p)
    s['term'] = (N_a + N_p, N_a + N_p + N_t)
    s['conference'] = (N_a + N_p + N_t, N_a + N_p + N_t + N_c)
    A = sp.load_npz(osp.join(self.raw_dir, 'adjM.npz'))
    for src, dst in product(node_types, node_types):
        A_sub = A[s[src][0]:s[src][1], s[dst][0]:s[dst][1]].tocoo()
        if A_sub.nnz > 0:
            row = torch.from_numpy(A_sub.row).to(torch.long)
            col = torch.from_numpy(A_sub.col).to(torch.long)
            data[src, dst].edge_index = torch.stack([row, col], dim=0)
    if self.pre_transform is not None:
        data = self.pre_transform(data)
    torch.save(self.collate([data]), self.processed_paths[0])