Hiểu tính năng băm


10

Wikipedia cung cấp ví dụ sau khi mô tả tính năng băm ; nhưng ánh xạ có vẻ không phù hợp với từ điển được định nghĩa

Ví dụ, tonên được chuyển đổi 3theo từ điển, nhưng nó được mã hóa 1thay thế.

Có một lỗi trong mô tả? Làm thế nào để tính năng băm làm việc?

Các văn bản:

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

có thể được chuyển đổi, sử dụng từ điển

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

đến ma trận

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

Câu trả lời:


10

Ma trận được xây dựng theo cách sau:

  • hàng đại diện cho dòng
  • cột đại diện cho các tính năng

và mọi ma trận nhập (i, j) = k có nghĩa là:

Trong dòng i, từ có chỉ số j xuất hiện k lần.

Vì vậy, tođược ánh xạ tới chỉ mục 3. Nó xuất hiện chính xác một lần trong dòng 1. Vì vậy m (1,3) = 1.

Thêm ví dụ

  • likesđược ánh xạ tới chỉ mục 2. Nó xuất hiện chính xác hai lần trong dòng đầu tiên. Vậy m (1,2) = 2
  • also được ánh xạ tới chỉ mục 6. Nó không xuất hiện trong dòng 1, nhưng một lần trong dòng 2. Vì vậy m (1,6) = 0 và m (2,6) = 1.

Trong bối cảnh băm tính năng, chúng tôi không có từ điển. Chúng tôi chỉ có một hàm băm. Điều này có hoạt động tương tự theo nghĩa là bạn (1) tính giá trị băm của tính năng và (2) tăng chỉ số được đưa ra bởi hàm băm lên 1 mỗi lần bạn nhìn thấy điểm dữ liệu không? Chẳng hạn, như @ user20370 trạng thái bên dưới, nếu bạn quyết định mã hóa các tính năng của mình bằng 13 bit và giá trị băm của "lượt thích" là 5674, thì chỉ số 5674 có được tăng thêm 1 không? Và nếu bạn sử dụng ít bit hơn, bạn chỉ cần mod 5674 bằng 2 ^ (# bit) và tăng chỉ số đó?
Vivek Subramanian

1
@VivekSubramanian có. Thách thức là tìm ra hàm băm không có xung đột (nghĩa là các từ khác nhau, nhưng cùng một giá trị băm) hoặc với các va chạm xảy ra hiếm khi. Đây là một lĩnh vực nghiên cứu về khoa học máy tính ( en.wikipedia.org/wiki/Perinf_hash_feft ).
steffen

4

Như Steffen đã chỉ ra, ma trận ví dụ mã hóa số lần một từ xuất hiện trong một văn bản. Vị trí của mã hóa vào ma trận được cho bởi từ (vị trí cột trên ma trận) và bởi văn bản (vị trí hàng trên ma trận).

Bây giờ, thủ thuật băm hoạt động theo cùng một cách, mặc dù ban đầu bạn không phải xác định từ điển chứa vị trí cột cho mỗi từ.

Trong thực tế, chính hàm băm sẽ cung cấp cho bạn phạm vi vị trí cột có thể (hàm băm sẽ cung cấp cho bạn giá trị tối thiểu và tối đa có thể) và vị trí chính xác của từ bạn muốn mã hóa vào ma trận. Vì vậy, ví dụ, hãy tưởng tượng rằng từ "thích" được hàm băm của chúng ta băm vào số 5674, thì cột 5674 sẽ chứa các mã hóa liên quan đến từ "thích".

Theo cách như vậy, bạn sẽ không cần phải xây dựng một từ điển trước khi phân tích văn bản. Nếu bạn sẽ sử dụng một ma trận thưa thớt làm ma trận văn bản của mình, bạn thậm chí sẽ không phải xác định chính xác kích thước ma trận sẽ phải là bao nhiêu. Chỉ bằng cách quét văn bản, khi đang di chuyển, bạn sẽ chuyển đổi các từ thành vị trí cột bằng chức năng băm và ma trận văn bản của bạn sẽ được điền dữ liệu (tần số, nghĩa là) theo tài liệu bạn đang phân tích dần (vị trí hàng).

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.