【问题标题】:Making predictions on text data using keras使用 keras 对文本数据进行预测
【发布时间】:2018-07-30 16:02:04
【问题描述】:

我已经训练并测试了一个用于情绪分析的 CNN。训练和测试数据的准备方式相同,对句子进行标记并给出唯一的整数:

tokenizer = Tokenizer(filters='$%&()*/:;<=>@[\\]^`{|}~\t\n')
tokenizer.fit_on_texts(text)
vocab_size = len(tokenizer.word_index) + 1
sequences = tokenizer.texts_to_sequences(text)

然后预训练手套模型为 CNN 创建嵌入矩阵:

filepath_glove = 'glove.twitter.27B.200d.txt'
glove_vocab = []
glove_embd=[]
embedding_dict = {}

file = open(filepath_glove,'r',encoding='UTF-8')
for line in file.readlines():
    row = line.strip().split(' ')
    vocab_word = row[0]
    glove_vocab.append(vocab_word)
    embed_vector = [float(i) for i in row[1:]] # convert to list of float
    embedding_dict[vocab_word]=embed_vector
   file.close()
  for word, index in tokenizer.word_index.items(): 
 `embedding_matrix[index] = embedding_dict[word]`

此时我还使用测试语句创建了这个矩阵,该矩阵后来作为权重传递到嵌入层:

e= Embedding(vocab_size, 200, input_length=maxSeqLength, weights=[embedding_matrix], trainable=False)(inp)

现在我想重新加载我的模型并使用一些新数据进行测试,但这意味着嵌入矩阵不会包含新数据中的一些单词。这让我想知道,如果在创建嵌入矩阵时我不应该包含测试数据?如果没有,嵌入层如何处理这些新词?这部分类似于这个问题,但我找不到答案: How does the Keras Embedding Layer work if word is not found? 谢谢

【问题讨论】:

  • 能否请您集中讨论一个问题并提供MVCE
  • 已编辑。我希望现在清楚

标签: python keras conv-neural-network prediction sentiment-analysis


【解决方案1】:

这很简单。您正在提供 vocab_size,即嵌入层知道的单词数。如果传递的索引超出了 vocab_size(新词)的范围,它将被忽略,否则 keras 会抛出错误。

这回答了您是否应该为嵌入矩阵包含所有数据的问题。是的,你应该这样做。

【讨论】:

  • 非常感谢..但问题是,如果您需要为每个新数据更改嵌入矩阵,那么拥有一个训练有素的模型有什么意义。理想情况下,我知道它已经包含了您所说的话期望在您的测试数据中有,但有些词总是新的。 Keras 文本到序列只是跳过新词,但我也使用 POS 标签,所以我不想弄乱句子的长度。有没有办法告诉文本序列对所有新词使用特殊整数所以至少句子长度保持不变?
  • 通常的做法是在大型数据集(如维基百科)上训练嵌入,然后将嵌入重新用于您的任务。例如,您可以使用预训练的 Glove、word2vec 或 fastText 嵌入。或者您可以使用子词嵌入。
  • 我正在使用在推文上训练过的 Glove,但问题不在于如果没有找到这些词是经过预训练的 GloVe 模型怎么办。我的问题是我用它从训练集中创建嵌入矩阵。如果测试数据包含您在第一条评论中提到的一些新词怎么办?我该如何处理?谢谢
  • 我不知道我是否理解正确。您只使用在测试用例的训练集中出现的那些手套嵌入?那么解决方案就是使用嵌入矩阵中的所有手套嵌入,而不仅仅是在训练阶段发生的一次。
  • 是的,我正在用训练集中的单词构建嵌入矩阵。我认为这通常是这样发生的。我已经添加了代码。我想解决方案是要么为新测试数据中的所有单词添加嵌入,要么为所有未知单词使用一些特定的索引。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-24
  • 2020-10-30
  • 1970-01-01
  • 2019-11-18
  • 2019-06-07
  • 2021-09-15
相关资源
最近更新 更多