Grundlegendes zum Feature-Hashing

10

Wikipedia bietet das folgende Beispiel für die Beschreibung von Feature-Hashing . Die Zuordnung scheint jedoch nicht mit dem definierten Wörterbuch übereinzustimmen

Zum Beispiel tosollte 3entsprechend dem Wörterbuch konvertiert werden , aber es wird 1stattdessen als codiert .

Gibt es einen Fehler in der Beschreibung? Wie funktioniert Feature-Hashing?

Die Texte:

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

kann mit dem Wörterbuch konvertiert werden

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

zur Matrix

[[1 2 1 1 1 0 0 0 1 1]
 [1 1 1 1 0 1 1 1 0 0]]
Josh
quelle

Antworten:

10

Die Matrix ist folgendermaßen aufgebaut:

  • Zeilen stehen für Linien
  • Spalten repräsentieren Features

und jede Eingabematrix (i, j) = k bedeutet:

In Zeile i erscheint das Wort mit dem Index j k-mal.

Wird toalso auf Index 3 abgebildet. Es erscheint genau einmal in Zeile 1. Also ist m (1,3) = 1.

Mehr Beispiele

  • likeswird dem Index 2 zugeordnet. Es erscheint genau zweimal in der ersten Zeile. Also ist m (1,2) = 2
  • also wird auf Index 6 abgebildet. Es erscheint nicht in Zeile 1, sondern einmal in Zeile 2. Also ist m (1,6) = 0 und m (2,6) = 1.
steffen
quelle
Im Zusammenhang mit Feature-Hashing haben wir jedoch kein Wörterbuch. Wir haben nur eine Hash-Funktion. Funktioniert dies ähnlich in dem Sinne, dass Sie (1) den Hash-Wert des Features berechnen und (2) den von der Hash-Funktion angegebenen Index jedes Mal um 1 erhöhen, wenn Sie einen Datenpunkt sehen? Wenn Sie beispielsweise, wie @ user20370 unten angibt, Ihre Features mit 13 Bit codieren und der Hash-Wert von "Likes" 5674 beträgt, wird der Index 5674 dann um 1 erhöht? Und wenn Sie weniger Bits verwenden, modifizieren Sie 5674 nur um 2 ^ (# Bits) und erhöhen diesen Index?
Vivek Subramanian
1
@ VivekSubramanian ja. Die Herausforderung besteht darin, eine Hash-Funktion ohne Kollisionen (dh unterschiedliche Wörter, aber gleichen Hash-Wert) oder mit selten auftretenden Kollisionen zu finden. Dies ist ein Forschungsgebiet der Informatik ( en.wikipedia.org/wiki/Perfect_hash_function ).
steffen
4

Wie Steffen betonte, codiert die Beispielmatrix die Häufigkeit, mit der ein Wort in einem Text erscheint. Die Position der Codierung in der Matrix wird durch das Wort (Spaltenposition in der Matrix) und durch den Text (Zeilenposition in der Matrix) angegeben.

Jetzt funktioniert der Hashing-Trick genauso, obwohl Sie nicht zunächst das Wörterbuch definieren müssen, das die Spaltenposition für jedes Wort enthält.

Tatsächlich gibt Ihnen die Hashing-Funktion den Bereich möglicher Spaltenpositionen (die Hashing-Funktion gibt Ihnen einen minimalen und maximalen Wert an) und die genaue Position des Wortes, das Sie in die Matrix codieren möchten. Stellen wir uns zum Beispiel vor, dass das Wort "Likes" durch unsere Hashing-Funktion in die Zahl 5674 gehasht wird. Dann enthält die Spalte 5674 die Codierungen relativ zum Wort "Likes".

Auf diese Weise müssen Sie vor der Analyse des Textes kein Wörterbuch erstellen. Wenn Sie eine spärliche Matrix als Textmatrix verwenden, müssen Sie nicht einmal genau definieren, wie groß die Matrix sein muss. Wenn Sie den Text im laufenden Betrieb scannen, konvertieren Sie Wörter mithilfe der Hashing-Funktion in Spaltenpositionen, und Ihre Textmatrix wird entsprechend dem zu analysierenden Dokument (Zeilenposition) mit Daten (Häufigkeiten, dh) gefüllt.

user20370
quelle