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
来转换输入文本,并获得嵌入
向量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列,其中包含标记化的单词。