Khuếch đại Hash nhạy cảm tại địa phương


10

Tôi đang cố gắng xây dựng một hàm băm nhạy cảm cục bộ cosin để tôi có thể tìm thấy các cặp vật phẩm tương tự mà không cần phải so sánh mọi cặp có thể. Về cơ bản, tôi có nó hoạt động, nhưng hầu hết các cặp trong dữ liệu của tôi dường như có độ tương tự cosin trong phạm vi -0.2 đến +0.2, vì vậy tôi đang cố gắng xử lý nó một cách hoàn hảo và chọn những thứ có độ tương tự cosine 0.1 trở lên.

Tôi đã đọc Bộ dữ liệu khai thác lớn Chương 3. Bài này nói về việc tăng độ chính xác của việc lựa chọn cặp ứng cử viên bằng cách khuếch đại một gia đình nhạy cảm địa phương. Tôi nghĩ rằng tôi chỉ hiểu về giải thích toán học, nhưng tôi đang cố gắng để xem cách tôi thực hiện điều này một cách thực tế.

Những gì tôi có cho đến nay là như sau

  1. Tôi đã nói 1000 phim mỗi phim có xếp hạng từ một số lựa chọn của người dùng 1M. Mỗi bộ phim được thể hiện bằng một vectơ điểm số người dùng thưa thớt (số hàng = ID người dùng, giá trị = điểm của người dùng)
  2. Tôi xây dựng N vectơ ngẫu nhiên. Độ dài vectơ phù hợp với độ dài của vectơ phim (tức là số lượng người dùng). Các giá trị vectơ là +1 hoặc -1. Tôi thực sự mã hóa các vectơ này dưới dạng nhị phân để tiết kiệm không gian, với +1 được ánh xạ thành 1 và -1 ánh xạ thành 0
  3. Tôi xây dựng các vectơ phác thảo cho mỗi phim bằng cách lấy sản phẩm chấm của phim và mỗi N vectơ ngẫu nhiên (hay đúng hơn, nếu tôi tạo ma trận R bằng cách đặt N vectơ ngẫu nhiên theo chiều ngang và xếp chúng lên nhau rồi phác họa đối với phim m là R * m), sau đó lấy dấu của từng phần tử trong vectơ kết quả, vì vậy tôi kết thúc bằng một vectơ phác thảo cho mỗi phim + 1 và -1, một lần nữa tôi mã hóa thành nhị phân. Mỗi vectơ có độ dài N bit.
  4. Tiếp theo tôi tìm các bản phác thảo tương tự bằng cách làm như sau
    1. Tôi chia vector phác thảo thành các dải b bit r
    2. Mỗi dải bit r là một số. Tôi kết hợp số đó với số ban nhạc và thêm phim vào nhóm băm dưới số đó. Mỗi bộ phim có thể được thêm vào nhiều hơn một nhóm.
    3. Sau đó tôi nhìn vào từng thùng. Bất kỳ bộ phim nào trong cùng một nhóm là các cặp ứng cử viên.

So sánh điều này với 3.6.3 mmds, bước AND của tôi là khi tôi xem xét các dải của bit r - một cặp phim vượt qua bước AND nếu các bit r có cùng giá trị. Bước OR của tôi xảy ra trong các nhóm: phim là các cặp ứng cử viên nếu cả hai đều nằm trong bất kỳ nhóm nào.

Cuốn sách gợi ý tôi có thể "khuếch đại" kết quả của mình bằng cách thêm nhiều bước AND và OR, nhưng tôi không biết làm thế nào để thực hiện điều này một cách thực tế vì giải thích về quy trình xây dựng cho các lớp tiếp theo là về việc kiểm tra sự bình đẳng theo cặp chứ không phải là kiểm tra sự bình đẳng theo cặp chứ không phải là sắp tới với số xô.

Bất cứ ai có thể giúp tôi hiểu làm thế nào để làm điều này?

Câu trả lời:


4

Tôi nghĩ rằng tôi đã làm việc gì đó ra. Về cơ bản tôi đang tìm kiếm một cách tiếp cận hoạt động trong môi trường loại bản đồ / giảm và tôi nghĩ cách tiếp cận này thực hiện nó.

Vì thế,

  • giả sử tôi có b dải gồm r hàng và tôi muốn thêm một giai đoạn AND khác, giả sử một c AND khác.
  • vì vậy thay vì b * r bit tôi cần băm các bit b * r * c
  • và tôi chạy thủ tục trước đó c lần, mỗi lần trên bit b * r
  • Nếu x và y được tìm thấy là một cặp ứng cử viên bởi bất kỳ quy trình nào thì nó sẽ phát ra một cặp giá trị khóa ((x, y), 1), với bộ ID (x, y) là khóa và giá trị 1
  • Khi kết thúc các thủ tục c, tôi nhóm các cặp này theo khóa và tổng
  • Bất kỳ cặp (x, y) nào có tổng bằng c là một cặp ứng cử viên trong mỗi vòng c và do đó, một cặp ứng cử viên của toàn bộ quy trình.

Vì vậy, bây giờ tôi có một giải pháp khả thi, và tất cả những gì tôi cần làm là tìm hiểu xem liệu sử dụng 3 bước như thế này có thực sự giúp tôi có được kết quả tốt hơn với ít bit băm tổng thể hơn hay hiệu suất tổng thể tốt hơn ...


0

Tôi sẽ chỉ nhận xét nhưng tôi không thể. Tôi đã tìm kiếm một phương pháp điều trị thực tế về khuếch đại trong LSH và những gì bạn đã trình bày rất có ý nghĩa. Từ những gì tôi thu thập được, hàm băm chính làđối với một số vectơ ngẫu nhiên , sau AND này trở thành , và cuối cùng sau OR, hoặcBây giờ bạn có thể VÀ / HOẶC sử dụng) = f ( h : S S S h ( x , j ) j j y v

h(x,v)={0if sgn(xv)<01else
vh(x,i)=(h(x,vi+1),...,h(x,vi+r))h(x,j)=f(h(x,rj),j)
h(x,y)={1if h(x,j)=h(y,j) for any j[0,b)0else
h(x,y)như bạn mô tả Sau đó, bạn sẽ chỉ chọn các ứng cử viên dựa trên các câu lệnh logic AND / OR; bạn không thực sự băm nữa. Tại thời điểm này để tiếp tục băm, bạn cần ánh xạ của các thùng sao cho mỗi vectơ chỉ xuất hiện một lần trong , nhưng làm như vậy cũng có thể giới thiệu dương tính giả và / hoặc phủ định. Một ý tưởng cho hàm băm là mức tối thiểu của cho tất cả (hoặc mức tối thiểu trên tất cả và tất cả liên quan trực tiếp và gián tiếp ). Cả hai rõ ràng sẽ giới thiệu thiên vị. Tôi có thể thử một trong những thứ này, mặc dù tôi không chắc băm từ một ngẫu nhiên VÀ / HOẶC sẽ có ý nghĩa trong lần tới.h^:SSSh(x,j)jjyv và số lượng lớn các bản sao, có thể?
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.