Keras Tokenizer num_words 指定了啥?

Posted

技术标签:

【中文标题】Keras Tokenizer num_words 指定了啥?【英文标题】: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

【问题讨论】:

【参考方案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) 不会返回任何内容 开发人员的有趣决定

以上是关于Keras Tokenizer num_words 指定了啥?的主要内容,如果未能解决你的问题,请参考以下文章

keras.preprocessing.text.Tokenizer

自然语言处理 - 标记化 1. NLP 零到英雄 Natural Language Processing - Tokenization

如何使用 Tokenizer (Keras)?无法在角色级别生成令牌

keras.tokenizer.texts_to_sequences 和词嵌入有啥区别

ImportError: cannot import name 'Tokenizer' from 'keras_bert'

如何将 SOS 令牌添加到 Keras 标记器?