File io Keras/TensorFlow:如何转换文本以用作输入?

File io Keras/TensorFlow:如何转换文本以用作输入?,file-io,tensorflow,keras,File Io,Tensorflow,Keras,在过去的几天里,我一直在阅读教程,但它们似乎都是从“我从这个预先准备好的数据集中获得了数据,我们走吧”这一步开始的 我想做的是拿一组我标记过的电子邮件,找出如何将它们作为培训和评估数据放入模型中 电子邮件示例: 0 0 0 0 0 0 0 0 0 0 0 0 32192 6675 16943 1380 433 8767 2254 8869 8155 我有一个文件夹的电子邮件(一个文件每封电子邮件)为每个垃圾邮件和非垃圾邮件: /spam/ 93451.txt ... /not-

在过去的几天里,我一直在阅读教程,但它们似乎都是从“我从这个预先准备好的数据集中获得了数据,我们走吧”这一步开始的

我想做的是拿一组我标记过的电子邮件,找出如何将它们作为培训和评估数据放入模型中

电子邮件示例:

0 0 0 0 0 0 0 0 0 0 0 0 32192 6675 16943 1380 433 8767 2254 8869 8155
我有一个文件夹的电子邮件(一个文件每封电子邮件)为每个垃圾邮件和非垃圾邮件:

/spam/
    93451.txt
    ...
/not-spam/
    112.txt
    ...
如何让Keras读取这些数据


或者,如何生成CSV或其他格式的文件以供输入?

有很多方法可以做到这一点,但我会按以下顺序尝试:

  • 您需要为数据集中的所有单词创建字典,然后为每个单词分配一个标记。当输入到网络时,您可以将其转换为热编码形式
  • 您可以通过将输入文本输入到预先训练的
    单词嵌入模型
    手套
    word-2-vec
    来转换输入文本,并获得
    嵌入
    向量
  • 您可以使用1中的
    one hot
    向量,并训练自己的
    嵌入

    我从您的任务描述中了解到(如果我错了,请指导我),您需要将文本分为垃圾邮件类别或非垃圾邮件类别。
    基本上,如果您想创建通用文本数据分类输入解决方案,您的 数据输入阶段代码应包含3个步骤: 1.阅读文件夹列表(“垃圾邮件”,“非垃圾邮件”在您的情况下),并将每个文件夹迭代到文件列表中
    最后你应该有:
    a) 包含(
    label\u id->label\u name
    )的字典
    因此,在您的情况下,您应该继续使用(
    0->spam,1->not_spam

    b) 一对(文件内容、标签)。
    正如您所理解的,这超出了keras和tensorflow的范围。这是典型的python代码
    2.对于每个部分(文件、内容、标签),您应该处理第一个元素,这通常是最有趣的部分。 在您的示例中,我可以看到
    0 0 0 0 0 0 0 0 32192 6675 16943 1380 433 8767 2254 8869 8155

    因此您已经有了单词的索引,但它们是文本形式的。您只需将字符串转换为包含300项(消息中的单词)的数组
    对于进一步的文本机器学习项目,我建议使用原始文本数据作为源,并使用
    tf.contrib.learn.preprocessing.VocabularyProcessor
    将其转换为单词索引
    3.将标签(类别)转换为一个热的向量。 因此,在这些步骤的末尾,您有一对(
    word\u index\u as\u array,label\u as\u one\u hot
    )。 然后您可以使用这些数据作为培训的输入数据。
    当然,您可以将此元组分成两部分,将前80%的数据视为训练集,将20%的数据视为测试集(请不要关注80/20,这只是一个样本)。
    你可以看看这些例子。它们非常直截了当,可能会对您有所帮助,因为它们是从一开始的。

    另外,请查看示例中的
    load\u data\u和\u labels()
    方法。这与你的情况非常相似(肯定/否定)。

    我已经标记了这些词。我的问题是,我不知道将数据放入什么格式,也不知道如何将其实际放入脚本中。我查了一个热的,但这也帮不了我。我是生成一个包含标签的列的CSV,还是生成一个包含文本的列的CSV,还是生成一个包含电子邮件中300个单词中每个单词一个col的CSV,或者其他什么?我可以告诉它自己读取每个文件吗?在您的CSV中,每个输入(电子邮件)都应该有一列
    标签
    和300列,其中包含标记化的单词。