def hybrid_forward(self, F, words1, words2, words3, weight):  
words123 = F.concat(words1, words2, words3, dim=<NUM_LIT:0>)<EOL>embeddings_words123 = F.Embedding(words123, weight,<EOL>input_dim=self._vocab_size,<EOL>output_dim=self._embed_size)<EOL>similarities = F.FullyConnected(<EOL>embeddings_words123, weight, no_bias=True,<EOL>num_hidden=self._vocab_size, flatten=False)<EOL>similarities = (similarities + <NUM_LIT:1>) / <NUM_LIT:2><EOL>sim_w1w4, sim_w2w4, sim_w3w4 = F.split(similarities, num_outputs=<NUM_LIT:3>,<EOL>axis=<NUM_LIT:0>)<EOL>sim = (sim_w2w4 * sim_w3w4) / (sim_w1w4 + self.eps)<EOL>if self._exclude_question_words:<EOL><INDENT>for words in [words1, words2, words3]:<EOL><INDENT>sim = sim * F.one_hot(words, self.weight.shape[<NUM_LIT:0>], <NUM_LIT:0>, <NUM_LIT:1>)<EOL><DEDENT><DEDENT>pred_idxs = F.topk(sim, k=self.k)<EOL>return pred_idxs<EOL>
Compute ThreeCosMul for given question words.

        Parameters
        ----------
        words1 : Symbol or NDArray
            Question words at first position. Shape (batch_size, )
        words2 : Symbol or NDArray
            Question words at second position. Shape (batch_size, )
        words3 : Symbol or NDArray
            Question words at third position. Shape (batch_size, )

        Returns
        -------
        Symbol or NDArray
            Predicted answer words. Shape (batch_size, k).