我正在尝试使用Knime和Knime-labs深度学习插件对一些数据进行分类。
我的数据库中有大约16,000个产品,但我知道其中大约700个的类别。
我尝试使用一些数据挖掘(DM)技术对尽可能多的产品进行分类。我已经下载了一些Knime插件,现在我有一些深度学习工具和一些文本工具。
这是我的工作流程,我将用它来解释我在做什么:
我将产品名称转换为向量,然后应用到其中。之后,我使用DL4J学习器和DeepMLP进行训练。(我不是很理解这一切,这是我认为效果最好的一个)。然后我尝试在同一数据集上应用模型。
我以为我会得到预测类别的结果。但我得到的是一列带有output_activations的输出,看起来是一对双精度数。当我对这列进行排序时,我发现了一些彼此接近的相关数据。但我期待得到的是类别。
这是结果表的打印输出,你可以看到输入和输出。
在列选择中,只选择了converted_document和作为标签列的des_categoria(学习节点配置)。在预测节点中,我勾选了“附加SoftMax预测标签?”
nom_produto是我试图用来预测产品类别des_categoria的文本列。
我对数据挖掘和深度学习真的很新手。如果你能帮我解决我试图做的事情,那就太好了。你也可以自由推荐一些关于我试图实现的目标的学习资料。
附注:我也尝试将其应用于未分类的数据(17,000个产品),但我得到了相同的结果。
回答:
我不会在这个问题上回答一个工作流程,因为它不会是一个简单的流程。然而,请务必在Knime服务器上找到文本挖掘示例,即使用词袋方法的那个示例。
任务
产品映射到类别应该是一个直接的数据挖掘任务,因为解释目标变量的信息是以近乎详尽的方式提供的。然而,根据要训练的类别数量,你可能需要超过700个实例来学习。
一些资源
这里有一些资源,只有第一个是真正专门用于文本挖掘的:
- 信息检索导论,特别是第13章;
- 商业数据科学是对数据挖掘的优秀介绍,包括文本挖掘(第10章),也不要忘记关于相似性的章节(第6章);
- 使用R进行机器学习的优势在于足够易懂(第4章提供了一个使用R代码进行文本分类的示例)。
预处理
首先,你需要对产品标签进行一些预处理。为此使用Knime的文本分析预处理节点,即在你使用Strings to Document
转换产品标签之后:
Case Convert
、Punctuation Erasure
和Snowball Stemmer
;- 你可能不需要
Stop Word Filter
,然而,可能会有一些类似“产品”的准停用词,你可能需要使用Dictionary Filter
手动移除; - 在没有测试其影响之前,小心不要使用以下任何一个:
N Chars Filter
(g
可能是一个有用的词),Number Filter
(数字可能表示数量,这可能对分类有用)。
如果你在相关节点上遇到任何麻烦(例如,Punctuation Erasure
可能由于分词器的原因变得非常棘手),你总可以在转换为Strings to Document
之前使用带有正则表达式的String Manipulation
。
保持简短和简单:查找表
你可以基于700个训练实例构建一个查找表。书籍数据挖掘技术以及资源(2)详细介绍了这种方法。如果任何模型的表现比查找表差,你应该放弃该模型。
最近邻
神经网络对于这个任务可能过于复杂了。
从一个K Nearest Neighbor
节点开始(应用字符串距离,如余弦、Levensthein或Jaro-Winkler)。这种方法需要最少的数据处理。至少,它将提供一个优秀的基准模型,所以绝对值得一试。
你需要调整参数k并尝试不同的距离类型。Parameter Optimization Loop
对会帮助你优化k,你可以在该循环内包含一个Cross-Validation
元节点,以获得给定k的预期性能估计,而不是每个k值只有一个点估计。使用Cohen’s Kappa作为优化标准,如资源号(3)所建议的,并通过Scorer
节点提供。
参数调整后,你需要使用另一个Cross-Validation
元节点来评估模型的相关性,然后跟进一个包括Scorer
的循环对,以计算每次迭代的性能指标的描述统计,最后使用Statistics
。Kappa是此任务的方便指标,因为目标变量由许多产品类别组成。
不要忘记将其性能与查找表进行比较。
下一步是什么?
如果查找表或k-nn对你有效,那么就没有其他需要添加的了。
如果这些方法中的任何一种失败了,你可能需要分析它失败的具体情况。此外,训练集大小可能太小,所以你可以手动分类另外几百或几千个实例。
如果在增加训练集大小后,你仍然处理一个糟糕的模型,你可以尝试词袋方法和Naive Bayes
分类器(参见信息检索参考文献的第13章)。这里没有空间详细阐述词袋方法和Naive Bayes,但你会发现上面的资源对该目的很有用。
最后一个注意事项。个人而言,我发现Knime的Naive Bayes
节点表现不佳,可能是因为它没有实现拉普拉斯平滑。然而,Knime的R Learner
和R Predictor
节点将允许你使用R的e1071
包,如资源(3)所示范的。