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'