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

Posted

技术标签:

【中文标题】如何使用 Tokenizer (Keras)?无法在角色级别生成令牌【英文标题】:How to use Tokenizer (Keras)? Unable to generate tokens on Character level 【发布时间】:2021-05-05 03:21:03 【问题描述】:

目标:字符级矢量化

问题:输出不是每个字符/字母的唯一数字,而是所有字母都转换为 1

问题:我的代码有什么问题?

我有一个数据框 (df)。其中“左”和“右”列是描述产品的代码,而“匹配”列是否左和右描述相同的产品。

我使用 Keras 的 Tokenizer 在字符级别对输入进行矢量化处理。我所期待的是字母对数字的覆盖,而不是我收到 [1,1,1,1,1.....,1,1]。下划线不具备信息价值。

任何建议我的代码中的错误是什么?

样本数据:

df = pd.DataFrame('left': ['k2____v72___zal81_f45___hl3___', 'vj43__i1____i1____ixk4__cdo9__'],
                   'right': ['zal81_jy9___v72___qo7___zr6___', 'e95___qto54_bx29__sef9__md40__'],
                   'Match': [ 1,0])

看起来像这样:

这是我的代码:

X_train = df['A']
 
from tensorflow.keras.preprocessing.text import Tokenizer

tokenizer = tf.keras.preprocessing.text.Tokenizer(char_level=True,
                                                  num_words = 500,
                                                 lower = False, # input is already in lower case
                                                 filters='_',
                                                 oov_token=True)
tokenizer.fit_on_texts([X_train])

测试和输出:

sequences = tokenizer.texts_to_sequences(["g2____v72___zal81_f45___hl3___"])
print(sequences)
print(tokenizer.word_index)

返回:

【问题讨论】:

【参考方案1】:

这是因为您将X_train 作为列表传递,您应该这样做:

tokenizer.fit_on_texts(X_train)

这将产生:

[[1, 7, 2, 2, 2, 2, 8, 11, 7, 2, 2, 2, 12, 13, 14, 3, 2, 15, 4, 16, 2, 2, 2, 17, 9, 10, 2, 2, 2]]
True: 1, '_': 2, '1': 3, '4': 4, 'i': 5, 'k': 6, '2': 7, 'v': 8, 'l': 9, '3': 10, '7': 11, 'z': 12, 'a': 13, '8': 14, 'f': 15, '5': 16, 'h': 17, 'j': 18, 'x': 19, 'c': 20, 'd': 21, 'o': 22, '9': 23

【讨论】:

以上是关于如何使用 Tokenizer (Keras)?无法在角色级别生成令牌的主要内容,如果未能解决你的问题,请参考以下文章

Keras Tokenizer 方法究竟做了啥?

Keras Tokenizer 仅对 CSV 文件的第一行进行标记

IndexError: List Index out of range Keras Tokenizer

keras.preprocessing.text.Tokenizer

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

Keras Tokenizer num_words 指定了啥?