Tensorflow 分词器问题。 num_words 到底做什么?

问题描述 投票:0回答:1

执行此代码时,我得到 11937,但我不应该得到 10.000 吗? 如果我不应该,我有几个后续问题:

  1. num_words 有什么意义?
  2. 我得到的数字11937代表什么?
  3. 如何限制词汇量?
MAX_WORDS_COUNT = 10000                 
WIN_SIZE   = 1000                       
WIN_HOP    = 100                        

tokenizer = Tokenizer(num_words=MAX_WORDS_COUNT, filters='!"#$%&()*+,-–—./…:;<=>?@[\\]^_`{|}~«»\t\n\xa0\ufeff',
                      lower=True, split=' ', oov_token='unkown_word', char_level=False, )

tokenizer.fit_on_texts(x_data)

items = list(tokenizer.word_index.items())
print(len(items))

我期望输出为 10.000,因为我相信 num_words 限制了词汇量的大小。

如果需要,我可以提供我的 Colab 笔记本中的完整代码。

python tensorflow machine-learning tokenize
1个回答
0
投票

当您在 Tokenizer 构造函数中设置 num_words=MAX_WORDS_COUNT 时,这意味着 Tokenizer 将仅保留词汇表中 MAX_WORDS_COUNT 个最常见的单词。但是,实际词汇量可能小于或大于 MAX_WORDS_COUNT,具体取决于输入数据中存在的唯一单词 (

x_data
)。

关于您的具体问题:

  1. num_words 的目的是根据词频限制词汇表中保留的最大单词数。它通过关注最频繁的单词来帮助降低输入数据的维度。

  2. 您得到的输出数字 11937 代表输入数据中唯一单词的总数 (

    x_data
    )。这意味着您的文本语料库中有 11937 个不同的单词。

  3. 要将词汇表的大小限制为特定数字,您可以在 Tokenizer 构造函数中使用 num_words 参数,就像使用 MAX_WORDS_COUNT = 10000 一样。但是,如果输入数据中唯一单词的实际数量小于 MAX_WORDS_COUNT ,词汇量大小将等于唯一单词的数量。

如果您想严格限制词汇量为 MAX_WORDS_COUNT (例如 10000),您可以按如下方式修改代码:

MAX_WORDS_COUNT = 10000
WIN_SIZE = 1000
WIN_HOP = 100

tokenizer = Tokenizer(num_words=MAX_WORDS_COUNT, filters='!"#$%&()*+,-–—./…:;<=>?@[\\]^_`{|}~«»\t\n\xa0\ufeff',
                  lower=True, split=' ', oov_token='unkown_word', char_level=False)

tokenizer.fit_on_texts(x_data)

top_words = dict(list(tokenizer.word_index.items())[:MAX_WORDS_COUNT])
print(len(top_words))

在此修改后的代码中,在输入数据上拟合分词器后,我们使用 list(tokenizer.word_index.items())[:MAX_WORDS_COUNT] 从 word_index 字典中提取前 MAX_WORDS_COUNT 个单词。这可确保我们的词汇表中最多有 MAX_WORDS_COUNT 个单词。

print(len(top_words)) 的输出现在将限制为 MAX_WORDS_COUNT (在本例中为 10000)或更少,具体取决于输入数据中唯一单词的实际数量。

我希望这能解答您的疑问!

© www.soinside.com 2019 - 2024. All rights reserved.