LSH가 고차원 특성을 가진 유사한 항목을 찾는 좋은 방법 인 것 같습니다.
http://www.slaney.org/malcolm/yahoo/Slaney2008-LSHTutorial.pdf 논문을 읽은 후에도 여전히 그 공식과 혼동됩니다.
누구나 쉬운 방법을 설명하는 블로그 나 기사를 알고 있습니까?
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 패밀리의 직관을 설명하려고 노력합니다.
파이썬에서 샘플 코드 (단 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의 구현이 다르다는 것을 강조하는 것이 중요합니다.
내 블로그에서 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