从Keras的imdb数据集-AGAIN

时间:2019-09-26 15:00:33

标签: python keras

我的keras IMDB数据库有问题。

我从这里开始的代码在这里被接受的答案:

Restore original text from Keras’s imdb dataset

import keras
NUM_WORDS=1000 # only use top 1000 words
INDEX_FROM=3   # word index offset

train,test = keras.datasets.imdb.load_data(num_words=NUM_WORDS, index_from=INDEX_FROM)
train_x,train_y = train
test_x,test_y = test

word_to_id = keras.datasets.imdb.get_word_index()
word_to_id = {k:(v+INDEX_FROM) for k,v in word_to_id.items()}
word_to_id["<PAD>"] = 0
word_to_id["<START>"] = 1
word_to_id["<UNK>"] = 2

id_to_word = {value:key for key,value in word_to_id.items()}
print(' '.join(id_to_word[id] for id in train_x[0] ))

但是,我同意Nate Raw的评论:

  

此代码实际上是不正确的。一行应更改为   word_to_id.items()中的k,v为word_to_id = {k:(v + INDEX_FROM-1)}。的   下载的word_to_id字典中的索引实际上正在开始   在1。因此,当您将INDEX_FROM添加到索引时,它将导致   是id_to_word [2]和id_to_word [4]之间的间隙。没有价值   为id_to_word [3]

如果我遵循此评论并使用INDEX_FROM - 1,则重新构造的评论文本没有任何意义。

id_to_word [3]怎么样?

有没有人试图解决这个问题?

1 个答案:

答案 0 :(得分:0)

正如您在Keras imdb soure code和此answer中所看到的,它将index_from添加到每个单词的原始索引中。因此,因为没有id_to_word [0],所以id_to_word [3]应该为“ UNUSED”,并且第一个有效索引为4 =>代码必须为v + INDEX_FROM