'Return the forward probability matrix, a T by N array of
log-probabilities, where T is the length of the sequence and N is the
number of states. Each entry (t, s) gives the probability of being in
state s at time t after observing the partial symbol sequence up to
and including t.
:param unlabeled_sequence: the sequence of unlabeled symbols
:type unlabeled_sequence: list
:return: the forward log probability matrix
:rtype: array'

def _forward_probability(self, unlabeled_sequence):

    T = len(unlabeled_sequence)
    N = len(self._states)
    alpha = _ninf_array((T, N))
    transitions_logprob = self._transitions_matrix()
    symbol = unlabeled_sequence[0][_TEXT]
    for (i, state) in enumerate(self._states):
        alpha[(0, i)] = (self._priors.logprob(state) + self._output_logprob(state, symbol))
    for t in range(1, T):
        symbol = unlabeled_sequence[t][_TEXT]
        output_logprob = self._outputs_vector(symbol)
        for i in range(N):
            summand = (alpha[(t - 1)] + transitions_logprob[i])
            alpha[(t, i)] = (logsumexp2(summand) + output_logprob[i])
    return alpha
