如何使用Knime进行文本分类

我正在尝试使用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个实例来学习。

一些资源

这里有一些资源,只有第一个是真正专门用于文本挖掘的:

  1. 信息检索导论,特别是第13章;
  2. 商业数据科学是对数据挖掘的优秀介绍,包括文本挖掘(第10章),也不要忘记关于相似性的章节(第6章);
  3. 使用R进行机器学习的优势在于足够易懂(第4章提供了一个使用R代码进行文本分类的示例)。

预处理

首先,你需要对产品标签进行一些预处理。为此使用Knime的文本分析预处理节点,即在你使用Strings to Document转换产品标签之后:

  • Case ConvertPunctuation ErasureSnowball Stemmer
  • 你可能不需要Stop Word Filter,然而,可能会有一些类似“产品”的准停用词,你可能需要使用Dictionary Filter手动移除;
  • 在没有测试其影响之前,小心不要使用以下任何一个:N Chars Filterg可能是一个有用的词),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 LearnerR Predictor节点将允许你使用R的e1071包,如资源(3)所示范的。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注