PaddleRec icon indicating copy to clipboard operation
PaddleRec copied to clipboard

关于DeepFM模型的Embedding层问题

Open Mr-maoge opened this issue 4 years ago • 5 comments

请教下deepfm/net.py里的FM layer里为何只总共只有一个embedding layer(self.embedding)?
实际上对于不同的categorical feature应该是各有一个不同的embedding层。不同特征共享同一个embedding层是没有意义也行不通的吧。 另外,即使在FM框架下,各个embedding的embedding_dim(嵌入向量维度)是相同的,num_embeddings( 嵌入字典的大小)也可能是不同的,但模型__init__部分并没有对各个特征分别输入num_embeddings,可能可以用,但感觉是有些问题的吧。

不知是否理解有误,期待解答。

Mr-maoge avatar Aug 02 '21 03:08 Mr-maoge

参考某pytorch版本实现里的embedding层计算 image

Mr-maoge avatar Aug 02 '21 03:08 Mr-maoge

我在看wide&deep实现的时候也存在这种情况,求官方解答一下。

rogeroyer avatar Aug 03 '21 03:08 rogeroyer

deepfm中的FM layer有self.embedding_one和self.embedding两个embedding layer。在这里我们在__init__部分直接使用超参数定义了num_embeddings,不需要如pytorch实现时一个个append。

yinhaofeng avatar Aug 05 '21 02:08 yinhaofeng

wide&deep在实现时关于embedding的问题您是否想表达如这个issue所示:https://github.com/PaddlePaddle/PaddleRec/issues/470

yinhaofeng avatar Aug 05 '21 02:08 yinhaofeng

明白了,就是把所有离散特征的id映射到一个字典,不同离散特征做好区分就好了,谢谢解答~

rogeroyer avatar Aug 07 '21 04:08 rogeroyer