将字符串和字符串列表提供给keras标记生成器有什么区别?

问题描述

我正在与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不要将其作为法律依据提及。存在执行字符级标记的合法方法。