如何使用 Knime 对文本进行分类

How to classify text with Knime

我正在尝试使用 knime 和 knime-labs 深度学习插件对一些数据进行分类。

我的数据库中有大约 16.000 种产品,但我知道其中的大约 700 种产品的类别。

我正在尝试使用某种 DM(数据挖掘)技术尽可能多地进行分类。我已经下载了一些插件到 knime,现在我有一些深度学习工具作为一些文本工具。

这是我的工作流程,我将用它来解释我在做什么:

我正在将 product 名称转换为矢量,而不是应用到其中。 在我用 DeepMLP 训练 DL4J 学习器之后。 (我不是很了解这一切,这是我认为我得到最好结果的那个)。然后我尝试在同一数据集中应用该模型。

我以为我会得到预测的结果类。但是我得到一个带有 output_activations 的列,看起来有一对双打。对此列进行排序时,我得到一些彼此接近的相关日期。但我期待得到 类.

这是结果的打印 table,在这里您可以看到带有输入的输出。

在列选择中,它只获取 converted_document 并选择 des_categoria 作为标签列(学习节点配置)。在 Predictor 节点中,我检查了 "Append SoftMax Predicted Label?"

nom_produto 是我试图用来预测 des_categoria 的文本列列它是产品类别。

我真的是 DM 和 DL 的新手。如果你能帮我解决我想做的事情,那就太好了。也可以自由地建议一些学习 material 关于试图实现的目标

PS: 我也试过将它应用到未分类数据(17,000个产品)中,但我得到了相同的结果。

我不会回答这个问题的工作流程,因为它不会是一个简单的问题。但是,请务必在 KNIME 服务器上找到文本挖掘示例,即使用词袋方法的示例。

任务

产品到类别的映射应该是一项直接的数据挖掘任务,因为解释目标变量的信息以准详尽的方式提供。不过,根据要训练的类别数量,您可能需要从 700 多个实例中学习。

一些资源

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

  1. Introduction on Information Retrieval,特别是第 13 章;
  2. Data Science for Business 是对数据挖掘的优秀介绍,包括文本挖掘(第 10 章),也不要忘记关于相似性的章节(第 6 章);
  3. Machine Learning with R的优点是足够容易理解(第4章提供了一个用R代码进行文本分类的例子)。

预处理

首先,您必须对产品标签进行一些预处理。为此目的使用 KNIME 的文本分析预处理节点,即在您使用 Strings to Document:

转换产品标签之后
  • Case ConvertPunctuation ErasureSnowball Stemmer
  • 您可能不需要 Stop Word Filter,但是,可能会有准停用词,例如 "product",您可能需要使用 Dictionary Filter;[= 手动删除它们89=]
  • 注意不要在未先测试其影响的情况下使用以下任何一项:N Chars Filterg 可能是一个有用的词),Number Filter(数字可能表示数量,这可能对分类有用)。

如果您在相关节点上遇到任何问题(例如,Punctuation Erasure 可能会非常棘手,这要归功于分词器),您始终可以在转换 Strings to Document 之前使用正则表达式应用 String Manipulation .

保持简短:查找 table

您可以根据 700 个训练实例构建查找 table。 Data mining techniques 一书和资源 (2) 详细介绍了这种方法。如果任何模型的性能比查找差 table,您应该放弃该模型。

最近的邻居

对于这项任务,神经网络可能有点矫枉过正。

K Nearest Neighbor 节点开始(应用字符串距离,例如 Cosine、Levensthein 或 Jaro-Winkler)。这种方法需要最少的数据整理。至少,它会提供一个优秀的基线模型,所以绝对值得一试。

您需要调整参数 k 并试验距离类型。 Parameter Optimization Loop 对将帮助您优化 k,您可以在所述循环内包含一个 Cross-Validation 元节点以获得给定 k 的预期性能的估计,而不是每个 k 值仅一个点估计.使用 Cohen's Kappa 作为优化标准,如资源编号 (3) 所建议的那样,可通过 Scorer 节点获得。

参数调整后,您必须使用另一个 Cross-Validation 元节点评估模型的相关性,然后使用包含 Scorer 的循环对来计算关于每次迭代的性能指标,最终使用 Statistics。 Kappa 是此任务的便捷指标,因为目标变量包含许多产品类别。

不要忘记根据查找 table 测试其性能。

下一步是什么?

如果 lookup table 或 k-nn 适合您,那么就没有其他要添加的了。

如果这些方法中的任何一个失败了,您可能想要分析它失败的确切案例。此外,训练集大小可能太小,因此您可以手动分类另外数百或数千个实例。

如果在增加训练集大小后,您仍然在处理一个糟糕的模型,您可以尝试使用词袋方法和 Naive Bayes 分类器(请参阅信息检索参考第 13 章)。这里没有空间详细说明词袋方法和朴素贝叶斯,但您会发现上面的资源可用于此目的。

最后一点。就个人而言,我发现 KNIME 的 Naive Bayes 节点表现不佳,可能是因为它没有实现拉普拉斯平滑。但是,KNIME 的 R LearnerR Predictor 节点将允许您使用 R 的 e1071 包,如资源 (3) 所示。