機能ハッシュについて


10

ウィキペディアでは、機能のハッシュについて説明するときに、次の例を提供しています。しかし、マッピングは定義された辞書と一致していないようです

たとえば、辞書に従ってに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

マトリックスは次のように構成されます。

  • 行は線を表す
  • 列は機能を表します

そして、すべてのエントリmatrix(i、j)= kは、次のことを意味します。

行iでは、インデックスjの単語がk回出現します。

したがってto、インデックス3にマッピングされます。1行目に1回だけ表示されます。したがって、m(1,3)= 1です。

その他の例

  • likesはインデックス2にマップされます。最初の行に正確に2回表示されます。したがって、m(1,2)= 2
  • also はインデックス6にマップされます。これは1行目には表示されませんが、2行目に1回表示されます。したがって、m(1,6)= 0およびm(2,6)= 1です。

ただし、特徴ハッシュのコンテキストでは、辞書はありません。ハッシュ関数しかありません。これは、(1)フィーチャのハッシュ値を計算し、(2)データポイントが表示されるたびに、ハッシュ関数によって指定されたインデックスを1ずつ増やすという意味で同様に機能しますか?たとえば、@ user20370に以下のように記載されているように、機能を13ビットでエンコードし、「いいね」のハッシュ値が5674である場合、インデックス5674は1ずつ増加しますか?また、使用するビット数が少ない場合は、5674を2 ^(#ビット)だけ変更して、そのインデックスを増分しますか?
Vivekサブラマニア語2015

1
@VivekSubramanianはい。課題は、衝突のない(つまり、異なる単語で同じハッシュ値)、または衝突がほとんど発生しないハッシュ関数を見つけることです。これはコンピュータサイエンスの研究分野です(en.wikipedia.org/wiki/Perfect_hash_function)。
steffen 2015

4

Steffenが指摘したように、サンプルのマトリックスは、単語がテキストに出現する回数をエンコードします。マトリックスへのエンコードの位置は、単語(マトリックス上の列の位置)とテキスト(マトリックス上の行の位置)によって指定されます。

これで、ハッシュトリックは同じように機能しますが、各単語の列の位置を含む辞書を最初に定義する必要はありません。

実際、可能な列位置の範囲(ハッシュ関数は可能な最小値と最大値を提供します)を与えるハッシュ関数と、マトリックスにエンコードする単語の正確な位置です。たとえば、「いいね」という単語がハッシュ関数によって数値5674にハッシュされたとします。この場合、列5674には「いいね」という単語に関連するエンコーディングが含まれます。

このような方法では、テキストを分析する前に辞書を作成する必要はありません。テキストマトリックスとしてスパースマトリックスを使用する場合は、マトリックスサイズを正確に定義する必要はありません。テキストをスキャンするだけで、その場で、ハッシュ関数によって単語を列の位置に変換し、テキストマトリックスには、段階的に分析しているドキュメント(行の位置)に応じてデータ(頻度)が入力されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.