过去几天我一直在阅读教程,但他们似乎都是从“我从这个预先准备好的数据集中获取数据,让我们走了”的步骤开始的。
我正在尝试做的是收集一组我已经标记化的电子邮件,并弄清楚如何将它们作为培训和评估数据加入模型。
电子邮件示例:
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或其他要用于输入的格式?
答案 0 :(得分:1)
有很多方法可以做到这一点,但是请按顺序尝试:
one-hot
编码形式。 word embeddings model
glove
或word-2-vec
,并获取embeddings
向量。one-hot
向量并训练自己的embeddings
。 答案 1 :(得分:0)
正如我从您的任务说明中所理解的(如果我错了,请指导我),您需要将文本分类为垃圾邮件或非垃圾邮件类别。
基本上,如果你想创建通用文本数据分类输入解决方案,你的
数据输入阶段代码应包含3个步骤:
1.阅读文件夹列表("垃圾邮件","不是垃圾邮件"在您的情况下)并将每个文件夹迭代到文件列表。
最后你应该有:
a)包含(label_id -> label_name
)的字典。
所以在你的情况下,你应该留在(0-> spam, 1->not_spam
)。
b)一对(file_content,label)。
如您所知,这超出了keras和tensorflow的范围。这是典型的蟒蛇'码。
2.对于每个部分(file_content,label),您应该处理第一个元素,这通常是最有趣的部分。
在您的示例中,我可以看到0 0 0 0 0 0 0 0 0 0 0 0 32192 6675 16943 1380 433 8767 2254 8869 8155
。
因此,您已经拥有了单词的索引,但它们都是文本形式。您所需要的只是将字符串转换为具有300个项目的数组(消息中的单词)。
对于进一步的文本机器学习项目,我建议使用原始文本数据作为源,并使用tf.contrib.learn.preprocessing.VocabularyProcessor
将其转换为单词索引。
3.将标签(类别)转换为one-hot
向量。
所以在这一步结束时你有一对(word_indexes_as_array, label_as_one_hot
)。
然后,您可以将这些数据用作培训的输入数据
当然,您可以将此元组分为两部分,将前80%的数据视为训练集,将20%的数据视为测试集(请不要关注80/20,数字只是样本)。
您可以查看text classification with keras示例。它们相当简单,可能对您有帮助,因为它们从data input step开始
另外,请查看data input step示例中的load_data_and_labels()
方法。这与你的情况非常相似(正面/负面)。