ทำความเข้าใจกับคุณสมบัติการแปลงแป้นพิมพ์


10

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

ตัวอย่างเช่นtoควรแปลง3ตามพจนานุกรม แต่มีการเข้ารหัส1แทน

คำอธิบายมีข้อผิดพลาดหรือไม่? ฟีเจอร์การแฮชทำงานอย่างไร

ตำรา:

John likes to watch movies. Mary likes too.
John also likes to watch football games.

สามารถแปลงโดยใช้พจนานุกรม

{"John": 1, "likes": 2, "to": 3, "watch": 4, "movies": 5, "also": 6, 
"football": 7, "games": 8, "Mary": 9, "too": 10}

เมทริกซ์

[[1 2 1 1 1 0 0 0 1 1]
 [1 1 1 1 0 1 1 1 0 0]]

คำตอบ:


10

เมทริกซ์ถูกสร้างในวิธีต่อไปนี้:

  • แถวแสดงถึงเส้น
  • คอลัมน์แสดงคุณสมบัติ

และทุกเมทริกซ์รายการ (i, j) = k หมายถึง:

ในบรรทัด i คำที่มีดัชนี j จะปรากฏ k คูณ

ดังนั้นtoถูกแมปกับดัชนี 3 มันจะปรากฏขึ้นเพียงครั้งเดียวในบรรทัดที่ 1 ดังนั้น m (1,3) = 1

ตัวอย่างเพิ่มเติม

  • likesถูกแมปไปที่ดัชนี 2 มันจะปรากฏขึ้นสองครั้งในบรรทัดแรก ดังนั้น m (1,2) = 2
  • also ถูกแมปกับดัชนี 6 มันไม่ปรากฏในบรรทัดที่ 1 แต่หนึ่งครั้งในบรรทัดที่ 2 ดังนั้น m (1,6) = 0 และ m (2,6) = 1

ในบริบทของฟีเจอร์การแฮชเราไม่มีพจนานุกรม เรามีฟังก์ชั่นแฮชเท่านั้น การทำงานนี้คล้ายกันในแง่ที่ว่าคุณ (1) คำนวณค่าแฮชของคุณสมบัติและ (2) เพิ่มดัชนีที่กำหนดโดยฟังก์ชันแฮชโดย 1 ทุกครั้งที่คุณเห็นจุดข้อมูลหรือไม่ ตัวอย่างเช่นตามที่ @ user20370 ระบุไว้ด้านล่างหากคุณตัดสินใจเข้ารหัสคุณลักษณะของคุณด้วย 13 บิตและค่าแฮชของ "ชอบ" คือ 5674 ดัชนี 5674 จะเพิ่มขึ้น 1 หรือไม่ และถ้าคุณใช้จำนวนบิตน้อยลงคุณเพียงแค่ปรับเปลี่ยน 5674 คูณ 2 ^ (# บิต) และเพิ่มดัชนีนั้นหรือไม่
Vivek Subramanian

1
@VivekSubramanian ใช่ ความท้าทายคือการหาฟังก์ชันแฮชที่ไม่มีการชน (เช่นคำที่ต่างกัน แต่มีค่าแฮชที่เหมือนกัน) หรือมีการชนกันน้อยมาก นี่คือส่วนของการวิจัยทางวิทยาศาสตร์คอมพิวเตอร์ ( en.wikipedia.org/wiki/Perfect_hash_function )
steffen

4

ดังที่สเตฟเฟ่นชี้ตัวอย่างเมทริกซ์เข้ารหัสจำนวนครั้งที่คำปรากฏในข้อความ ตำแหน่งของการเข้ารหัสลงในเมทริกซ์นั้นได้มาจากคำว่า (ตำแหน่งคอลัมน์บนเมทริกซ์) และโดยข้อความ (ตำแหน่งแถวบนเมทริกซ์)

ทีนี้เคล็ดลับการแปลงแป้นพิมพ์ทำงานในลักษณะเดียวกันแม้ว่าคุณจะไม่จำเป็นต้องกำหนดพจนานุกรมที่มีตำแหน่งคอลัมน์สำหรับแต่ละคำในตอนแรก

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

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

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