PaddleRec
PaddleRec copied to clipboard
FFM模型Field-aware二阶项部分问题
在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))
第一纬度-1等同于batch size,两个sparse_num_field,应该是为了适配公式中的计算