【问题标题】:Preparing text data for Keras (tensorflow)为 Keras 准备文本数据(张量流)
【发布时间】:2021-05-04 13:35:05
【问题描述】:

我刚刚使用 Keras Tokenizer 准备了文本数据

from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
VOCAB_SIZE= 10000
tokenizer = Tokenizer(num_words = VOCAB_SIZE)
tokenizer.fit_on_texts(X_train)

X_train_seq = tokenizer.texts_to_sequences(X_train)
X_test_seq = tokenizer.texts_to_sequences(X_test)

知道所有应该成为相同长度的向量以适应神经网络。我应该如何使用 Keras 的 pad_sequences 函数来做到这一点?这会是(不确定maxlen):

X_train_seq _padded = pad_sequences(X_train_seq, maxlen = VOCAB_SIZE)
X_test_seq _padded = pad_sequences(X_test_seq, maxlen = VOCAB_SIZE)

【问题讨论】:

  • 相同的序列长度不是强制性的,而是批量优化的好习惯。详情请查看this QnA。希望对您有所帮助。
  • @M.Innat 从中得到,我用错了,应该将其设置为训练数据中最长条目的长度或更短。
  • 不需要设置最大的序列长度,而是合理的大小。事实上,它是一种超参数。

标签: python tensorflow keras


【解决方案1】:

是的,您的方法是使用 pad_sequences 选项,从技术上讲,您的代码可以工作,模型也可以运行。

但是,这可能不是实现您想要做的事情的最佳方式:

  • 对于文本数据的一般格言是序列的平均长度远小于完整的词汇表
  • 以您的情况为例,您可以尝试查找序列的平均长度,甚至是最大长度,而且该数字不太可能接近 10,000
  • 如果在您的数据中是这样,则模型实际上看到 非常非常稀疏的数据正在输入,通过选择更好的填充长度可以轻松地将其转换为更密集的形式

所以你可以保持你的代码不变,只需将pad_sequences(...)函数中maxlen的值替换为一个更合理的数字

  • 这可能是您输入的最大长度,或任何其他合适的指标
    • 当您刚开始时,一种可能有用的方法是将其设置为输入数据的平均值加上一个标准差的长度,但很自然,这是特定于任务的

【讨论】:

    猜你喜欢
    • 2016-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-07
    相关资源
    最近更新 更多