Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

关于DeepFM模型 #2

Open
simpleDgq opened this issue Mar 3, 2018 · 17 comments
Open

关于DeepFM模型 #2

simpleDgq opened this issue Mar 3, 2018 · 17 comments

Comments

@simpleDgq
Copy link

simpleDgq commented Mar 3, 2018

你好,我在fork你的代码之后,运行main.py文件,报如下错误,
image
缺少**./data/category_emb.csv**这个文件,我想问这个文件我应该怎么生成啊?
谢谢。

已经更新

@nzc
Copy link
Owner

nzc commented Mar 3, 2018

已经push了

@simpleDgq
Copy link
Author

image
data文件夹下面没有。

@nzc
Copy link
Owner

nzc commented Mar 3, 2018

可以了

@simpleDgq
Copy link
Author

非常感谢,跑起来了。
image

@simpleDgq
Copy link
Author

你好,tiny_train_input.csv不是criteo数据集吧?我想使用criteo数据集跑DeepFM,对于criteo应该怎么处理成如下格式啊:
image
谢谢。

@nzc
Copy link
Owner

nzc commented Mar 6, 2018

tiny_train_input.csv 是criteo数据集的一个sample,我主要是利用了criteo 冠军队伍的特征工程方法生成的,但是没有包含他们的gbdt的叶子节点特征。所以只有39维。 利用他们的脚本生成libsvm格式的样本,再调用我的数据处理脚本里面的函数就可以了。当然 你可以有其他的特征工程方法,只要对应的数据的格式如我给的那样的格式就可以了

@simpleDgq
Copy link
Author

你好,我使用你说的criteo 冠军队伍的脚本生成了tr.ffm和te.ffm文件,在生成category_emb.csv的时候,我使用的是如下图所示的方法,对于tr.ffm和te.ffm分别生成了对应的category_emb文件,然后分别使用对应的category_emb文件生成训练集和测试集。
image
为什么你上传的category_emb.csv只有一个,而不是训练集和测试集分别对应一个category_emb啊?是不是我哪里弄错了?

@nzc
Copy link
Owner

nzc commented Mar 9, 2018

你可以尝试将训练集和测试集合并生成一个category_emb.csv 其实训练集和测试集的编码应该是要求一致的。如果不一致,那特征都是错误的。。。结果怎么会好?。。。

@simpleDgq
Copy link
Author

非常感谢你的解答,我尝试将tr.ffm和te.ffm合并成为了一个文件(使用的是cat tr.ffm te.ffm > data.ffm),然后使用data.ffm生成了category_emb.csv。现在成功跑起来了。接下来认真研究一下你的代码,还有许多地方不是很懂。
再次感谢。

@Eaphan
Copy link

Eaphan commented Mar 13, 2018

你好,在冠军的解决方案中他将数值类型的变量也进行了hash,然后处理方式和类别相同,也进行embedding,请问这样做的意义是啥?我觉得这样丢失了本来的相对大小信息。 @nzc @CarlosDGQ

@simpleDgq
Copy link
Author

说一下我的看法,数据集中有13个数值类型的特征(都为int类型),26个categorical特征。在连续特征和categorical特征之间我觉得是不存在相对大小信息的,因为categorical可能是ip、userId等hash之后生成的,(ip类似的信息和连续值特征没有相对大小信息吧)但是具体数据集描述文件也没有给出,我们并不知道每个字段的意义。对于数值类型的特征相对大小在hash之后,在求出其整数表示,相对大小的信息应该没有发生丢失。代码中对大于2的连续特征进行了取对数,对于小于2的特征和大于2的特征可能会存在一定的相对大小信息的丢失,但是也比较小。欢迎讨论。

@Eaphan
Copy link

Eaphan commented Mar 14, 2018

@CarlosDGQ
我的意思就是这个特征本身的相对大小,特征之间当然比较大小没意义。但是那13个数值类型的变量大部分是count意义,通过hash变换的是带‘SP'和数值的字符串,这样转换value = 'SP'+str(value),hash没有保证原来的相对大小。另外加个好友吧,共同学习:)我qq是18324分割0719.

@nzc
Copy link
Owner

nzc commented Mar 14, 2018

在CTR预估场景中,一般连续值特征最后也是需要离散化的。连续值特征的处理方式要根据分布会有不同的处理方法。感觉冠军队伍是分析过的,所以才采用了那样的特征处理方法。至于信息损失,其实个人感觉还好。连续值特征的信息损失一般来源于分桶的时候,因为冠军队伍后面用了gbdt,所以两者结合的话,感觉信息损失不会太大。

@TaylorWPY
Copy link

@CarlosDGQ 你好,我想问你一下tr.ffm和te.ffm文件是怎么生成的

@simpleDgq
Copy link
Author

@TaylorWPY 你好,我是直接使用https://github.com/guestwalk/kaggle-2014-criteo脚本生成的。按照作者GitHub上的步骤生成就可以了。
image

@aa147138
Copy link

@CarlosDGQ @TaylorWPY 您好,我用了https://github.com/guestwalk/kaggle-2014-criteo脚本生成的tr.ffm文件的时候执行到cmd = 'python converters/parallelizer-a.py -s {nr_thread} python converters/pre-a.py tr.csv tr.gbdt.dense tr.gbdt.sparse'.format(nr_thread=NR_THREAD)
subprocess.call(cmd, shell=True)这一句的时候 ,为什么会出现parallelizer-a.py: error: unrecognized arguments: tr.gbdt.sparse 这种错误呢,是不是少了什么步骤?

@wangdazi
Copy link

你好,我想请教一下deepfm的输入可以是评论文本表示的user,item特征吗?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants