MiniOneRec icon indicating copy to clipboard operation
MiniOneRec copied to clipboard

SID的discussion

Open zkyntu opened this issue 5 months ago • 12 comments

1、作者您好,感谢您对开源社区作出的贡献。有个问题想请教您一下:当一个SID对应很多个item(当然是由于SID可能效果不太好),那有啥好办法能避免或者缓解这个冲突吗?Tiger中是加入了最后一个位置索引,但我认为当重复数量较高时是不实用的,谢谢~

zkyntu avatar Oct 30 '25 09:10 zkyntu

OneSearch use RQ-OPQ to generate 2 more id to improve ICR

cocoshe avatar Oct 30 '25 16:10 cocoshe

是不是可以尝试把语义ID的token数量整多点,比如现在是3层,我弄到8层,16层,甚至64层,这样发生碰撞的概率直观上来说就小了。

user683 avatar Oct 30 '25 17:10 user683

当欲分配的SID已经被占用时,可以找最近邻的SID代替,我看有个文章是这么做的Purely Semantic Indexing for LLM-based Generative Recommendation and Retrieval

jbdcia321vw avatar Oct 31 '25 03:10 jbdcia321vw

1、作者您好,感谢您对开源社区作出的贡献。有个问题想请教您一下:当一个SID对应很多个item(当然是由于SID可能效果不太好),那有啥好办法能避免或者缓解这个冲突吗?Tiger中是加入了最后一个位置索引,但我认为当重复数量较高时是不实用的,谢谢~

In our current RQ-VAE, we use a Sinkhorn-based uniform semantic mapping. We will soon release more advanced SID generation methods, including RQ-Kmeans and RQ-OPQ.

AkaliKong avatar Oct 31 '25 09:10 AkaliKong

个人认为,单个SID的聚合最大簇不高的时候,并不太需要关注这个问题,交给后续的步骤就好(例如精排,混排,或其他的打分策略),直接用递增ID也是一个可用的策略。

TankNee avatar Nov 02 '25 12:11 TankNee

1、作者您好,感谢您对开源社区作出的贡献。有个问题想请教您一下:当一个SID对应很多个item(当然是由于SID可能效果不太好),那有啥好办法能避免或者缓解这个冲突吗?Tiger中是加入了最后一个位置索引,但我认为当重复数量较高时是不实用的,谢谢~

SID冲突这块可以关注我们的新工作FORGE,使用KNN 以及 Random based的方式来缓解了语义ID的冲突,伴随着其他的SID优化已经通过大量离线实验(基于从淘宝采样的十天数据集 -> 140亿交互,15%Hit Rate提升)和在线AB验证(增加0.35%总交易数量),相关方案已经在淘宝召回场景推全。同时我们也公开了相关实验代码淘宝的真实工业界数据(140亿真实交互,比现有最大数据集大近一百倍)

fukairui avatar Nov 04 '25 07:11 fukairui

当欲分配的SID已经被占用时,可以找最近邻的SID代替,我看有个文章是这么做的Purely Semantic Indexing for LLM-based Generative Recommendation and Retrieval

其实这样的情况下,随机分配的方法比最近邻的方式好(大规模数据验证过之后),并且时间复杂度会小很多

fukairui avatar Nov 04 '25 07:11 fukairui

当欲分配的SID已经被占用时,可以找最近邻的SID代替,我看有个文章是这么做的Purely Semantic Indexing for LLM-based Generative Recommendation and Retrieval

其实这样的情况下,随机分配的方法比最近邻的方式好(大规模数据验证过之后),并且时间复杂度会小很多

想请教一下,随机分配的方法,分配到的新SID,还具有semantic吗?体感上像是随便给他分配到一个类目下

cocoshe avatar Nov 04 '25 07:11 cocoshe

当欲分配的SID已经被占用时,可以找最近邻的SID代替,我看有个文章是这么做的Purely Semantic Indexing for LLM-based Generative Recommendation and Retrieval

其实这样的情况下,随机分配的方法比最近邻的方式好(大规模数据验证过之后),并且时间复杂度会小很多

想请教一下,随机分配的方法,分配到的新SID,还具有semantic吗?体感上像是随便给他分配到一个类目下

最后一层随机就可以,最简单的例子是淘宝这边(码本大小是三层,每一层是8192)很多店铺会卖苹果手机,导致这些苹果手机对应的SID很可能都是一样的(比如$<C_1 1248>C_2 6475><C_3 1>$可能挂载了一千个苹果手机),然后一部分SID就没有被利用(比如$<C_1 1248>C_2 6475><C_3 2>$)。我们的方法只会在第三层随机打散,例如第二个$<C_1 1248>C_2 6475>$的商品进来第三层编码就会被分到$<C_3 2>$(假设$<C_3 1>$是第三层的第一个编码且已经被使用)。可以看到论文当中Random的方式比KNN的效果更好(我们给出的解释是这样的话SID的精度会更高,均匀性更好,在RQ这样残差的方式下第三层还剩下的语义信息不如精度更重要),并且方案复杂度小很多。

Image

fukairui avatar Nov 04 '25 07:11 fukairui

@fukairui 牛,学习一下

zkyntu avatar Nov 04 '25 07:11 zkyntu

@fukairui 打散的代码在哪里可以找到

zkyntu avatar Nov 04 '25 07:11 zkyntu

@fukairui 打散的代码在哪里可以找到

https://github.com/selous123/al_sid/blob/main/SID_generation/ID_collision.sql

用sql写的,因为上亿的商品pandas处理起来很慢,所以内部用的是数据库集群来处理(如果想转换为pandas,可以参考来修改,逻辑比较简单的)

fukairui avatar Nov 04 '25 07:11 fukairui

@fukairui 感谢分享!

请教一个问题,这种随机打散的方式会不会对于生成式推荐的 quality 有一些影响?我理解这种方法能够帮助降低 ID collpase, 但是不可避免的破坏了最后一层的 sematnic 结构,在训练的时候会不会导致模型学习到 conflict 的信息,影响最后生成的 quality?

或者另外一个思路是,如果数据量够大,那么这个最后一层的 codebook id 其实就是起到了一个和传统推荐系统里面用到的 hased sparse id 的作用,通过大数据训练让模型 memory 一部分物品信息

pyemma avatar Dec 11 '25 17:12 pyemma