Comprensione dell'hashing delle funzionalità


10

Wikipedia fornisce l'esempio seguente quando si descrive l' hash delle funzionalità ; ma la mappatura non sembra coerente con il dizionario definito

Ad esempio, todovrebbe essere convertito in 3base al dizionario, ma è codificato come 1invece.

C'è un errore nella descrizione? Come funziona l'hash delle caratteristiche?

I testi:

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

può essere convertito, usando il dizionario

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

alla matrice

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

Risposte:


10

La matrice è costruita nel modo seguente:

  • le righe rappresentano le linee
  • le colonne rappresentano le funzionalità

e ogni matrice di immissione (i, j) = k significa:

Nella riga i, la parola con indice j appare k volte.

Quindi toè mappato all'indice 3. Appare esattamente una volta nella riga 1. Quindi m (1,3) = 1.

Più esempi

  • likesè mappato all'indice 2. Appare esattamente due volte nella prima riga. Quindi m (1,2) = 2
  • also è mappato all'indice 6. Non appare nella riga 1, ma una volta nella riga 2. Quindi m (1,6) = 0 e m (2,6) = 1.

Nel contesto dell'hash delle funzionalità, tuttavia, non abbiamo un dizionario. Abbiamo solo una funzione hash. Funziona in modo simile nel senso che tu (1) calcoli il valore di hash della funzione e (2) incrementi l'indice dato dalla funzione hash di 1 ogni volta che vedi un punto dati? Ad esempio, come indicato di seguito da @utente20370, se si decide di codificare le funzionalità con 13 bit e il valore hash di "mi piace" è 5674, l'indice 5674 viene incrementato di 1? E se usi meno bit, mod semplicemente 5674 di 2 ^ (# bit) e incrementi quell'indice?
Vivek Subramanian,

1
@VivekSubramanian yes. La sfida è trovare una funzione hash senza collisioni (cioè parole diverse, ma stesso valore di hash), o con collisioni che si verificano raramente. Questa è un'area di ricerca in informatica ( en.wikipedia.org/wiki/Perfect_hash_function ).
Steffen,

4

Come ha sottolineato Steffen, la matrice di esempio codifica il numero di volte in cui una parola appare in un testo. La posizione della codifica nella matrice è data dalla parola (posizione della colonna sulla matrice) e dal testo (posizione della riga sulla matrice).

Ora, il trucco di hashing funziona allo stesso modo, anche se non è necessario definire inizialmente il dizionario contenente la posizione della colonna per ogni parola.

In effetti è la funzione di hashing che ti darà la gamma di possibili posizioni di colonna (la funzione di hashing ti darà un valore minimo e massimo possibile) e la posizione esatta della parola che vuoi codificare nella matrice. Quindi, ad esempio, immaginiamo che la parola "mi piace" sia cancellata dalla nostra funzione di hashing nel numero 5674, quindi la colonna 5674 conterrà le codifiche relative alla parola "mi piace".

In tal modo non sarà necessario creare un dizionario prima di analizzare il testo. Se utilizzerai una matrice sparsa come matrice di testo, non dovrai nemmeno definire esattamente quale sarà la dimensione della matrice. Semplicemente scansionando il testo, al volo, convertirai le parole in posizioni di colonna con la funzione di hashing e la tua matrice di testo sarà popolata di dati (frequenze, cioè) in base al documento che stai progressivamente analizzando (posizione di riga).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.