Noções básicas sobre hash de recursos


10

A Wikipedia fornece o seguinte exemplo ao descrever o hash de recursos ; mas o mapeamento não parece consistente com o dicionário definido

Por exemplo, todeve ser convertido para de 3acordo com o dicionário, mas é codificado como 1alternativa.

Existe um erro na descrição? Como funciona o hash de recursos?

Os textos:

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

pode ser convertido usando o dicionário

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

para a matriz

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

Respostas:


10

A matriz é construída da seguinte maneira:

  • linhas representam linhas
  • colunas representam recursos

e toda matriz de entrada (i, j) = k significa:

Na linha i, a palavra com o índice j aparece k vezes.

Então, toé mapeado para o índice 3. Ele aparece exatamente uma vez na linha 1. Então m (1,3) = 1.

Mais exemplos

  • likesé mapeado para o índice 2. Ele aparece exatamente duas vezes na primeira linha. Então m (1,2) = 2
  • also é mapeado para o índice 6. Ele não aparece na linha 1, mas uma vez na linha 2. Então m (1,6) = 0 e m (2,6) = 1.

No entanto, no contexto do hash de recursos, não temos um dicionário. Temos apenas uma função hash. Isso funciona da mesma maneira no sentido de que você (1) calcula o valor de hash do recurso e (2) incrementa o índice fornecido pela função de hash em 1 cada vez que vê um ponto de dados? Por exemplo, como @ user20370 afirma abaixo, se você decidir codificar seus recursos com 13 bits e o valor do hash de "curtidas" for 5674, o índice 5674 será incrementado em 1? E se você usa menos bits, modifica 5674 por 2 ^ (# bits) e aumenta esse índice?
Vivek Subramanian

11
@VivekSubramanian yes. O desafio é encontrar uma função de hash sem colisões (ou seja, palavras diferentes, mas o mesmo valor de hash) ou com colisões ocorrendo raramente. Esta é uma área de pesquisa em ciência da computação ( en.wikipedia.org/wiki/Perfect_hash_function ).
Steffen

4

Como Steffen apontou, a matriz de exemplo codifica o número de vezes que uma palavra aparece em um texto. A posição da codificação na matriz é dada pela palavra (posição da coluna na matriz) e pelo texto (posição da linha na matriz).

Agora, o truque de hash funciona da mesma maneira, embora você não precise definir inicialmente o dicionário que contém a posição da coluna para cada palavra.

De fato, é a função de hash que fornecerá o intervalo de posições possíveis da coluna (a função de hash fornecerá um valor mínimo e máximo possível) e a posição exata da palavra que você deseja codificar na matriz. Então, por exemplo, vamos imaginar que a palavra "curtidas" seja dividida por nossa função de hash no número 5674, e a coluna 5674 conterá as codificações relativas à palavra "curtidas".

Dessa forma, você não precisará criar um dicionário antes de analisar o texto. Se você usar uma matriz esparsa como sua matriz de texto, nem precisará definir exatamente qual será o tamanho da matriz. Apenas digitalizando o texto, em tempo real, você converterá palavras em posições de coluna pela função hash e sua matriz de texto será preenchida com dados (frequências, ie) de acordo com o documento que você está analisando progressivamente (posição da linha).

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.