问题描述
我正在与keras.preprocessing
一起使用标记化语句,在keras.preprocessing.text.Tokenize
中遇到了意外情况。当我给它一个字符串时,word_index
的输出是一个包含单个字符及其索引的字典,但对于列表,word_index
的输出是一个单词字典(由空格分隔)。
为什么会这样?
用于令牌生成器输入的字符串:
from keras.preprocessing.text import Tokenizer
text = "Keras is a deep learning and neural networks API by François Chollet"
tokenizer = Tokenizer()
tokenizer.fit_on_texts(text) #input of tokenizer as string
print(tokenizer.word_index)
>>> {'e': 1,'a': 2,'n': 3,'r': 4,'s': 5,'i': 6,'l': 7,'o': 8,'k': 9,'d': 10,'p': 11,'t': 12,'g': 13,'u': 14,'w': 15,'b': 16,'y': 17,'f': 18,'ç': 19,'c': 20,'h': 21}
令牌生成器输入列表:
from keras.preprocessing.text import Tokenizer
text = ["Keras is a deep learning and neural networks API by François Chollet"]
tokenizer = Tokenizer()
tokenizer.fit_on_texts(text) #input of tokenizer as list
print(tokenizer.word_index)
>>> {'keras': 1,'is': 2,'a': 3,'deep': 4,'learning': 5,'and': 6,'neural': 7,'networks': 8,'api': 9,'by': 10,'françois': 11,'chollet': 12}
解决方法
文档声明使用字符串列表或字符串列表。没有提及是否允许您将字符串作为输入传递,因此您所做的很可能是未被捕获的未定义行为。
当您传递字符串作为输入时,Keras会将其解释为字符级标记。无论哪种方式,如果您要执行字符级标记,最好在实例化char_level=True
类时传递Tokenizer
。
TL; DR:不传递字符串。 docs不要将其作为法律依据提及。存在执行字符级标记的合法方法。