如何让TensorFlow Keras Tokenizer仅按空格拆分生成令牌?
问题原因
你遇到的拆分异常是因为Tokenizer除了split参数外,还有两个默认参数会提前处理文本,优先级高于空格拆分规则:
- 默认开启
lower=True:会自动将所有文本转为小写,这也是你看到词索引里的ab、cdefghijklmnopqrstuvwxyz都是小写的原因 - 默认配置了
filters过滤规则:默认会把.等标点符号先替换为空格,相当于你原文本里的AB.CDEFGHIJKLMNOPQRSTUVWXYZ在拆分前已经被处理成了ab cdefghijklmnopqrstuvwxyz,自然会被拆成两个独立token
解决方法
初始化Tokenizer时,把filters设为空字符串关闭特殊字符过滤,同时可以根据需求决定是否关闭自动转小写的lower参数,修改后的代码如下:
from tensorflow.keras.preprocessing.text import Tokenizer # 关闭过滤规则、仅按空格拆分,如果需要保留原大小写可以再加lower=False tokenizer = Tokenizer(num_words=200, split=" ", filters="") sample_text = ["This is a sample sentence1 created by sample person AB.CDEFGHIJKLMNOPQRSTUVWXYZ", "This is another sample sentence1 created by another sample person AB.CDEFGHIJKLMNOPQRSTUVWXYZ"] tokenizer.fit_on_texts(sample_text) print(tokenizer.texts_to_sequences(["sample person AB.CDEFGHIJKLMNOPQRSTUVWXYZ"])) # 验证词索引 print(tokenizer.index_word[8])
运行后会得到你期望的输出:
[[1, 7, 8]] ab.cdefghijklmnopqrstuvwxyz
如果需要保留原文的大写格式,只需要在初始化时额外添加lower=False参数即可。
内容的提问来源于stack exchange,提问作者data_person
相关产品推荐
相关产品推荐

