[c] 지역 민감 해싱을 이해하는 방법?

LSH가 고차원 특성을 가진 유사한 항목을 찾는 좋은 방법 인 것 같습니다.

http://www.slaney.org/malcolm/yahoo/Slaney2008-LSHTutorial.pdf 논문을 읽은 후에도 여전히 그 공식과 혼동됩니다.

누구나 쉬운 방법을 설명하는 블로그 나 기사를 알고 있습니까?



답변

내가 LSH에 대해 본 최고의 튜토리얼은 대규모 데이터 세트 마이닝 책에 있습니다. 3 장-유사 항목 찾기
http://infolab.stanford.edu/~ullman/mmds/ch3a.pdf

또한 아래 슬라이드를 추천합니다 :
http://www.cs.jhu.edu/%7Evandurme/papers/VanDurmeLallACL10-slides.pdf . 슬라이드의 예제는 코사인 유사성에 대한 해싱을 이해하는 데 많은 도움이됩니다.

ACL2010 Benjamin Van Durme & Ashwin Lall 에서 2 개의 슬라이드를 빌려서 코사인 거리에 대한 LSH 패밀리의 직관을 설명하려고 노력합니다.
여기에 이미지 설명을 입력하십시오

  • 그림에서 2 개의 2 차원 데이터 포인트를 나타내는 빨간색노란색의 두 개의 원이 있습니다 . LSH를 사용하여 코사인 유사성 을 찾으려고합니다 .
  • 회색 선은 균일하게 무작위로 선택된 평면입니다.
  • 데이터 포인트가 회색 선 위 또는 아래에 있는지 여부에 따라이 관계를 0/1로 표시합니다.
  • 왼쪽 위 모서리에는 두 개의 데이터 점의 서명을 나타내는 두 개의 흰색 / 검정색 사각형 행이 있습니다. 각 사각형은 비트 0 (흰색) 또는 1 (검정)에 해당합니다.
  • 따라서 평면 풀이 있으면 평면에 해당하는 위치로 데이터 포인트를 인코딩 할 수 있습니다. 풀에 더 많은 평면이있을 때 서명에 ​​인코딩 된 각도 차이가 실제 차이에 더 가깝다고 상상해보십시오. 두 점 사이에있는 평면 만 두 데이터에 다른 비트 값을 제공하기 때문입니다.

여기에 이미지 설명을 입력하십시오

  • 이제 우리는 두 데이터 포인트의 서명을 살펴 봅니다. 예에서와 같이 각 데이터를 나타내는 데 6 비트 (제곱) 만 사용합니다. 이것이 우리가 가지고있는 원본 데이터의 LSH 해시입니다.
  • 서명이 1 비트 만 다르기 때문에 두 해시 값 사이의 해밍 거리는 1입니다.
  • 서명의 길이를 고려하여 그래프에 표시된 것처럼 각 유사성을 계산할 수 있습니다.

파이썬에서 샘플 코드 (단 50 줄)가 있는데 코사인 유사성을 사용합니다.
https://gist.github.com/94a3d425009be0f94751


답변

벡터 공간의 트윗은 고차원 데이터의 좋은 예가 될 수 있습니다.

Locality Sensitive Hashing을 트윗에 적용하여 비슷한 것을 찾는 블로그 게시물을 확인하십시오.

http://micvog.com/2013/09/08/storm-first-story-detection/

그리고 한 장의 그림이 천 단어이므로 아래 그림을 확인하십시오.

여기에 이미지 설명을 입력하십시오
http://micvog.files.wordpress.com/2013/08/lsh1.png

도움이 되길 바랍니다. @mvogiatzis


답변

다음은 Stanford의 프레젠테이션입니다. 그것은 나를 위해 큰 차이를 만들었습니다. 2 부에서는 LSH에 대해 자세히 설명하지만 1 부에서도 다루고 있습니다.

개요 그림 (슬라이드에는 훨씬 더 있음) :

여기에 이미지 설명을 입력하십시오

고차원 데이터에서 인접 항목 검색-1 부 :
http://www.stanford.edu/class/cs345a/slides/04-highdim.pdf

고차원 데이터에서 인접 항목 검색-2 부 :
http://www.stanford.edu/class/cs345a/slides/05-LSH.pdf


답변

  • LSH는 일련의 문서 / 이미지 / 객체를 입력하고 일종의 해시 테이블을 출력하는 절차입니다.
  • 이 테이블의 색인에는 동일한 색인에있는 문서가 유사한 것으로 간주 되고 다른 색인에있는 문서가 ” 유사하지 않은 “문서가 들어 있습니다.
  • 어디 유사한 미터법에 따라 달라지며 또한 임계 값 유사성에 LSH의 글로벌 매개 변수와 같은 역할을합니다.
  • 그것은 어떤 적절한 임계 값을 정의하는 당신에게 달려 이야 문제입니다.

여기에 이미지 설명을 입력하십시오

서로 다른 유사성 측정법이 LSH의 구현이 다르다는 것을 강조하는 것이 중요합니다.

내 블로그에서 minHashing (jaccard similarity measure) 및 simHashing (cosine distance measure)의 경우 LSH를 철저히 설명하려고했습니다. https://aerodatablog.wordpress.com/2017/11/29/locality-sensitive-hashing-lsh/가 도움이 되었기를
바랍니다.


답변

나는 시각적 인 사람입니다. 다음은 직감으로 나를 위해 일하는 것입니다.

검색하고자하는 각각의 물건이 사과, 큐브, 의자와 같은 물리적 인 물체라고 가정하십시오.

LSH에 대한 나의 직감은 이러한 물체의 그림자를 취하는 것과 비슷하다는 것입니다. 3D 큐브의 그림자를 사용하는 것처럼 한 장의 종이에 2D 정사각형 모양이 생기거나 3D 구가 있으면 한 장의 종이에 원형 모양의 그림자가 생깁니다.

결국 검색 문제에는 텍스트의 각 단어가 1 차원 일 수있는 3 차원 이상의 차원이 있지만 그림자 비유는 여전히 나에게 매우 유용합니다.

이제 소프트웨어에서 비트 열을 효율적으로 비교할 수 있습니다. 고정 길이 비트 문자열은 단일 차원의 선과 다소 비슷합니다.

따라서 LSH를 사용하여 객체의 그림자를 단일 고정 길이 라인 / 비트 문자열에서 점 (0 또는 1)으로 투영합니다.

전체 트릭은 그림자가 더 낮은 차원에서 여전히 이해되도록 그림자를 취하는 것입니다.

원근감있는 큐브의 2D 도면은 이것이 큐브라는 것을 알려줍니다. 그러나 나는 원근감없이 3D 큐브 그림자와 2D 사각형을 쉽게 구별 할 수 없습니다. 둘 다 사각형처럼 보입니다.

물체를 빛에 비추는 방법은 내가 알아볼 수있는 그림자가 좋은지 아닌지를 결정합니다. 그래서 저는 “좋은”LSH를 그림자 앞에서 내 물체를 나타내는 것으로 가장 잘 인식 할 수 있도록 빛 앞에서 내 물체를 돌리는 것으로 생각합니다.

요약하자면, 큐브, 테이블 또는 의자와 같은 물리적 개체로 LSH를 사용하여 색인을 생성하는 것을 생각하고 그림자를 2D로 투영하고 결국 선 (비트 문자열)을 따라 투영합니다. 그리고 “좋은”LSH “함수”는 2D 평평한 땅과 나중에 내 비트 열에서 대략 구별 가능한 모양을 얻기 위해 빛 앞에서 물체를 표현하는 방법입니다.

마지막으로 내가 가지고있는 개체가 색인을 생성 한 일부 개체와 유사한 지 검색하고 싶을 때 같은 방법으로이 “쿼리”개체의 그림자를 사용하여 개체를 조명 앞에 표시합니다 (결국 약간 비트로 끝남) 문자열도). 이제 객체를 조명에 표시하는 좋고 인식 가능한 방법을 찾았다면 전체 문자열을 검색하는 프록시 인 다른 모든 인덱스 비트 문자열과 비트 문자열이 얼마나 유사한 지 비교할 수 있습니다.


답변

매우 짧은 tldr 답변 :

로컬 리티에 민감한 해싱의 예는 먼저 입력 공간에서 평면을 임의로 (회전 및 오프셋과 함께) 해시로 설정 한 다음 포인트를 해시로 드롭하고 각 평면에 대해 포인트가 위 또는 아래 (예 : 0 또는 1)이며 대답은 해시입니다. 따라서 공간에서 비슷한 점은 전후의 코사인 거리로 측정하면 유사한 해시를 갖습니다.

scikit-learn을 사용 하여이 예제를 읽을 수 있습니다 : https://github.com/guillaume-chevalier/SGNN-Self-Governing-Neural-Networks-Projection-Layer


답변