Làm thế nào để hiểu địa phương nhạy cảm băm?


156

Tôi nhận thấy rằng LSH có vẻ là một cách tốt để tìm các mặt hàng tương tự với các thuộc tính kích thước cao.

Sau khi đọc bài viết http://www.slaney.org/malcolm/yahoo/Slaney2008-LSHTutorial.pdf , tôi vẫn còn bối rối với những công thức đó.

Có ai biết một blog hoặc bài viết giải thích rằng cách dễ dàng?


3
Đọc Ullman Chương 3 - "TÌM MỤC SIMILAR
achini 15/11/13

Câu trả lời:


250

Hướng dẫn tốt nhất tôi đã thấy cho LSH là trong cuốn sách: Mining of Massive Datasets. Kiểm tra Chương 3 - Tìm các mục tương tự http://infolab.stanford.edu/~ullman/mmds/ch3a.pdf

Ngoài ra tôi khuyên dùng slide dưới đây: http://www.cs.jhu.edu/%7Evandurme/ con / VanDurmeLallACL10-slides.pdf . Ví dụ trong slide giúp tôi rất nhiều trong việc hiểu băm cho sự tương tự cosin.

Tôi mượn hai slide từ Benjamin Van Durme & Ashwin Lall, ACL2010 và cố gắng giải thích trực giác của các gia đình LSH cho Cosine Khoảng cách một chút. nhập mô tả hình ảnh ở đây

  • Trong hình, có hai vòng tròn w / đỏvàng , đại diện cho hai điểm dữ liệu hai chiều. Chúng tôi đang cố gắng tìm sự tương đồng cosin của họ bằng LSH.
  • Các đường màu xám là một số mặt phẳng được chọn ngẫu nhiên.
  • Tùy thuộc vào điểm dữ liệu nằm trên hoặc dưới một đường màu xám, chúng tôi đánh dấu mối quan hệ này là 0/1.
  • Ở góc trên bên trái, có hai hàng hình vuông màu trắng / đen, tương ứng với chữ ký của hai điểm dữ liệu. Mỗi ô vuông tương ứng với một bit 0 (trắng) hoặc 1 (đen).
  • Vì vậy, một khi bạn có một nhóm các mặt phẳng, bạn có thể mã hóa các điểm dữ liệu với vị trí của chúng tương ứng với các mặt phẳng. Hãy tưởng tượng rằng khi chúng ta có nhiều mặt phẳng trong nhóm, sự khác biệt góc được mã hóa trong chữ ký gần với sự khác biệt thực tế. Bởi vì chỉ các mặt phẳng nằm giữa hai điểm sẽ cung cấp cho hai dữ liệu giá trị bit khác nhau.

nhập mô tả hình ảnh ở đây

  • Bây giờ chúng ta nhìn vào chữ ký của hai điểm dữ liệu. Như trong ví dụ, chúng tôi chỉ sử dụng 6 bit (hình vuông) để thể hiện mỗi dữ liệu. Đây là hàm băm LSH cho dữ liệu gốc chúng ta có.
  • Khoảng cách hãm giữa hai giá trị băm là 1, vì chữ ký của chúng chỉ khác nhau 1 bit.
  • Xem xét độ dài của chữ ký, chúng ta có thể tính toán độ tương tự góc của chúng như thể hiện trong biểu đồ.

Tôi có một số mã mẫu (chỉ 50 dòng) trong python ở đây đang sử dụng độ tương tự cosine. https://gist.github.com/94a3d425009be0f94751


Tại sao nó được gọi là địa phương nhạy cảm? bởi vì việc gán từng bit phụ thuộc vào địa phương của điểm dữ liệu đối với mỗi kế hoạch?
nawara

21
nhạy cảm cục bộ - các điểm dữ liệu nằm gần nhau được ánh xạ tới các giá trị băm tương tự (trong cùng một nhóm với xác suất cao).
greeness

2
Xin lỗi tôi đến trễ trong chủ đề này nhưng tôi đã có một câu hỏi về cosin. Bài thuyết trình nói rằng giá trị bit là một nếu sản phẩm chấm giữa vectơ thực và vectơ phẳng> = 0 hoặc nếu không là 0. Hướng của vectơ phẳng là gì bởi vì các góc giữa 90 độ và 180 độ cũng sẽ cho cosin là âm. Tôi cho rằng mỗi mặt phẳng gồm hai vectơ và chúng ta lấy góc nhỏ hơn được tạo với vectơ thực tế.
vkaul11

Cảm ơn bạn. Vì vậy, có đúng không khi nói rằng h mã hóa sự khác biệt về góc và b là "độ chính xác"? Như thế này tôi hiểu h * PI là theta trong rạng rỡ, và b độ chính xác của góc.
dùng305883

1
Bản trình chiếu mà bạn cung cấp rất gọn gàng: cs.jhu.edu/~vandurme/ con / VanDurmeLallACL10 - slides.pdf - bạn có thể giải thích logic toán học của "mẹo tổng hợp" - hoặc các khái niệm về đại số tuyến tính mà tôi nên xem tại để hiểu nó?
dùng305883

35

Tweets trong không gian vectơ có thể là một ví dụ tuyệt vời của dữ liệu chiều cao.

Kiểm tra bài đăng trên blog của tôi về việc áp dụng Locality Sensitive Hashing cho các tweet để tìm những bài tương tự.

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

Và bởi vì một hình ảnh là một ngàn từ kiểm tra hình ảnh dưới đây:

nhập mô tả hình ảnh ở đây http://micvog.files.wordpress.com/2013/08/lsh1.png

Hy vọng nó giúp. @mvogiatzis


21

Đây là một bài trình bày từ Stanford giải thích nó. Nó làm cho một sự khác biệt lớn đối với tôi. Phần hai nói thêm về LSH, nhưng phần một cũng đề cập đến nó.

Một hình ảnh tổng quan (Có nhiều hơn trong các slide):

nhập mô tả hình ảnh ở đây

Tìm kiếm hàng xóm gần trong dữ liệu thứ nguyên cao - Phần 1: http://www.stanford.edu/ class / cs345a / slides/04-highdim.pdf

Tìm kiếm hàng xóm gần trong dữ liệu thứ nguyên cao - Phần 2: http://www.stanford.edu/ class / cs345a / slides / 05-LSH.pdf


Tại sao không sử dụng minhash trực tiếp làm chức năng LSH của bạn?
Thomas Ahle

1
Tôi tin rằng vì số lượng không trùng lặp trên mỗi nhóm vẫn đủ cao, trong khi nếu chúng ta sử dụng m hàm băm độc lập như vậy, xác suất ánh xạ không trùng lặp gần với cùng một nhóm sẽ giảm đáng kể.
Shatu

7
  • LSH là một thủ tục lấy đầu vào là một tập hợp các tài liệu / hình ảnh / đối tượng và xuất ra một loại Bảng Hash.
  • Các chỉ mục của bảng này chứa các tài liệu sao cho các tài liệu nằm trên cùng một chỉ mục được coi là tương tự nhau và các chỉ mục trên các chỉ mục khác nhau là " không giống nhau ".
  • Trong trường hợp tương tự như phụ thuộc vào hệ thống số liệu và cũng trên một ngưỡng tương đồng s mà hoạt động như một tham số toàn cầu của LSH.
  • Tùy thuộc vào bạn để xác định ngưỡng s phù hợp cho vấn đề của bạn là gì.

nhập mô tả hình ảnh ở đây

Điều quan trọng là nhấn mạnh rằng các biện pháp tương tự khác nhau có triển khai LSH khác nhau.

Trong blog của mình, tôi đã cố gắng giải thích cặn kẽ LSH cho các trường hợp minHashing (thước đo tương tự jaccard) và simHashing (thước đo khoảng cách cosine). Tôi hy vọng bạn thấy nó hữu ích: https://aerodatablog.wordpress.com/2017/11/29/locality-sensitive-hashing-lsh/


2

Tôi là một người trực quan. Đây là những gì làm việc cho tôi như một trực giác.

Nói mỗi thứ bạn muốn tìm kiếm xấp xỉ là những vật thể như quả táo, khối lập phương, ghế.

Trực giác của tôi đối với một LSH là nó tương tự như lấy bóng của những vật thể này. Giống như nếu bạn lấy bóng của khối lập phương 3D, bạn sẽ có hình vuông 2D trên một tờ giấy hoặc hình cầu 3D sẽ giúp bạn có một hình bóng giống như hình tròn trên một tờ giấy.

Cuối cùng, có nhiều hơn ba chiều trong một vấn đề tìm kiếm (trong đó mỗi từ trong văn bản có thể là một chiều) nhưng tương tự bóng vẫn rất hữu ích với tôi.

Bây giờ chúng ta có thể so sánh hiệu quả các chuỗi bit trong phần mềm. Một chuỗi bit có độ dài cố định là loại, nhiều hay ít, giống như một dòng trong một chiều.

Vì vậy, với LSH, tôi chiếu bóng của các đối tượng cuối cùng dưới dạng các điểm (0 hoặc 1) trên một chuỗi dòng / bit có độ dài cố định duy nhất.

Toàn bộ mẹo là lấy các bóng sao cho chúng vẫn có ý nghĩa ở chiều thấp hơn, ví dụ như chúng giống với vật thể ban đầu theo cách đủ tốt để có thể nhận ra.

Một bản vẽ 2D của một hình khối trong phối cảnh cho tôi biết đây là một hình khối. Nhưng tôi không thể phân biệt dễ dàng một hình vuông 2D với bóng hình khối 3D mà không có phối cảnh: cả hai đều trông giống như một hình vuông đối với tôi.

Làm thế nào tôi trình bày đối tượng của mình ra ánh sáng sẽ xác định xem tôi có nhận được bóng tốt hay không. Vì vậy, tôi nghĩ rằng một LSH "tốt" là người sẽ biến các vật thể của tôi ra trước ánh sáng sao cho cái bóng của chúng có thể nhận ra tốt nhất là đại diện cho đối tượng của tôi.

Tóm lại: Tôi nghĩ về những thứ cần lập chỉ mục với LSH là các vật thể vật lý như khối lập phương, bàn hoặc ghế và tôi chiếu bóng của chúng thành 2D và cuối cùng dọc theo một đường (một chuỗi bit). Và một "chức năng" LSH "tốt" là cách tôi trình bày các vật thể của mình trước ánh sáng để có được hình dạng gần như có thể phân biệt được trong vùng phẳng 2D và sau đó là chuỗi bit của tôi.

Cuối cùng khi tôi muốn tìm kiếm nếu một đối tượng tôi có giống với một số đối tượng mà tôi đã lập chỉ mục, tôi lấy bóng của đối tượng "truy vấn" này bằng cách sử dụng cùng một cách để trình bày đối tượng của mình trước ánh sáng (cuối cùng kết thúc bằng một chút chuỗi quá). Và bây giờ tôi có thể so sánh mức độ tương tự của chuỗi bit đó với tất cả các chuỗi bit được lập chỉ mục khác của tôi, đó là một proxy để tìm kiếm toàn bộ các đối tượng của tôi nếu tôi tìm thấy một cách tốt và dễ nhận biết để trình bày các đối tượng của mình với ánh sáng của tôi.


0

Như một câu trả lời rất ngắn gọn, tldr :

Một ví dụ về băm nhạy cảm cục bộ có thể là lần đầu tiên đặt ngẫu nhiên các mặt phẳng (có góc quay và độ lệch) trong không gian đầu vào của bạn để băm, sau đó thả điểm của bạn vào hàm băm trong không gian và cho mỗi mặt phẳng bạn đo nếu điểm đó là bên trên hoặc bên dưới nó (ví dụ: 0 hoặc 1) và câu trả lời là hàm băm. Vì vậy, các điểm tương tự trong không gian sẽ có hàm băm tương tự nếu được đo bằng khoảng cách cosin trước hoặc sau.

Bạn có thể đọc ví dụ này bằng scikit-learn: https://github.com/guillaume-chevalier/SGNN-Self-Governing-Neural-Networks-Projection-Layer

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.