จะทำความเข้าใจกับ Hashing Sensitive ท้องถิ่นได้อย่างไร?


156

ฉันสังเกตเห็นว่า LSH ดูเหมือนจะเป็นวิธีที่ดีในการค้นหารายการที่คล้ายกันที่มีคุณสมบัติมิติสูง

หลังจากอ่านกระดาษhttp://www.slaney.org/malcolm/yahoo/Slaney2008-LSHTutorial.pdfฉันยังคงสับสนกับสูตรเหล่านั้น

ไม่มีใครรู้บล็อกหรือบทความที่อธิบายว่าเป็นวิธีที่ง่าย?


3
อ่าน Ullman บทที่ 3 - "ค้นหารายการที่คล้ายกัน" infolab.stanford.edu/~ullman/mmds.html
achini

คำตอบ:


250

บทช่วยสอนที่ดีที่สุดที่ฉันเคยเห็นสำหรับ LSH อยู่ในหนังสือ: การขุดชุดข้อมูลขนาดใหญ่ ตรวจสอบบทที่ 3 - ค้นหารายการที่คล้ายกัน http://infolab.stanford.edu/~ullman/mmds/ch3a.pdf

นอกจากนี้ผมขอแนะนำให้สไลด์ด้านล่าง: http://www.cs.jhu.edu/%7Evandurme/papers/VanDurmeLallACL10-slides.pdf ตัวอย่างในสไลด์ช่วยฉันได้มากในการทำความเข้าใจกับการคร่ำครวญเพื่อความเหมือนโคไซน์

ฉันยืมสองสไลด์จากBenjamin Van Durme และ Ashwin Lall, ACL2010และพยายามอธิบายการหยั่งรู้ของครอบครัว LSH สำหรับ Cosine Distance สักหน่อย ป้อนคำอธิบายรูปภาพที่นี่

  • ในรูปมีวงกลมสองวงที่มีสีแดงและสีเหลืองแสดงถึงจุดข้อมูลสองมิติ เราพยายามค้นหาความคล้ายคลึงที่เป็นเอกภาพโดยใช้ LSH
  • เส้นสีเทาเป็นระนาบที่สุ่มเลือกอย่างสม่ำเสมอ
  • ขึ้นอยู่กับว่าจุดข้อมูลอยู่เหนือหรือใต้เส้นสีเทาเราทำเครื่องหมายความสัมพันธ์นี้เป็น 0/1
  • ที่มุมซ้ายบนมีสองแถวของสี่เหลี่ยมสีขาว / สีดำแสดงถึงลายเซ็นของจุดข้อมูลสองจุดตามลำดับ แต่ละสี่เหลี่ยมจัตุรัสจะสอดคล้องกับบิต 0 (สีขาว) หรือ 1 (สีดำ)
  • ดังนั้นเมื่อคุณมีกลุ่มของเครื่องบินคุณสามารถเข้ารหัสจุดข้อมูลด้วยตำแหน่งที่ตั้งของเครื่องบินตามลำดับ ลองจินตนาการว่าเมื่อเรามีระนาบในสระมากขึ้นความแตกต่างเชิงมุมที่เข้ารหัสในลายเซ็นนั้นใกล้เคียงกับความแตกต่างที่แท้จริง เนื่องจากเฉพาะระนาบที่อยู่ระหว่างสองจุดเท่านั้นที่จะให้ค่าบิตที่ต่างกันของข้อมูล

ป้อนคำอธิบายรูปภาพที่นี่

  • ตอนนี้เราดูที่ลายเซ็นของจุดข้อมูลสองจุด ดังตัวอย่างเราใช้เพียง 6 บิต (กำลังสอง) เพื่อแสดงแต่ละข้อมูล นี่คือแฮช LSH สำหรับข้อมูลดั้งเดิมที่เรามี
  • ระยะห่างของการแฮชระหว่างค่าแฮชทั้งสองคือ 1 เนื่องจากลายเซ็นของพวกเขาแตกต่างกันเพียง 1 บิต
  • เมื่อพิจารณาถึงความยาวของลายเซ็นเราสามารถคำนวณความคล้ายคลึงเชิงมุมดังที่แสดงในกราฟ

ฉันมีโค้ดตัวอย่าง (แค่ 50 บรรทัด) ในไพ ธ อนที่นี่ซึ่งใช้ความคล้ายคลึงโคไซน์ https://gist.github.com/94a3d425009be0f94751


ทำไมมันจึงถูกเรียกว่า local local sensitive เพราะการกำหนดของแต่ละบิตขึ้นอยู่กับตำแหน่งของจุดข้อมูลต่อแต่ละแผน
nawara

21
ความสำคัญของท้องถิ่น - จุดข้อมูลที่อยู่ใกล้กันถูกแมปกับแฮชที่คล้ายกัน (ในที่เก็บข้อมูลเดียวกันที่มีความน่าจะเป็นสูง)
greeness

2
ขออภัยฉันมาสายในหัวข้อนี้ แต่ฉันมีคำถามเกี่ยวกับโคไซน์ งานนำเสนอบอกว่าค่าบิตคือหนึ่งถ้าผลคูณของจุดระหว่างเวกเตอร์จริงกับเวกเตอร์ระนาบ> = 0 หรืออย่างอื่นคือ 0 อะไรคือทิศทางของเวกเตอร์ระนาบเพราะมุมระหว่าง 90 องศาถึง 180 องศาจะให้ a โคไซน์ซึ่งเป็นลบ ฉันคิดว่าระนาบแต่ละอันประกอบด้วยเวกเตอร์สองตัวและเราหามุมที่เล็กกว่าที่ทำกับเวกเตอร์จริง
vkaul11

ขอบคุณ. ดังนั้นมันถูกต้องหรือไม่ที่จะบอกว่า h เข้ารหัสความแตกต่างเชิงมุมและ b "ความแม่นยำ"? เช่นนี้ฉันเข้าใจว่า h * PI คือเธต้าในรัศมีและ b ความแม่นยำของมุม
user305883

1
สไลด์ที่คุณให้นั้นเป็นระเบียบมาก: cs.jhu.edu/~vandurme/papers/VanDurmeLallACL10-slides.pdf - คุณช่วยอธิบายตรรกะทางคณิตศาสตร์ของ "การรวมเคล็ดลับพีชคณิต" ได้ไหม - หรือแนวคิดของพีชคณิตเชิงเส้นที่ฉันควรมอง ที่จะเข้าใจหรือไม่
user305883

35

ทวีตในปริภูมิเวกเตอร์เป็นตัวอย่างที่ดีของข้อมูลมิติสูง

ลองดูโพสต์บล็อกของฉันเกี่ยวกับการใช้ Local Sensitive Hashing กับทวีตเพื่อค้นหาสิ่งที่คล้ายกัน

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

และเนื่องจากรูปภาพหนึ่งรูปเป็นพันคำตรวจสอบรูปภาพด้านล่าง:

ป้อนคำอธิบายรูปภาพที่นี่ http://micvog.files.wordpress.com/2013/08/lsh1.png

หวังว่ามันจะช่วย @mvogiatzis


21

นี่คืองานนำเสนอจาก Stanford ที่อธิบายได้ มันสร้างความแตกต่างอย่างมากสำหรับฉัน ส่วนที่สองนั้นเกี่ยวกับ LSH แต่ส่วนที่หนึ่งก็ครอบคลุมเช่นกัน

ภาพรวม (มีอีกมากมายในสไลด์):

ป้อนคำอธิบายรูปภาพที่นี่

ใกล้การค้นหาเพื่อนบ้านในข้อมูลมิติสูง - ส่วนที่ 1: http://www.stanford.edu/class/cs345a/slides/04-highdim.pdf

ใกล้เคียงกับการค้นหาเพื่อนบ้านในข้อมูลมิติสูง - ส่วนที่ 2: http://www.stanford.edu/class/cs345a/slides/05-LSH.pdf


ทำไมไม่ใช้เพียงแค่ minhash เป็นฟังก์ชั่น LSH ของคุณโดยตรง
โทมัส Ahle

1
ฉันเชื่อว่าเนื่องจากจำนวนของการทำซ้ำที่ไม่ซ้ำกันต่อ bucket ยังคงสูงพอในขณะที่ถ้าเราใช้ฟังก์ชันแฮชอิสระเช่นความน่าจะเป็นของการทำแผนที่ที่ไม่ซ้ำใกล้กับที่ฝากข้อมูลเดียวกันจะลดลงอย่างมาก
Shatu

7
  • LSH เป็นกระบวนการที่ใช้เป็นชุดของเอกสาร / ภาพ / วัตถุและเอาท์พุทชนิดของตารางแฮช
  • ดัชนีของตารางนี้มีเอกสารที่เอกสารที่อยู่ในดัชนีเดียวกันนั้นถือว่าคล้ายกันและดัชนีที่แตกต่างกันคือ " แตกต่างกัน "
  • ในกรณีที่ความคล้ายคลึงกันขึ้นอยู่กับระบบเมตริกและความคล้ายคลึงกันของเกณฑ์ซึ่งทำหน้าที่เหมือนพารามิเตอร์ทั่วโลกของ LSH
  • มันขึ้นอยู่กับคุณที่จะกำหนดสิ่งที่เกณฑ์ที่เพียงพอsคือสำหรับปัญหาของคุณ

ป้อนคำอธิบายรูปภาพที่นี่

สิ่งสำคัญคือการเน้นว่ามาตรการความคล้ายคลึงกันที่แตกต่างกันมีการใช้งาน LSH ที่แตกต่างกัน

ในบล็อกของฉันฉันพยายามอธิบาย LSH อย่างละเอียดสำหรับกรณีของ minHashing (การวัดความคล้ายคลึงกันของ jaccard) และ simHashing (การวัดระยะทางโคไซน์) ฉันหวังว่าคุณจะพบว่ามีประโยชน์: https://aerodatablog.wordpress.com/2017/11/29/locality-sensitive-hashing-lsh/


2

ฉันเป็นคนที่มองเห็น นี่คือสิ่งที่ทำงานให้ฉันเป็นปรีชา

พูดแต่ละสิ่งที่คุณต้องการค้นหาโดยประมาณคือวัตถุทางกายภาพเช่นแอปเปิ้ลลูกบาศก์เก้าอี้

สัญชาตญาณของฉันสำหรับ LSH คือมันคล้ายกับเงาของวัตถุเหล่านี้ เช่นถ้าคุณนำเงาของลูกบาศก์สามมิติคุณจะได้รูปทรงสี่เหลี่ยมสองมิติบนกระดาษหรือทรงกลม 3 มิติจะทำให้คุณมีเงาเหมือนวงกลมบนแผ่นกระดาษ

ในที่สุดก็มีมากกว่าสามมิติในปัญหาการค้นหา (ที่แต่ละคำในข้อความอาจเป็นหนึ่งมิติ) แต่การเปรียบเทียบเงายังคงมีประโยชน์กับฉันมาก

ตอนนี้เราสามารถเปรียบเทียบสตริงของบิตในซอฟต์แวร์ได้อย่างมีประสิทธิภาพ สตริงบิตความยาวคงที่คือ kinda มากหรือน้อยเช่นเส้นในมิติเดียว

ดังนั้นด้วย LSH ฉันจึงฉายเงาของวัตถุในที่สุดในฐานะจุด (0 หรือ 1) บนสตริงเส้น / บิตความยาวคงที่เดียว

เคล็ดลับทั้งหมดคือการใช้เงาเพื่อให้พวกเขายังคงความรู้สึกในมิติที่ต่ำกว่าเช่นพวกเขามีลักษณะคล้ายกับวัตถุต้นฉบับในทางที่ดีพอที่จะได้รับการยอมรับ

การวาดภาพสองมิติของคิวบ์ในมุมมองบอกฉันว่านี่คือคิวบ์ แต่ฉันไม่สามารถแยกแยะความแตกต่างของจตุรัส 2D จากเงาลูกบาศก์สามมิติได้อย่างง่ายดายโดยไม่มีมุมมอง: พวกเขาทั้งคู่ดูเหมือนจะเป็นสี่เหลี่ยมจัตุรัสกับฉัน

ฉันจะนำเสนอวัตถุของฉันกับแสงจะเป็นตัวกำหนดว่าฉันได้รับเงาที่รู้จักหรือไม่ ดังนั้นฉันคิดว่า LSH ที่ "ดี" เป็นสิ่งที่จะเปลี่ยนวัตถุของฉันต่อหน้าแสงเพื่อให้เงาของพวกเขาเป็นที่รู้จักดีที่สุดในฐานะตัวแทนของวัตถุของฉัน

เพื่อสรุป: ฉันคิดว่าสิ่งต่าง ๆ ในการทำดัชนีด้วย LSH เป็นวัตถุทางกายภาพเช่นลูกบาศก์ตารางหรือเก้าอี้และฉันฉายเงาของพวกเขาในแบบ 2D และในที่สุดก็เป็นเส้น (บิตสตริง) และฟังก์ชั่น "ดี" LSH "" คือวิธีที่ฉันนำเสนอวัตถุของฉันต่อหน้าแสงเพื่อให้ได้รูปร่างที่แตกต่างโดยประมาณในพื้นราบ 2D และต่อมาสตริงบิตของฉัน

ในที่สุดเมื่อฉันต้องการค้นหาว่าวัตถุที่ฉันมีนั้นคล้ายกับวัตถุบางอย่างที่ฉันจัดทำดัชนีหรือไม่ฉันใช้เงาของวัตถุ "แบบสอบถาม" นี้โดยใช้วิธีเดียวกับการนำเสนอวัตถุของฉันต่อหน้าแสง (ในที่สุดก็จบลงด้วยบิต สตริงด้วย) และตอนนี้ฉันสามารถเปรียบเทียบความคล้ายกันคือสตริงบิตนั้นกับสตริงบิตดัชนีอื่น ๆ ทั้งหมดของฉันซึ่งเป็นพร็อกซีสำหรับการค้นหาวัตถุทั้งหมดของฉันถ้าฉันพบวิธีที่ดีและเป็นที่รู้จักในการนำเสนอวัตถุของฉันกับแสงของฉัน


0

สั้นมากคำตอบtldr :

ตัวอย่างของการแฮชที่มีความละเอียดอ่อนในท้องที่อาจเป็นการตั้งค่าเครื่องบินแบบสุ่มเป็นครั้งแรก (ด้วยการหมุนและออฟเซ็ต) ในพื้นที่ของคุณของอินพุตไปยังแฮชแล้ววางจุดของคุณเพื่อแฮชในอวกาศและสำหรับแต่ละระนาบ ด้านบนหรือด้านล่าง (เช่น: 0 หรือ 1) และคำตอบคือแฮ ดังนั้นคะแนนที่คล้ายกันในอวกาศจะมีแฮชคล้ายกันหากวัดด้วยระยะห่างโคไซน์ก่อนหรือหลัง

คุณสามารถอ่านตัวอย่างนี้โดยใช้ scikit-learn: https://github.com/guillaume-chevalier/SGNN-Self-Governing-Neural-Networks-Project-Layer

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.