PaddleRec icon indicating copy to clipboard operation
PaddleRec copied to clipboard

FFM模型Field-aware二阶项部分问题

Open kj-wu opened this issue 2 years ago • 1 comments

在FFM模型net.py文件中,FFM实现的Field-aware二阶项部分field_aware_feat_embedding的shape是[-1,sparse_num_field,sparse_num_field,sparse_feature_dim],如果按照FFM算法应该是[-1,sparse_feature_number,sparse_num_field,sparse_feature_dim]吧,请问这里为什么是两个sparse_num_field呢?

        # -------------------Field-aware second order term  --------------------
        sparse_embeddings = self.embedding(sparse_inputs_concat)
        dense_inputs_re = paddle.unsqueeze(dense_inputs, axis=2)
        dense_embeddings = paddle.multiply(dense_inputs_re, self.dense_w)
        feat_embeddings = paddle.concat([sparse_embeddings, dense_embeddings],
                                        1)
        field_aware_feat_embedding = paddle.reshape(
            feat_embeddings,
            shape=[
                -1, self.sparse_num_field, self.sparse_num_field,
                self.sparse_feature_dim
            ])
        field_aware_interaction_list = []
        for i in range(self.sparse_num_field):
            for j in range(i + 1, self.sparse_num_field):
                field_aware_interaction_list.append(
                    paddle.sum(field_aware_feat_embedding[:, i, j, :] *
                               field_aware_feat_embedding[:, j, i, :],
                               1,
                               keepdim=True))

kj-wu avatar Feb 10 '23 04:02 kj-wu

第一纬度-1等同于batch size,两个sparse_num_field,应该是为了适配公式中的计算

wangzhen38 avatar Feb 13 '23 02:02 wangzhen38