Python 如何预处理Keras IMDB数据集数据?
我正在研究情绪分析问题,有一个数据集,与Kears imdb数据集非常相似。 当我加载Keras的imdb数据集时,它返回单词索引的序列Python 如何预处理Keras IMDB数据集数据?,python,keras,Python,Keras,我正在研究情绪分析问题,有一个数据集,与Kears imdb数据集非常相似。 当我加载Keras的imdb数据集时,它返回单词索引的序列 (X_train, y_train), (X_test, y_test) = imdb.load_data() X_train[0] [1, 14, 22, 16, 43, 530, 973, 1622, 1385, 65, 458, 4468, 66, 3941, 4, 173, 36, 256, 5, 25, 100, 43, 838, 112, 50,
(X_train, y_train), (X_test, y_test) = imdb.load_data()
X_train[0]
[1, 14, 22, 16, 43, 530, 973, 1622, 1385, 65, 458, 4468, 66, 3941, 4, 173, 36, 256, 5, 25, 100, 43, 838, 112, 50, 670, 22665, 9, 35, 480, 284, 5, 150, 4, 172, 112, 167, 21631, 336, 385, 39, 4, 172, 4536, 1111, 17, 546, 38, 13, 447, 4, 192, 50, 16, 6, 147, 2025, 19, 14, 22, 4, 1920, 4613, 469, 4, 22, 71, 87, 12, 16, 43, 530, 38, 76, 15, 13, 1247, 4, 22, 17, 515, 17, 12, 16, 626, 18, 19193, 5, 62, 386, 12, 8, 316, 8, 106, 5, 4, 2223, 5244, 16, 480, 66, 3785, 33, 4, 130, 12, 16, 38, 619, 5, 25, 124, 51, 36, 135, 48, 25, 1415, 33, 6, 22, 12, 215, 28, 77, 52, 5, 14, 407, 16, 82, 10311, 8, 4, 107, 117, 5952, 15, 256, 4, 31050, 7, 3766, 5, 723, 36, 71, 43, 530, 476, 26, 400, 317, 46, 7, 4, 12118, 1029, 13, 104, 88, 4, 381, 15, 297, 98, 32, 2071, 56, 26, 141, 6, 194, 7486, 18, 4, 226, 22, 21, 134, 476, 26, 480, 5, 144, 30, 5535, 18, 51, 36, 28, 224, 92, 25, 104, 4, 226, 65, 16, 38, 1334, 88, 12, 16, 283, 5, 16, 4472, 113, 103, 32, 15, 16, 5345, 19, 178, 32]
但是,我想了解,这个序列是如何构造的。
在我的数据集中,我使用了CountVectorizer
,在数据集中使用ngram\u range=(1,2)
来标记单词,但我想尝试复制Keras方法。如前所述
我回家=>[1,3,11,15]
。这里的1
是单词I
imdb数据集中的单词将替换为一个整数,表示它们在数据集中出现的频率。当您第一次调用load_data函数时,它将下载数据集
查看值是如何计算的,让我们从源代码(末端提供链接)
获取代码片段。 x_train是长度为x_train的列表xs中的numpy数组 xs是由x_训练和x_测试中的所有单词组成的列表,首先从数据集中提取每个项目(电影评论),然后提取单词。然后将每个单词的位置添加到索引_中,从该索引_中指定要从中开始的实际索引(默认为3),然后添加到起始字符(默认为1,以便值从1开始,因为填充将以零完成) numpy阵列x_列、y_列、x_测试、y_测试以类似方式形成,并由load_数据函数返回 这里提供了源代码我明白了,谢谢!但是,例如,这种编码对TF-IDF究竟有什么好处呢。这被认为是更先进的,单词的CountVectorizerorder可以被保留,所以你们可以使用序列模型。此外,您可以很容易地只过滤前n个常用词,因为单词索引已经按频率排序了。我查阅了有关预处理的官方文档。我尝试使用one_hot、hashing和Tokenizer.API对您上面发送的句子进行编码。这些方法都没有显示编码的结果。但是如果我们指定num_words=10。然后我们实际上只得到前6个值,因为1,2,3代表开始,oov_char,未使用。如何解决这个问题并获得所有前10个频繁值。
idx = len(x_train)
x_train, y_train = np.array(xs[:idx]), np.array(labels[:idx])
x_test, y_test = np.array(xs[idx:]), np.array(labels[idx:])