Tokenizer()中相同频率词的排名标准以及Keras中Tokenizer()。texts_to_matrix()的工作

时间:2019-12-29 04:13:41

标签: python tensorflow keras

对于文本列表,

sent = ["I am whatever you say I am and if I wasn't, why would you say I am" , 
        'but but but, anyways, it is still me because I am me']

tokenizer_obj = Tokenizer(num_words=15)

tokenizer_obj.fit_on_texts(sent)

您从tokenizer_obj.texts_to_sequences(sent)那里得到了答案

>>> [[1, 2, 7, 4, 5, 1, 2, 8, 9, 1, 10, 11, 12, 4, 5, 1, 2],
     [3, 3, 3, 13, 14, 6, 1, 2, 6]] 

并且来自tokenizer_obj.word_index,它是基于频率as的单词字典

{'i': 1,
 'am': 2,
 'but': 3,
 'you': 4,
 'say': 5,
 'me': 6,
 'whatever': 7,
 'and': 8,
 'if': 9,
 "wasn't": 10,
 'why': 11,
 'would': 12,
 'anyways': 13,
 'it': 14,
 'is': 15,
 'still': 16,
 'because': 17}

我了解到,倾斜是基于最频繁的单词进行的,但是如果出现平局并且我的情况是字典中的单词出现,那么所有单词的频率都是1。这样做的标准是什么,因为我看不到任何模式。

加上代码,tokenizer_obj.texts_to_matrix(sent)返回一个二进制二进制格式

>>> array([[0., 1., 1., 0., 1., 1., 0., 1., 1., 1., 1., 1., 1., 0., 0.],
           [0., 1., 1., 1., 0., 0., 1., 0., 0., 0., 0., 0., 0., 1., 1.]])

那代表什么?

1 个答案:

答案 0 :(得分:1)

让我们举一个简单的例子。

sent = ["I am whatever you say say"]

如果频率上有平局,则下一行将是出现的单词的“顺序”。首先出现的单词获得较低的ID。您可以使用以下示例对此进行验证。

tokenizer_obj = Tokenizer(num_words=6)
tokenizer_obj.fit_on_texts(sent)
print(tokenizer_obj.word_index)

哪个给

>>> {'say': 1, 'i': 2, 'am': 3, 'whatever': 4, 'you': 5}

在这里您可以看到,“ say”(最常用)一词获得的ID最低,其余的后面是它们在语料库中出现的顺序。

texts_to_matrix做什么?

它只是一个长为二进制向量(num_words)个元素。每个索引处的值指示数据中是否存在该单词(具有索引指示的ID)。例如。如果我们使用单词“ I”(其ID为2),则索引2处的元素将设置为1。

print(tokenizer_obj.texts_to_matrix(sent))
>>> [[0. 1. 1. 1. 1. 1.]]

您可能会注意到前导0。0是keras令牌生成器中的反向ID,用于指示填充。因此,只有在您的句子中有填充时,该值才会变为1。