我的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]怎么样?
有没有人试图解决这个问题?
答案 0 :(得分:0)
正如您在Keras imdb soure code和此answer中所看到的,它将index_from添加到每个单词的原始索引中。因此,因为没有id_to_word [0],所以id_to_word [3]应该为“ UNUSED”,并且第一个有效索引为4 =>代码必须为v + INDEX_FROM