การตรวจหาข้อมูลซ้ำแบบคล้ายกันด้วย Jaccard similarity และ MinHash
(blog.nelhage.com)การค้นหาเอกสารที่คล้ายกัน: Jaccard similarity และ MinHash
- นิยามปัญหา
- กล่าวถึงวิธีระบุเอกสารที่คล้ายกันในคอลเลกชันเอกสารขนาดใหญ่
- ตัวอย่างเช่น เมื่อดึงข้อมูลผ่านการทำเว็บครอล อาจมีการดึงหน้าเดียวกันมาหลายครั้ง ทำให้เกิดความต่างเล็กน้อยในเมทาดาทา หรือมีหลายเวอร์ชันหลังการแก้ไขเพียงเล็กน้อย
- บทความนี้สำรวจวิธี deduplication แบบประมาณค่าด้วย Jaccard similarity และ MinHash
ความคล้ายกัน
- นิยามความคล้ายกัน
- นิยามความคล้ายกันระหว่างเอกสารสองฉบับ และวิธีค้นหาคู่ที่มีค่าความคล้ายกันมากกว่าหรือเท่ากับค่าเกณฑ์ที่กำหนด
- นิยามฟังก์ชันความคล้ายกัน S:U×U→[0,1] และถือว่าเอกสารสองฉบับเป็นข้อมูลซ้ำแบบประมาณค่าเมื่อ S(A,B)≥S_crit
Jaccard similarity
- Jaccard similarity
- ฟังก์ชันที่แสดงความคล้ายกันของเซตจำกัดสองเซตด้วยอัตราส่วนของอินเตอร์เซกชันต่อยูเนียน
- J(A,B)=∣A∩B∣/∣A∪B∣
- ยิ่งสองเซตคล้ายกันมาก ก็จะยิ่งมีองค์ประกอบส่วนใหญ่เหมือนกัน
การขยายการใช้ Jaccard similarity
- วิธีการขยาย
- แปลงเอกสารให้เป็นเซตของคุณลักษณะ แล้วค้นหาเซตที่มีค่า Jaccard similarity สูง
- ใช้ได้โดยตรงกับคอร์ปัสขนาดเล็ก แต่จะไม่มีประสิทธิภาพในคอร์ปัสขนาดใหญ่
การประมาณค่า Jaccard similarity
- ลายเซ็น MinHash
- ใช้การสุ่มตัวอย่างเพื่อประมาณค่า Jaccard similarity
- คำนวณลายเซ็นขนาดคงที่ล่วงหน้าสำหรับแต่ละเอกสาร เพื่อประเมินความคล้ายกันได้อย่างมีประสิทธิภาพ
การใช้แฮชฟังก์ชันมากขึ้น
- แฮชฟังก์ชันหลายตัว
- ใช้แฮชฟังก์ชันหลายตัวเพื่อสรุปแต่ละเอกสารเป็นเวกเตอร์ขนาด k องค์ประกอบ
- นับจำนวนค่าแฮชที่ตรงกันระหว่างลายเซ็นสองชุดเพื่อประมาณค่า Jaccard similarity
การเปรียบเทียบเอกสารทั้งหมด
- การจัดกลุ่มเอกสาร
- จัดกลุ่มเอกสารเพื่อเปรียบเทียบเฉพาะเอกสารที่คล้ายกัน
- ใช้ค่า MinHash เป็นคีย์สำหรับการจัดกลุ่มเพื่อค้นหาข้อมูลซ้ำแบบประมาณค่าได้อย่างมีประสิทธิภาพ
การตรวจหาข้อมูลซ้ำที่ยืดหยุ่นมากขึ้น
- การใช้หลายคีย์
- ใช้หลายคีย์เพื่อวางเอกสารลงในหลายบักเก็ต และเปรียบเทียบภายในแต่ละบักเก็ต
- ทำให้สามารถตรวจหาข้อมูลซ้ำได้แม้ที่ค่าความคล้ายกันต่ำลง
บทสรุป
- บทสรุป
- สามารถค้นหาเอกสารที่คล้ายกันได้อย่างมีประสิทธิภาพด้วยอัลกอริทึมอย่าง MinHash
- หวังว่าบทความนี้จะช่วยแนะนำอัลกอริทึมเหล่านี้ให้วิศวกรมากขึ้นและช่วยให้เข้าใจได้ง่ายขึ้น
ภาคผนวก: การแทนเอกสารเป็นเซต
-
n-gram
- แทนเอกสารด้วย n-gram เพื่อใช้ในการเปรียบเทียบ
- ความละเอียดของการเปรียบเทียบจะแตกต่างกันไปตามค่า n
-
การแบ่งคำ
- แบ่งเอกสารเป็นคำหรือโทเค็นเพื่อใช้เป็นคุณลักษณะ
- อาจใช้ tokenizer ที่ซับซ้อนยิ่งขึ้นได้เช่นกัน
ความเห็นของ GN⁺
-
ความสำคัญของการตรวจหาเอกสารที่คล้ายกัน
- การกำจัดข้อมูลซ้ำในชุดข้อมูลขนาดใหญ่มีความสำคัญต่อการยกระดับคุณภาพข้อมูลและการประหยัดพื้นที่จัดเก็บ
- โดยเฉพาะอย่างยิ่ง เป็นสิ่งจำเป็นในกระบวนการเว็บครอลหรือการรวบรวมข้อมูล
-
ข้อดีของ MinHash
- MinHash สามารถตรวจหาเอกสารที่คล้ายกันได้อย่างมีประสิทธิภาพและขยายขนาดได้ดี
- มีความยืดหยุ่นมากกว่าวิธี deduplication แบบอิงแฮชดั้งเดิม
-
เทคนิคอื่นที่คล้ายกัน
- อัลกอริทึมสเก็ตช์อื่น ๆ เช่น HyperLogLog ก็สามารถใช้แก้ปัญหาที่คล้ายกันได้เช่นกัน
- สามารถผสานสองอัลกอริทึมเข้าด้วยกันเพื่อสร้างโซลูชันที่ทรงพลังยิ่งขึ้น
-
ข้อพิจารณาเมื่อนำไปใช้จริง
- ความสำคัญของการเลือกแฮชฟังก์ชัน: การเลือกแฮชฟังก์ชันส่งผลอย่างมากต่อความแม่นยำของผลลัพธ์
- สมดุลระหว่างประสิทธิภาพและความแม่นยำ: ยิ่งใช้แฮชฟังก์ชันมาก ความแม่นยำก็ยิ่งสูง แต่ต้นทุนด้านประสิทธิภาพก็เพิ่มขึ้น
-
เทคโนโลยีที่แนะนำ
- สามารถนำไปใช้ได้ง่ายด้วยเครื่องมืออย่าง Spark MinHashLSH implementation
- แนะนำให้ใช้เทคนิคเหล่านี้อย่างจริงจังเพื่อ deduplication ที่มีประสิทธิภาพในชุดข้อมูลขนาดใหญ่
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ความคล้ายแบบ Jaccard และคะแนน F1 สามารถใช้กับ fuzzy set ได้เหมือนกัน
เคยมีประสบการณ์ทำการลบข้อมูลซ้ำในฐานข้อมูลของรัฐบาลฝรั่งเศสด้วย Python
นี่เป็นเทคโนโลยีที่พัฒนาขึ้นในช่วงแรกของ Google เพื่อใช้ลบข้อมูลซ้ำ
เคยมีประสบการณ์สร้างระบบ Minhash
กำลังพัฒนาเครื่องมือ visualization เพราะ Minhash และตัวแปรของมันเข้าใจได้ยาก
การทำความเข้าใจเทคนิคนี้ผ่านตัวอย่างโค้ดทำได้ง่ายกว่า
ทีม NVIDIA ได้เปิดตัวอัลกอริทึมลบข้อมูลซ้ำแบบ fuzzy ที่เร่งด้วย GPU
กลยุทธ์การลบข้อมูลซ้ำที่ผสานการแฮช หรือ neural network ขนาดเล็ก เข้ากับ vector search engine เป็นเรื่องที่พบได้ทั่วไป
ได้แจ้งผู้เขียนเรื่องคำพิมพ์ผิด
กำลังแก้ปัญหาการรวมข่าวที่คล้ายกันให้เหลือรายการเดียวใน Postgres