0
你的例子很不合适,它比一些缺失的停顿词要糟糕得多。
如果你重新阅读[keras.datasets.imdb.load_data]方法的start_char
、oov_char
和index_from
参数的文档,它们的解释如下:
start_char
: int. 序列的开始将用这个字符标记。 设置为1,因为0通常是填充字符。
oov_char
: int.由于num_words或skip_top限制而被剪掉的单词将被这个字符替换。
index_from
: int.使用此索引和更高的索引来索引实际单词。
你的字典假定单词索引从1开始。
但是我的keras返回<START>
和<UNKNOWN>
作为索引1和2。 (它假设你将使用0作为<PADDING>
)。
下面的语句对我有用:
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
word_to_id["<UNUSED>"] = 3
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] ))
标点符号丢失了,仅此而已:
"<START> this film was just brilliant casting <UNK> <UNK> story
direction <UNK> really <UNK> the part they played and you could just
imagine being there robert <UNK> is an amazing actor ..."
收藏