Comprender el hash de funciones


10

Wikipedia proporciona el siguiente ejemplo al describir el hashing de características ; pero el mapeo no parece consistente con el diccionario definido

Por ejemplo, todebe convertirse de 3acuerdo con el diccionario, pero está codificado como en su 1lugar.

¿Hay algún error en la descripción? ¿Cómo funciona el hashing de funciones?

Los textos:

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

se puede convertir usando el diccionario

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

a la matriz

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

Respuestas:


10

La matriz se construye de la siguiente manera:

  • las filas representan líneas
  • las columnas representan características

y cada matriz de entrada (i, j) = k significa:

En la línea i, la palabra con índice j aparece k veces.

Entonces tose asigna al índice 3. Aparece exactamente una vez en la línea 1. Entonces m (1,3) = 1.

Más ejemplos

  • likesse asigna al índice 2. Aparece exactamente dos veces en la primera línea. Entonces m (1,2) = 2
  • also se asigna al índice 6. No aparece en la línea 1, sino una vez en la línea 2. Entonces m (1,6) = 0 ym (2,6) = 1.

Sin embargo, en el contexto del hashing de características, no tenemos un diccionario. Solo tenemos una función hash. ¿Funciona de manera similar en el sentido de que (1) calcula el valor hash de la característica y (2) incrementa el índice dado por la función hash en 1 cada vez que ve un punto de datos? Por ejemplo, como dice @ user20370 a continuación, si decide codificar sus características con 13 bits y el valor hash de "me gusta" es 5674, ¿el índice 5674 se incrementa en 1? Y si usa menos bits, ¿simplemente modifica 5674 por 2 ^ (# bits) e incrementa ese índice?
Vivek Subramanian

1
@VivekSubramanian sí. El desafío es encontrar una función hash sin colisiones (es decir, palabras diferentes, pero el mismo valor hash), o con colisiones que ocurren raramente. Esta es un área de investigación en informática ( en.wikipedia.org/wiki/Perfect_hash_function ).
steffen

4

Como señaló Steffen, la matriz de ejemplo codifica el número de veces que aparece una palabra en un texto. La posición de la codificación en la matriz viene dada por la palabra (posición de la columna en la matriz) y por el texto (posición de la fila en la matriz).

Ahora, el truco de hash funciona de la misma manera, aunque no tiene que definir inicialmente el diccionario que contiene la posición de la columna para cada palabra.

De hecho, es la función hash la que le dará el rango de posibles posiciones de columna (la función hashing le dará un valor mínimo y máximo posible) y la posición exacta de la palabra que desea codificar en la matriz. Entonces, por ejemplo, imaginemos que la palabra "me gusta" está codificada por nuestra función de hash en el número 5674, luego la columna 5674 contendrá las codificaciones relativas a la palabra "me gusta".

De esta manera, no necesitará construir un diccionario antes de analizar el texto. Si va a utilizar una matriz dispersa como matriz de texto, ni siquiera tendrá que definir exactamente cuál será el tamaño de la matriz. Simplemente escaneando el texto, sobre la marcha, convertirá las palabras en posiciones de columna mediante la función hash y su matriz de texto se completará con datos (frecuencias, es decir) de acuerdo con el documento que está analizando progresivamente (posición de la fila).

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.