【问题标题】:Words used in Bag of words along with frequency in keras tokenizer词袋中使用的词以及 keras 标记器中的频率
【发布时间】:2020-05-26 15:27:32
【问题描述】:

我只想知道,如何识别或获取单词列表及其频率,这些单词被 keras 标记器考虑为词袋。 考虑下面的例子

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

这里我选择 vocab size 为 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

【问题讨论】:

    标签: tensorflow keras tokenize


    【解决方案1】:

    您可以使用m_tokenizer.word_counts访问原文中找到的所有单词的计数器。它返回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
    

    【讨论】:

    • 谢谢马可。是否有任何内置功能或者我们需要外部计数器?
    • 计数器由分词器计算。使用 m_tokenizer.word_counts 您可以访问所有语料库中单词的计数
    【解决方案2】:

    您可以使用tokenizer的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)
    

    【讨论】:

      猜你喜欢
      • 2017-03-08
      • 2021-05-12
      • 2018-01-29
      • 1970-01-01
      • 2013-03-09
      • 2014-01-12
      • 1970-01-01
      • 2022-11-26
      • 1970-01-01
      相关资源
      最近更新 更多