了解功能哈希


10

Wikipedia在描述特征哈希时提供了以下示例;但映射似乎与定义的字典不一致

例如,to3根据字典进行转换,但是将其编码为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]]

Answers:


10

矩阵的构建方式如下:

  • 行代表线
  • 列代表要素

每个输入矩阵(i,j)= k表示:

在第i行中,索引为j的单词出现k次。

So to映射到索引3。它恰好出现在第1行中。一次,m(1,3)= 1。

更多例子

  • likes映射到索引2。它在第一行中恰好出现了两次。所以m(1,2)= 2
  • also 映射到索引6。它不在行1中出现,而是在行2中出现一次。因此m(1,6)= 0和m(2,6)= 1。

但是,在特征哈希中,我们没有字典。我们只有一个哈希函数。在您(1)计算特征的哈希值和(2)每次看到数据点时,将哈希函数给定的索引增加1时,这是否有意义?例如,如下面的@ user20370所述,如果您决定用13位编码特征,并且“ likes”的哈希值是5674,那么索引5674是否会增加1?而且,如果使用较少的位,是否只将5674乘2 ^(#位)并递增该索引?
Vivek Subramanian

1
@VivekSubramanian是的。面临的挑战是找到一个没有冲突(即不同的单词,但哈希值相同)或很少发生冲突的哈希函数。这是计算机科学的研究领域(en.wikipedia.org/wiki/Perfect_hash_function)。
steffen

4

正如Steffen所指出的,示例矩阵对单词在文本中出现的次数进行编码。编码到矩阵中的位置由单词(矩阵上的列位置)和文本(矩阵上的行位置)给出。

现在,哈希技巧的工作方式相同,尽管您不必首先定义包含每个单词的列位置的字典。

实际上,散列函数将为您提供可能的列位置范围(散列函数将为您提供可能的最小值和最大值)以及要编码到矩阵中的单词的确切位置。因此,例如,让我们想象一下,哈希函数将单词“ likes”哈希为数字5674,那么列5674将包含相对于单词“ likes”的编码。

以这种方式,您无需在分析文本之前构建字典。如果您将稀疏矩阵用作文本矩阵,则您甚至不必确切定义矩阵大小。只需通过即时扫描文本,您就可以通过哈希功能将单词转换为列位置,并且文本矩阵将根据您要逐步分析的文档(行位置)填充数据(频率)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.