Bag of words 中使用的单词以及 keras tokenizer 中的频率

Words used in Bag of words along with frequency in keras tokenizer

我只是想知道,如何识别或获取单词列表以及它们被 keras tokenizer 考虑用于词袋的频率。 考虑下面的例子

from tensorflow.keras.preprocessing import text
my_list = [["a", "a", "a", "b","c"], ["b", "c","c", "b", "c" "a"]]

这里我选择的词汇大小为 2。一个将用于填充,另一个将用于 my_list 中频率最高的单词。

m_tokenizer = text.Tokenizer(num_words=2)
m_tokenizer.fit_on_texts(my_list)

使用分词器的词袋

bow = tokenizer.text_to_matrix(my_list)

鞠躬

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

我可以很容易地得到所有单词的字典以及标记器内部使用的索引。 m_tokenizer.word_index

{'a': 1, 'c': 2, 'b': 3}

现在我想知道当我选择 num_words=2 时,分词器使用了哪些词以及它们在语料库中的频率来构建词袋?(显然第一个用于填充) 举例来说,这里使用的是 my_list 中的最大频率,它用于形成弓形。现在我可以使用一种方法来帮助我获取字典(或者可能是什么东西),它给我

 {"a":4} # as count of a is 4 is my_list

您可以使用 m_tokenizer.word_counts 访问原文中找到的所有单词的计数器。它 returns OrderedDict([('a', 4), ('b', 3), ('c', 4)])

如果您想将字典限制在您定义的最大值 num_words 上,您可以自动执行:

for i, (word, count) in enumerate(m_tokenizer.word_counts.items()):
    if i < m_tokenizer.num_words-1:
        print((word, count)) # print or store in an object

您可以使用分词器的count模式来生成所需的列表

bow = m_tokenizer.texts_to_matrix(my_list, mode='count')
req_dict = {}
for key,value in m_tokenizer.word_index.items():
   if int(value) < num_words:
       req_dict[key] = int(bow[0][int(value)])
print(req_dict)