def decode(self, emissions):
    B, T, N = emissions.size()
    hypos = list()

    if self.asg_transitions is None:
        transitions = torch.FloatTensor(N, N).zero_()
    else:
        transitions = torch.FloatTensor(self.asg_transitions).view(N, N)

    viterbi_path = torch.IntTensor(B, T)
    workspace = torch.ByteTensor(CpuViterbiPath.get_workspace_size(B, T, N))
    CpuViterbiPath.compute(
            B,
            T,
            N,
            get_data_ptr_as_bytes(emissions),
            get_data_ptr_as_bytes(transitions),
            get_data_ptr_as_bytes(viterbi_path),
            get_data_ptr_as_bytes(workspace),)
    return [[{"tokens": self.get_tokens(viterbi_path[b].tolist()), "score": 0}] for b in range(B)]