【问题标题】:What does Keras Tokenizer num_words specify?Keras Tokenizer num_words 指定了什么?
【发布时间】:2021-01-17 09:13:08
【问题描述】:

鉴于这段代码:

from tensorflow.keras.preprocessing.text import Tokenizer

sentences = [
    'i love my dog',
    'I, love my cat',
    'You love my dog!'
]

tokenizer = Tokenizer(num_words = 1)
tokenizer.fit_on_texts(sentences)
word_index = tokenizer.word_index
print(word_index)

无论是num_words=1 还是num_words=100,当我在我的jupyter notebook 上运行这个单元格时,我得到相同的输出,我似乎无法理解它在标记化方面有什么不同。

{“爱”:1,“我”:2,“我”:3,“狗”:4,“猫”:5,“你”:6}

【问题讨论】:

    标签: python tensorflow machine-learning keras nlp


    【解决方案1】:

    word_index 它只是一个单词到 ids 的映射,用于传递的整个文本语料库,无论 num_words 是什么

    区别在用法上很明显。例如,如果我们调用 texts_to_sequences

    sentences = [
        'i love my dog',
        'I, love my cat',
        'You love my dog!'
    ]
    
    tokenizer = Tokenizer(num_words = 1+1)
    tokenizer.fit_on_texts(sentences)
    tokenizer.texts_to_sequences(sentences) # [[1], [1], [1]]
    

    只返回love id,因为出现频率最高的词

    改为

    sentences = [
        'i love my dog',
        'I, love my cat',
        'You love my dog!'
    ]
    
    tokenizer = Tokenizer(num_words = 100+1)
    tokenizer.fit_on_texts(sentences)
    tokenizer.texts_to_sequences(sentences) # [[3, 1, 2, 4], [3, 1, 2, 5], [6, 1, 2, 4]]
    

    返回频率最高的100个词的id

    【讨论】:

    • 谢谢!我之前误会了,以为出现频率较低的单词不会被赋予单词索引。所以每个单词都被索引了,但是在转换为序列时只返回最常用的单词?
    • 这是一个简单的预定义功能...您可以在此处找到更多关于使用的信息:tensorflow.org/api_docs/python/tf/keras/preprocessing/text/…。基于这些方法的逻辑总是一样的……做出最常出现的东西,这是机器学习中经常应用的自然规律。不要忘记投票并接受它;-)
    • 为什么是1+1?当您使用 1 作为最常用的词时会发生什么?
    • @NicolasGervais 遵循文档“仅保留最常见的 num_words-1 单词”,因此 +1 似乎是合理的。考虑到我们的示例,Tokenizer(num_words = 1) 不会返回任何内容
    • 开发人员的有趣决定
    猜你喜欢
    • 2018-02-22
    • 2020-08-28
    • 1970-01-01
    • 2019-01-28
    • 1970-01-01
    • 2021-04-07
    • 1970-01-01
    • 2018-02-20
    • 2019-02-23
    相关资源
    最近更新 更多