Python 如何预处理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,

我正在研究情绪分析问题,有一个数据集,与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, 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方法。

如前所述

  • 评论已经过预处理,每个评论都被编码为一系列单词索引(整数)。e、 g一个句子被预处理,比如
    我回家=>[1,3,11,15]
    。这里的
    1
    是单词
    I

  • 单词在数据集中按总频率索引。i、 e如果您使用的是CountVectorizer,则需要按照频率的降序对词汇表进行排序。然后是对应于词汇索引的单词顺序


  • 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:])