推荐或是分类结果的scores如何快速倒排?

hi各位好,这是我节前倒数第2天搬砖了,明晚下班回家种地,村里没网,有事托梦。此文粉丝可见。

For Video Recommendation in Deep learning QQ Group 277356808

视频推荐深度学习加这个群

For Visual in deep learning QQ Group 629530787

视觉深度学习加这个,别加错

I'm here waiting for you

别加那么多,没必要,另外,不接受这个网页的私聊/私信!!!

问题来源于SR-GNN及GCN/LightGCN推理阶段,因为都有倒排,所以发现这么费时间,如下是gcn的结果,argsort直接占据绝大部分时间,令人震惊。

scores是对logits进行softmax后得到的数据,具有概率统计意义。其位置对应原始训练数据的item的index,很重要。

Training @ 2020-09-27 15:55:16.803590s
Epoch 1 [233.7s]: train==[0.08872=0.08755 + 0.00117]
Epoch 2 [188.3s]: train==[0.03362=0.03155 + 0.00207]
total time 39.851719, index time 0.000062, infer time 5.787474, argsort time 34.064183
total time 34.311058, index time 0.000055, infer time 0.189518, argsort time 34.121484
total time 34.390062, index time 0.000154, infer time 0.200301, argsort time 34.189607
total time 34.185163, index time 0.000160, infer time 0.199994, argsort time 33.985008
total time 34.261133, index time 0.000160, infer time 0.198627, argsort time 34.062345
total time 34.284593, index time 0.000145, infer time 0.198629, argsort time 34.085819
total time 34.628721, index time 0.000156, infer time 0.408642, argsort time 34.219923
total time 34.145094, index time 0.000148, infer time 0.200222, argsort time 33.944725
total time 34.221904, index time 0.000155, infer time 0.200848, argsort time 34.020901
total time 34.250089, index time 0.000149, infer time 0.199473, argsort time 34.050466
total time 34.341677, index time 0.000169, infer time 0.199252, argsort time 34.142257
total time 34.287936, index time 0.000166, infer time 0.203205, argsort time 34.084565
total time 34.152117, index time 0.000148, infer time 0.200518, argsort time 33.951451

 batch_size=10240,增加或减少都不行,最后的倒排都占据绝大部分时间,那么问题来了,有没有快速的倒排方法?

啥?你又说算法的基本东西,N种排序方法,快排,插排,堆排,冒牌。。。这是我之前背过的C版本,没个卵用???

我试试快排,是否速度要快于np.argsort,拭目以待吧

随机生成一个(10240,38853)shape的数组,对每行进行快排(倒排也可),如下:有在1s内结束的可指导下我

顺便把进程和线程也考虑在内,这样可以快点吧

1-快排仅仅是对数组排序,而并没有记录其原始顺序,想要记录原始顺序,寡人想到了一个方法,那就是字典(如果是有相同的数据的话,也可采用有序字典【胡诌的】,反正影响不大吧,应该不会有完全相同的数吧,都是一样怎么可能呢?请大佬证明(或证伪)下);

ktest=np.random.randn(12)
print(ktest)
qsort(ktest,0,11)
print(ktest)
>>> inds=[kdict[k] for k in ktest]
>>> inds
[11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

这是字典的for方法,有没有快速的方法呢?请大佬指点下。

电脑卡死了,宣告失败,服务器过了7min也没反应,失败。电脑每行进行快排的时间需要0.4s,这也不快啊。咋整啊

同事大佬说了个库,我简单试了下不太好实现自己写的函数用cuda加速,于是提issue吧

咋整啊??线程根本也是没屁用哦。

2-其他排序也是不行啊,根本没有头绪,咋整啊,回家种地也会想着这事了。

有没有大佬有其他方法啊?

3-后面等那个库开发好了再补充吧

 

 

 

 

你可能感兴趣的:(Recommendation,GCN,LightGCN,SR-GNN,推荐召回,倒排)