기능 해싱 이해


10

Wikipedia는 기능 해싱을 설명 할 때 다음 예제를 제공합니다 . 그러나 매핑이 정의 된 사전과 일치하지 않는 것 같습니다

예를 들어 사전에 따라 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 1 행에는 나타나지 않지만 2 행에는 1 번 나타납니다. 따라서 m (1,6) = 0 및 m (2,6) = 1입니다.

기능 해싱의 맥락에서 우리는 사전이 없습니다. 해시 함수 만 있습니다. (1) 지형지 물의 해시 값을 계산하고 (2) 데이터 포인트가 표시 될 때마다 해시 함수가 제공 한 색인을 1 씩 증가 시킨다는 점에서 이와 유사하게 작동합니까? 예를 들어, 아래의 @ user20370 상태와 같이 13 비트로 기능을 인코딩하기로 결정하고 "likes"의 해시 값이 5674 인 경우 인덱스 5674는 1 씩 증가합니까? 더 적은 비트를 사용한다면, 5674를 2 ^ (# 비트) 씩 수정하고 그 인덱스를 증가 시키는가?
Vivek Subramanian

1
@VivekSubramanian 예. 문제는 충돌없이 (예 : 다른 단어이지만 동일한 해시 값) 충돌이 거의 발생하지 않는 해시 함수를 찾는 것입니다. 이것은 컴퓨터 과학 분야의 연구 분야입니다 ( en.wikipedia.org/wiki/Perfect_hash_function ).
steffen

4

Steffen이 지적했듯이 예제 매트릭스는 단어가 텍스트에 나타나는 횟수를 인코딩합니다. 행렬로의 인코딩 위치는 단어 (행렬의 열 위치)와 텍스트 (행렬의 행 위치)로 제공됩니다.

이제 해싱 트릭은 동일한 방식으로 작동하지만 각 단어의 열 위치를 포함하는 사전을 처음에 정의 할 필요는 없습니다.

실제로 해싱 함수는 가능한 열 위치의 범위 (해시 함수는 가능한 최소값 및 최대 값을 제공함)와 행렬로 인코딩하려는 단어의 정확한 위치를 제공합니다. 예를 들어, "likes"라는 단어가 해싱 함수에 의해 숫자 5674로 해시되면 열 5674에 "likes"라는 단어에 대한 인코딩이 포함된다고 가정 해 봅시다.

이러한 방식으로 텍스트를 분석하기 전에 사전을 작성할 필요가 없습니다. 희소 행렬을 텍스트 행렬로 사용하면 행렬 크기를 정확히 정의 할 필요조차 없습니다. 텍스트를 스캔하는 것만으로 해싱 함수를 통해 단어를 열 위치로 변환 할 수 있으며 텍스트 매트릭스는 점진적으로 분석중인 문서 (행 위치)에 따라 데이터 (주파수)로 채워집니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.