week24 Embedding与推荐系统

Embedding在推荐系统中的应用:

在推荐系统中,可以通过

Embedding

向量进行快速召回

向量化召回,通过模型来学习用户和物品的兴趣向量,并通过内积来计算用户和物品之间的相似性,从而得到最终的候选集(经典的Youtube召回模型)

收集数据:神经网络需要大量的训练样本;

数据处理:根据具体问题将数据按照embedding的场景标准进行处理训练

weights:建立embedding模型训练weights;

使用weights:使用Embedding weight进行recommendation和visualizations

推荐:通过内积计算用户与物品之间的相似度可视化,可以通过PCA进行可视化

向量化召回:

使用近似最近邻查找加速:

对于在线服务,有严格的性能要求(几十毫秒)。通过保存用户兴趣

embedding和视频兴趣embedding,通过最近邻搜索的方法得到

top N的结果代表算法是LSH,局部敏感Hash

在召回阶段,将所有的物品兴趣向量映射到不同的桶内,然后将用户兴趣向量映射到桶内,这样只需要将用户向量和这个桶内的物品向量求内积即可=>大大减小计算量

如果将视频库中的每一个视频当作一个类别,那么在时刻t,对于用户U和上下文C,用户会观看视频i的概率为u

是用户的embedding(网络最后一个Relu激活函数的输出)vi是视频i的embedding

输入层的embedding分别是用户空间和Video空间的向量,最终的输出层,通过

user embedding和全部video embedding矩阵进行点积(全联接层的线性变化),将两者转换到了同一空间,所以对于用户和视频来说,输出层的embedding

是同一空间(可以理解是兴趣空间,二者的内积代表相似性)

Faiss工具 

FAIR(Facebook AI Research)团队开发的AI相似性搜索工具,处理大规模d维向量近邻检索的问题 使用Faiss,Facebook 在十亿级数据集上创建的最邻近搜索(nearest neighbor search),速度提升了 8.5 倍 Faiss 只支持在 RAM 上搜索 Faiss 用 C++ 实现,支持 Python pip install faiss-cpu pip install faiss-gpu 

IndexIVFFlat: 

IndexFlatL2为暴力搜索,速度慢 IndexIVFFlat的目的是提供更快的搜索,首先将数据库向量通过聚类方法分割成若干子类,每个子类用类中心表示 IndexIVFFlat需要一个训练的阶段,与另外一个索引quantizer有关,通过quantizer来判断属于哪个cell 当进行查询向量计算时,选择距离最近的类中心,然后在子类中应用精确查询方法,通过增加相邻的子类个数提高索引的精确度 

nlist,将数据库向量分割为多少了维诺空间 

quantizer = faiss.IndexFlatL2(d) # 量化器 

index.nprobe,选择n个维诺空间进行索引 

通过改变nprobe的值,调节速度与精度 nprobe较小时,查询可能会出错,但时间开销很小 nprobe较大时,精度逐渐增大,但时间开销也增加 nprobe=nlist时,等效于IndexFlatL2索引类型。

猜你喜欢

转载自juejin.im/post/6998760534036185095