首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在凯拉斯的Hashing_trick。它是如何工作的?

在凯拉斯的Hashing_trick。它是如何工作的?
EN

Stack Overflow用户
提问于 2019-08-23 12:13:42
回答 1查看 482关注 0票数 1

需要对keras中的一个热门或散列技巧有基本的了解。

代码语言:javascript
复制
from keras.preprocessing.text import hashing_trick
from keras.preprocessing.text import text_to_word_sequence
# define the document
text = 'The quick brown fox jumped over the lazy dog dog.'
# estimate the size of the vocabulary
words = set(text_to_word_sequence(text))
print(words)
vocab_size = len(words)
print(vocab_size)
# integer encode the document
result = hashing_trick(text, round(vocab_size*1.3), hash_function='md5')
print(text)
print(result)

输出:

敏捷的棕色狐狸从懒惰的狗身上跳过。6、4、1、2、7、5、6、2、6

结论:在这里,每个标记都被分配了一个整数。例如。"quick被分配4“--6

快速--4棕色--1只狐狸--2跳过--7--5只懒惰--2只狗--6

我想了解“狗”和“狗”是如何分配相同的整数6的。如果我错了,请纠正我,请解释它是如何做到的?

EN

回答 1

Stack Overflow用户

发布于 2020-06-17 01:38:26

这是一个hashing collision的例子。散列函数只是对输入单词进行计算的函数。例如,Java的默认哈希函数的作用类似于将第一个字符乘以1,将第二个字符乘以31,将第三个字符乘以31^2,等等,然后将它们全部相加。

不能保证两个不同的字符串不能计算相同的数字。

如果我们选择较小的词汇量,这个问题就会变得更加明显。例如,如果词汇表大小为10,则散列值11可能会“回绕”到1。(应用模运算符将任意大的整数映射到1-vocab_size范围内。)

如果您想让散列变得不太可能,使用vocab_size = 10*len(words)vocab_size = 10*len(words)可以减少冲突的数量。

然而,我不确定更大的词汇表的下游成本是多少。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57619816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档