美文网首页
用L2距离做MIP、MCS排序

用L2距离做MIP、MCS排序

作者: MatrixOnEarth | 来源:发表于2020-09-11 16:28 被阅读0次

问题

MIP (Maximum Inner Product)

  • 输入
    • 查询向量(query): x \in \mathbb{R}^{d}
    • 底库(database): Y=\{y_1, y_2, ...,y_{i}\}, 其中y_{i} \in \mathbb{R}^{d}
  • 输出
    • 底库中与查询向量点积相似度最大的k个向量:
      x_k := \underset{i \in [1, n]}{arg \ maxk} <x, y_{i}>, k \in [1, K]

MCS (Maximum Cosine Similarity)

  • 输入
    • 查询向量(query): x \in \mathbb{R}^{d}
    • 底库(database): Y=\{y_1, y_2, ...,y_{i}\}, 其中y_{i} \in \mathbb{R}^{d}
  • 输出
    • 底库中与查询向量点积相似度最大的k个向量:
      x_k := \underset{i \in [1, n]}{arg \ maxk} \frac {<x, y_{i}>}{||x||*||y_i||}, k \in [1, K]

转换

MIP \to L2

通过保序变换(Ordering Preserving Transformation):
\phi \overset{\triangle}{=}\underset{i}{max\ } ||y_i||, 对每个查询向量x和库向量y_i分别作如下变换:
\begin{align*} &\tilde{y}_{i} = (y_i^T, \sqrt{\phi^2-||y_i||^2})^T \\ &\tilde{x} = (x^T, 0)^T \end{align*}
则,新的d+1维向量\tilde{x}\tilde{y_i}的L2距离与x, y_i的IP距离有如下关系:
\begin{align*}d^2 &= ||\tilde{x} - \tilde{y}_i||^2 \\ &= ||\tilde{x}||^2 + ||\tilde{y}_i||^2-2\tilde{x}*\tilde{y}_i \\ &= ||x||^2 + (||y_i||^2 + \phi^2 - ||y_i||^2) - 2x*y_i \\ &= ||x||^2 + \phi^2 - 2x*y_i\end{align*}
||x||^2\phi都与i无关,因此:
j = \underset{i}{argmin\ }\sqrt{||\tilde{x} - \tilde{y}_i||^2} = \underset{i}{argmax\ }x*y_i
d+1维向量\tilde{x}\tilde{y_i}的L2距离的升序排序与xy_i的IP距离的降序排列是一致的。

MCS \to L2

Cosine相似性是归一化后的IP距离:
\frac{x*y_i}{||x||* ||y_i||} \propto x * \frac{y_i}{||y_i||} 所以,可以先对y_i做一个归一化, 变成y'_i = \frac{y_i}{||y_i||}。后面,就把这个问题转换成了MIP, 可以用上面的MIP->L2的变换。特殊的是:此时\phi = 1。因此, 只需要做一个很简单的变换:
\begin{align*} &\tilde{y}_{i} = \frac{y_i}{||y_i||} \end{align*}
则,
\begin{align*}d^2 &= ||x - \tilde{y}_i||^2 \\ &= ||x||^2 + 1 - 2\frac{x*y_i}{||y_i||} \end{align*}
即:
j = \underset{i}{argmin\ }\sqrt{||x - \tilde{y}_i||^2} = \underset{i}{argmax\ }\frac{x*y_i}{||y_i||}
从上式可得,x\tilde{y_i}的L2距离的升序排列与x,、y_i的cosine相似性的降序排列是一致的。

实操适用

IVF Based Indexing, 使用方式:

  • 训练阶段不使用变换,召回阶段使用变换
    支持
    训练阶段还是使用IP或者cosine相似性构建索引, 召回阶段使用相应的变换L2距离召回。
  • 训练阶段、召回阶段都使用变换
    • MIP: 支持,但需要修改训练过程。需要注意:在训练阶段,质心是y,因此每一轮迭代算出新的质心后,需要先计算把所有质心按照上述的变换重新完整做一遍d维到d+1
    • MCS: 支持,但需要修改训练过程。需要注意:在训练阶段,质心是y,因此每一轮迭代算出新的质心后,需要先计算把所有质心重新做一遍归一化。

参考文献

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

相关文章

网友评论

      本文标题:用L2距离做MIP、MCS排序

      本文链接:https://www.haomeiwen.com/subject/pwlbektx.html