Reverse Maximum Inner Product Search
Contents
Summary of the paper "Reverse Maximum Inner Product Search: How to efficiently find users who would like to buy my item?" of Recsys 2021
TL;DL;
I modified proofs and procedures for more clear self-understanding.
Paper Link
https://arxiv.org/abs/2110.07131
Notations
- in (User vectors)
- in (Item vectors)
- : dot product between and .
Maximum Inner Product Search (MIPS)
Given a user , Find =
Reverse Inner Product Search (R-MIPS)
Given an item , Find a set of users such that
Main claim
with simple preprocessing, those three questions can be answered in constant time:
- Given query item is included in of the user
- Given query item is not included in of the user
- Given query item is not included in of all users of some (not any) set of users , or block .
Constructing Block
-
Perform Descending Sort according to their L2 norm. i.e., if .
-
appropriately partition user vectors . e.g., , then , and
-
define (it is easier to write in python here)
L_i = np.array(sorted(dot(u_i, P[:50, :]), ascending=False))
L(B) = np.min([L_i for u_i in B], axis=0)
is sorted values of dot products between user and item vectors with top- norms.
Claim 1. Given , if , then
proof: is dot product between and item such that is in top- ranking in norm. Thus cannot be higher than rank and dot product with is lower than dot product with . Thus cannot be in
Claim 2. Given , if , then
proof: Let to be a true top- item. holds. Thus must be in top- ranking
Claim 3. Given , a block and is a first vector in , , then for all
proof: . Then by Claim 1, it holds
Procedure
given item query vector q
ret = {}
for B in Blocks:
if we can skip block B using Claim 3:
continue;
for u in B:
if we can skip u using Claim 1:
continue
if u, q satisfy Claim 2:
ret.add(u)
else:
let TopK(u) using exhaustie search;
if q in TopK(u)
ret.add(u)
return ret
Note:
- We can parallelize easily along with Blocks.
- Worst Case bound is equal to Exhaustive Search
- No theoretical bound is given
느낀점:
- 생각해보면 쓰이는 수학/프로그래밍 테크 기술이 난이도가 고등학교때 기하와 벡터 배웠을 때 딱 그 정도만 쓰는 것 같은데 아이디어가 진짜 좋은 것 같다.
- 개선 여지가 많은 것 같다. 특히, Block Construction 부분에서, 블록 내부의 벡터들의 순서나, 블록 사이의 관계 측면에서 뭔가 개선할 여지가 있을 것 같은데 하는 생각. 아이디어를 일부로 약간만 풀고 세부적인 테크닉들은 공개 안 한 것 같다. 저자한테 메일을 보내봤는데 관심 가져줘서 고맙고 말 할 수 없는 것들은 말 할 수 없다는 상투적인 얘기를 들었음.
Comments