지역에 민감한 해시 증폭


10

가능한 모든 쌍을 비교하지 않고도 비슷한 항목 쌍을 찾을 수 있도록 코사인 로컬 리티에 민감한 해시를 작성하려고합니다. 나는 기본적으로 작동하지만 내 데이터의 대부분의 쌍은 -0.2에서 +0.2 범위의 코사인 유사성을 가진 것처럼 보이므로 상당히 미세하게 주사위를 굴려 코사인 유사성이 0.1 이상인 것을 선택하려고합니다.

Mining Massive Datasets 3 장을 읽었습니다. 이것은 Locality-Sensitive Family를 증폭하여 후보 쌍 선택의 정확성을 높이는 것에 대해 이야기합니다. 나는 수학적 설명을 이해하려고 생각하지만 실제로 이것을 구현하는 방법을 고심하고 있습니다.

지금까지 내가 가진 것은 다음과 같습니다

  1. 나는 1M 사용자의 일부 선택의 등급이 각각 1000 영화를 말한다. 각 영화는 사용자 점수 (행 번호 = 사용자 ID, 값 = 사용자 점수)의 희소 벡터로 표시됩니다.
  2. N 개의 랜덤 벡터를 만듭니다. 벡터 길이는 영화 벡터의 길이 (예 : 사용자 수)와 일치합니다. 벡터 값은 +1 또는 -1입니다. 실제로 공간을 절약하기 위해이 벡터를 이진수로 인코딩하여 +1은 1에, -1은 0에 매핑합니다.
  3. 나는 영화와 각 N 개의 랜덤 벡터의 내적을 취하여 각 무비에 대한 스케치 벡터를 작성합니다 (또는 N 개의 랜덤 벡터를 수평으로 놓고 서로 겹쳐서 스케치하여 행렬 R을 만드는 경우 스케치 영화 m의 경우 R * m), 결과 벡터의 각 요소의 부호를 취하므로 +1과 -1의 각 영화에 대한 스케치 벡터로 끝나고 다시 이진으로 인코딩합니다. 각각의 벡터는 길이 N 비트이다.
  4. 다음으로 다음을 수행하여 비슷한 스케치를 찾습니다.
    1. 스케치 벡터를 r 비트의 b 밴드로 나눕니다.
    2. r 비트의 각 밴드는 숫자입니다. 그 번호를 밴드 번호와 결합하고 영화를 그 번호 아래의 해시 버킷에 추가합니다. 각 영화는 둘 이상의 버킷에 추가 할 수 있습니다.
    3. 그런 다음 각 버킷을 살펴 봅니다. 동일한 버킷에있는 모든 영화는 후보 쌍입니다.

이것을 3.6.3 mmds와 비교하면 AND 단계는 r 비트의 밴드를 볼 때입니다. r 비트의 값이 같은 경우 영화 쌍이 AND 단계를 통과합니다. 내 OR 단계는 버킷에서 발생합니다. 영화가 버킷에 모두 있으면 영화는 후보 쌍입니다.

이 책에서는 AND 및 OR 단계를 더 추가하여 결과를 "증폭"할 수 있다고 제안하지만, 추가 레이어의 구성 프로세스에 대한 설명이 쌍별 평등을 확인하는 것이 아니라 실제로이를 수행하는 방법에 대한 손실이 있습니다. 버킷 번호가 나타납니다.

아무도 내가 이것을하는 방법을 이해하도록 도울 수 있습니까?

답변:


4

나는 무언가를 해결했다고 생각합니다. 기본적으로 나는 맵 / 축소 유형 환경에서 작동하는 접근법을 찾고 있는데이 접근법이 그렇게 생각합니다.

그래서,

  • r 행의 b 밴드가 있고 다른 AND 스테이지를 추가하고 싶다고 가정 해보십시오. 다른 c AND라고 말하십시오.
  • 따라서 b * r 비트 대신 b * r * c 비트의 해시가 필요합니다.
  • 그리고 b * r 비트마다 매번 이전 절차를 c 번 실행합니다.
  • 이러한 절차 중 하나에 의해 x와 y가 후보 쌍인 것으로 확인되면 ID의 튜플 (x, y)과 키 1을 함께 사용하여 키 값 쌍 ((x, y), 1)을 방출합니다.
  • c 절차가 끝나면 키와 합계 로이 쌍을 그룹화합니다.
  • c와 같은 합을 갖는 임의의 쌍 (x, y)은 각각의 c 라운드에서 후보 쌍이고, 전체 절차의 후보 쌍도 마찬가지이다.

이제는 실행 가능한 솔루션이 있으며, 3 단계를 사용하면 실제로 전체 해시 비트가 적거나 전체 성능이 향상되어 더 나은 결과를 얻는 데 도움이되는지 여부를 해결하는 것입니다 ...


0

방금 댓글을 달았지만 할 수 없습니다. 나는 LSH에서 증폭의 실질적인 치료법을 찾고 있었고 당신이 제시 한 것은 많은 의미가 있습니다. 내가 수집 한 것에서 기본 해시 함수는

h(x,v)={0if sgn(xv)<01else
임의의 벡터에 대해 vAND가 된 후 h(x,i)=(h(x,vi+1),...,h(x,vi+r))마지막으로 수술 후 h(x,j)=f(h(x,rj),j)또는이제 설명대로 를 사용하여 AND / 또는 할 수 있습니다 . 그런 다음 AND / OR 논리 문을 기반으로 후보를 선택하면됩니다. 당신은 더 이상 해싱하지 않습니다. 이 시점에서 해싱을 계속하려면 각 벡터가 한 번만 나타나도록 bin의 매핑이 필요 하지만 그렇게하면 오 탐지 및 / 또는 오 탐지가 발생할 수 있습니다. 부정. 해시에 대한 한 가지 아이디어는 최소
h(x,y)={1if h(x,j)=h(y,j) for any j[0,b)0else
h(x,y)h^:SSSh(x,j)jjy). 둘 다 분명히 편견을 도입 할 것입니다. 다음 중 하나의 임의의 AND 및 / 또는 해시가 의미가 있는지는 확실하지 않지만 이것 중 하나를 시도해 볼 수 있습니다. 그러나 임의의 와 많은 수의 복제 가 균일하게 분포되어 있다는 것을 고려할 수 있습니다.v
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.