需要对keras中的一个热门或散列技巧有基本的了解。
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的。如果我错了,请纠正我,请解释它是如何做到的?
发布于 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)可以减少冲突的数量。
然而,我不确定更大的词汇表的下游成本是多少。
https://stackoverflow.com/questions/57619816
复制相似问题