Esempio n. 1
0
 def _partial_inference_z_update(self, theta_avg, doc_y_i, docToken, phi_avg):
     doc_z_unnorm_log = np.dot(
         np.log(phi_avg[:, docToken]),
         doc_y_i
     )
     doc_z_unnorm_log += np.log(theta_avg)
     return probNormalizeLog(doc_z_unnorm_log)
Esempio n. 2
0
    def _prob_doc_z(self, TE_no_d_z, Y1TV_no_d_z, TI_no_d_z, docE, docW,
                    doc_Y1V):
        """
        calculate conditional probability for document-level topic doc_z
        method is different from [1]
        :param TE_no_d_z: TE without doc d
        :param Y1TV_no_d_z: Y1TV without d
        :param TI_no_d_z: TI without d
        :param docE: document-level emotion counts [self.E], np.sum(docE) == Md
        :param docW: document-level words counts [self.V], np.sum(docW) == Nd
        :return: doc_z
        """
        # alpha #
        log_prob_a = np.log(TI_no_d_z + self.alpha)
        # TE #
        a = TE_no_d_z + self.gamma
        log_prob_b = np.sum(logfactorial(docE, a), axis=1) - logfactorial(
            np.sum(docE), np.sum(a, axis=1))
        # Y1TV #
        b = Y1TV_no_d_z + self.beta
        log_prob_c = np.sum(logfactorialSparse(
            doc_Y1V, b), axis=1) - logfactorial(doc_Y1V.sum(), np.sum(b,
                                                                      axis=1))

        prob_doc_z = probNormalizeLog(log_prob_a + log_prob_b + log_prob_c)
        return prob_doc_z
Esempio n. 3
0
def _fit_single_document_x_update(doc_z2, doc_r, doc_u, doc_e, pars_topass):
    doc_x_unnorm_log_u = pars_topass["psi"].bigamma_data[doc_u]
    doc_x_unnorm_log_e = np.expand_dims(doc_r[:, 2], axis=-1) * np.transpose(
        np.tensordot(
            doc_z2,
            pars_topass["eta"].bigamma_data,
            axes=(0, 0)
        ),
        axes=(1, 0)
    )[doc_e, :]
    doc_x_unnorm_log = doc_x_unnorm_log_u + doc_x_unnorm_log_e
    return probNormalizeLog(doc_x_unnorm_log)
Esempio n. 4
0
def _fit_single_document_z1_update(doc_y, doc_r, docToken, doc_e, pars_topass):
    doc_z1_unnorm_log_w = np.dot(
        pars_topass["phi1"].bigamma_data[:, docToken],
        doc_y[:, 0]
    )
    doc_z1_unnorm_log_e = np.tensordot(
        doc_r[:, 1],
        pars_topass["eta_z"].bigamma_data[:, doc_e],
        axes=[0, -1]
    )
    doc_z1_unnorm_log_theta1 = pars_topass["theta1"].bigamma_data
    doc_z1_unnorm_log = doc_z1_unnorm_log_w + doc_z1_unnorm_log_e + doc_z1_unnorm_log_theta1
    return probNormalizeLog(doc_z1_unnorm_log)
Esempio n. 5
0
def _fit_single_document_z2_update(doc_x, doc_y, doc_r, docToken, doc_e, pars_topass):
    doc_z2_unnorm_log_w = np.dot(
        pars_topass["phi2"].bigamma_data[:, docToken],
        doc_y[:, 1]
    )
    doc_z2_unnorm_log_e = np.tensordot(
        pars_topass["eta"].bigamma_data[:, :, doc_e] * doc_r[:, 2],
        doc_x,
        axes=([2, 1], [0, 1])
    )
    doc_z2_unnorm_log_theta2 = pars_topass["theta2"].bigamma_data
    doc_z2_unnorm_log = doc_z2_unnorm_log_w + doc_z2_unnorm_log_e + doc_z2_unnorm_log_theta2
    return probNormalizeLog(doc_z2_unnorm_log)
Esempio n. 6
0
def _fit_single_document_r_update(doc_z2, doc_z1, doc_x, doc_u, doc_e, pars_topass):
    Md = doc_u.shape[0]
    doc_r_unnorm_log = np.zeros([Md, 3])
    doc_r_unnorm_log[:, 0] = pars_topass["eta_u"].bigamma_data[doc_u, doc_e]
    doc_r_unnorm_log[:, 1] = np.dot(doc_z1, pars_topass["eta_z"].bigamma_data[:, doc_e])
    doc_r_unnorm_log[:, 2] = np.tensordot(
        doc_x,
        np.tensordot(
            doc_z2,
            pars_topass["eta"].bigamma_data,
            axes=(0, 0)
        ),
        axes=(1, 0)
    )[np.arange(Md), doc_e]
    doc_r_unnorm_log += pars_topass["se"].bigamma_data
    return probNormalizeLog(doc_r_unnorm_log)
Esempio n. 7
0
    def _prob_doc_z(self, TI_no_d, TXE_no_d, Y1TV_no_d, doc_XE, doc_Y1V):
        """
        calculate conditional probability for document-level topic doc_z
        :param: doc_Y1V: lil_matrix((1, self.V), dtype=int8)
        """
        # alpha #
        log_prob_alpha = np.log(TI_no_d + self.alpha)
        # gamma # (without sparsity, directly calculating log gamma function)
        a = TXE_no_d + self.gamma + doc_XE
        log_prob_gamma = np.sum(np.sum(gammaln(a), axis=-1) -
                                gammaln(np.sum(a, axis=-1)),
                                axis=-1)
        # beta # (with sparsity)
        b = Y1TV_no_d + self.beta
        log_prob_beta = np.sum(logfactorialSparse(doc_Y1V, b),
                               axis=-1) - logfactorial(doc_Y1V.sum(),
                                                       np.sum(b, axis=-1))

        prob_doc_z = probNormalizeLog(log_prob_alpha + log_prob_gamma +
                                      log_prob_beta)
        return prob_doc_z
Esempio n. 8
0
def _fit_single_document_y_update(doc_z2, doc_z1, docToken, pars_topass):
    doc_y_unnorm_log = np.zeros([docToken.shape[0], 2])
    doc_y_unnorm_log[:, 0] = np.dot(doc_z1, pars_topass["phi1"].bigamma_data[:, docToken])
    doc_y_unnorm_log[:, 1] = np.dot(doc_z2, pars_topass["phi2"].bigamma_data[:, docToken])
    doc_y_unnorm_log += pars_topass["pi"].bigamma_data
    return probNormalizeLog(doc_y_unnorm_log)
Esempio n. 9
0
 def _partial_inference_y_update(self, doc_z2, doc_z1, pi_avg, phi2_avg, phi1_avg, docToken):
     doc_y_unnorm_log = np.zeros([docToken.shape[0], 2])
     doc_y_unnorm_log[:, 0] = np.dot(doc_z1, np.log(phi1_avg[:, docToken]))
     doc_y_unnorm_log[:, 1] = np.dot(doc_z2, np.log(phi2_avg[:, docToken]))
     doc_y_unnorm_log += np.log(pi_avg)
     return probNormalizeLog(doc_y_unnorm_log)