如何使用 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 仅对 CSV 文件的第一行进行标记
IndexError: List Index out of range Keras Tokenizer
keras.preprocessing.text.Tokenizer