用L2 距离做MIP、MCS排序

姚伟峰
[yaoweifeng0301@126.com]
http://www.cnblogs.com/Matrix_Yao/

问题

MIP (Maximum Inner Product)

  • 输入

    • 查询向量(query): 用L2 距离做MIP、MCS排序

    • 底库(database): 用L2 距离做MIP、MCS排序, 其中用L2 距离做MIP、MCS排序

  • 输出

    • 底库中与查询向量点积相似度最大的k个向量:

      用L2 距离做MIP、MCS排序

       

MCS (Maximum Cosine Similarity)

  • 输入

    • 查询向量(query): 用L2 距离做MIP、MCS排序

    • 底库(database): 用L2 距离做MIP、MCS排序, 其中用L2 距离做MIP、MCS排序

  • 输出

    • 底库中与查询向量点积相似度最大的k个向量:

      用L2 距离做MIP、MCS排序

       

转换

MIP 用L2 距离做MIP、MCS排序 L2

通过保序变换(Ordering Preserving Transformation):
用L2 距离做MIP、MCS排序, 对每个查询向量用L2 距离做MIP、MCS排序和库向量用L2 距离做MIP、MCS排序分别作如下变换:

用L2 距离做MIP、MCS排序 则,新的用L2 距离做MIP、MCS排序维向量用L2 距离做MIP、MCS排序用L2 距离做MIP、MCS排序的L2距离与用L2 距离做MIP、MCS排序, 用L2 距离做MIP、MCS排序的IP距离有如下关系:
用L2 距离做MIP、MCS排序用L2 距离做MIP、MCS排序用L2 距离做MIP、MCS排序都与用L2 距离做MIP、MCS排序无关,因此:
用L2 距离做MIP、MCS排序用L2 距离做MIP、MCS排序维向量用L2 距离做MIP、MCS排序用L2 距离做MIP、MCS排序的L2距离的升序排序与用L2 距离做MIP、MCS排序用L2 距离做MIP、MCS排序的IP距离的降序排列是一致的。

 

MCS 用L2 距离做MIP、MCS排序 L2

Cosine相似性是归一化后的IP距离:

用L2 距离做MIP、MCS排序 所以,可以先对用L2 距离做MIP、MCS排序做一个归一化, 变成用L2 距离做MIP、MCS排序。后面,就把这个问题转换成了MIP, 可以用上面的MIP->L2的变换。特殊的是:此时用L2 距离做MIP、MCS排序。因此, 只需要做一个很简单的变换:
用L2 距离做MIP、MCS排序 则,
用L2 距离做MIP、MCS排序 即:
用L2 距离做MIP、MCS排序 从上式可得,用L2 距离做MIP、MCS排序用L2 距离做MIP、MCS排序的L2距离的升序排列与用L2 距离做MIP、MCS排序,、用L2 距离做MIP、MCS排序的cosine相似性的降序排列是一致的。

 

实操适用

IVF Based Indexing, 使用方式:

  • 训练阶段不使用变换,召回阶段使用变换
    支持
    训练阶段还是使用IP或者cosine相似性构建索引, 召回阶段使用相应的变换L2距离召回。

  • 训练阶段、召回阶段都使用变换

    • MIP: 支持,但需要修改训练过程。需要注意:在训练阶段,质心是用L2 距离做MIP、MCS排序,因此每一轮迭代算出新的质心后,需要先计算把所有质心按照上述的变换重新完整做一遍用L2 距离做MIP、MCS排序维到用L2 距离做MIP、MCS排序

    • MCS: 支持,但需要修改训练过程。需要注意:在训练阶段,质心是用L2 距离做MIP、MCS排序,因此每一轮迭代算出新的质心后,需要先计算把所有质心重新做一遍归一化。

参考文献

  1. Speeding Up the Xbox Recommender System Using a Euclidean Transformation for Inner-Product Spaces

<style></style>
上一篇:1.2(redis)5大数据结构


下一篇:网站漏洞检测对漏洞检测修复方案