情感分析作为一个监督学习问题

bhupendra_patilbhupendra_patil 管理员、员工、成员职位:168RM数据科学家
2018年11月编辑 知识库

Rapidminer提供多种方式进行情绪分析。情感分析的一个非常常用和强大的解决方案是基于历史信息或训练集训练一个模型,然后使用它构建一个预测模型。如果在过去某些内容被手动编码成不同的情感值,那么历史信息可能是可用的。如果没有,就必须做一个准备步骤,一个好的样本应该手动分类为积极或消极情绪。这是一次性的努力,拥有一个好的训练集将导致更好的模型和更好的预测。

请将此示例与提供的样例流程一起使用(随本文以zip文件的形式附上)

我们今天将使用的训练集示例如下所示。(也在本文附带的zip文件中)

Textmining训练集。png

使用此方法构建模型的过程至少涉及以下操作符

  • 读取Excel(读取样例数据)
  • 从名义到文本(要指定哪个列是文本列,因为Rapidminer“Process Documents…”操作符只作用于文本数据
  • 从数据中处理文件(这是大多数文本处理功能的元过程)
  • 标记(这将根据需要将内容标记为单词,n克等)

处理训练文本的实际过程如下所示

监督情感分析。png

在“Process Documents from Data”操作符中,我们将有一个基本过程的步骤,即Tokenize

Supervised sentimenet basic.png如果需要,我们稍后将改进此子流程。

“Process Documents from Data”的输出将是标记化的示例集和单词列表。

现在,我们可以使用“标记化示例集”构建交叉验证步骤。我们还需要添加“Set Role”操作符来指定我们的Label(即目标)变量。

这个过程应该是这样的。

基本的监督添加验证。png

要了解更多关于验证的信息,请查看这些链接

在验证操作符内部,我们可以使用任何学习器。对于文本挖掘用例,朴素贝叶斯是非常好的和快速的。你也可以尝试SVM或神经网络,但这会增加解决方案的计算复杂性。

验证步骤提供模型以及模型的性能信息。“mod”提供模型,“ave”提供性能。

在使用朴素贝叶斯的基本例子中,我们的精度混淆矩阵是这样的

基本performance.png

当使用支持向量机时,我们的混淆矩阵是这样的

svm performance.png

我们将在后面的文章中探讨如何改进文本处理。但现在让我们假设这是一个很好的模型。

现在,为了使用这个预测模型,我们将对实际数据集进行类似的处理,然后将模型应用于标记化的数据集。

我们需要做的另一个步骤是,将单词列表从训练“Process Document from Data”操作符传递给评分“Process Document from Data”

整个过程是这样的。

应用基本的model.png

Apply模型的输出将有三个特殊的列。如下图所示

预测(情绪)-实际类

信心(负)

信心(正面)

最后output.png

然后,您可以在用例中根据需要添加额外的文本处理操作符,以改进您的模型

带有更多预处理的“从数据中处理文档”的详细示例如下所示。

请确保您在评分方面执行相同的步骤以获得正确的结果。使用构建块在这里很有用。

详细的过程。png

Fardin_H1992 transilica GorSayadyan Anna_May1 BalazsBarany

评论

  • transilicatransilica 成员职位:1贡献我

    谢谢你的指导。非常有帮助(y)

  • Anna_May1Anna_May1 成员职位:14学我
    你好,

    非常感谢你的这篇文章!

    遗憾的是,你在文本中提到的一些链接没有包括在内。我对Rapidminer Studio相当陌生,我试图按照您所描述的过程,使用您的测试数据。我达到了“我们还需要添加“Set Role”操作符来指定我们的Label(即目标)变量”的地步,但遗憾的是,Rapidminer Studio告诉我,我需要选择一个属性名称和一个标签,但这是不可能的,因为我的数据(在将其通过Process Documents from data之后)看起来如下所示。

    你对这个问题有什么解决办法吗?你的文章中有没有包含链接的版本?

    我非常感谢你的意见!你的帖子太棒了!

    亲切的问候

    安娜可能
  • MartinLiebigMartinLiebig 管理员,主持人,员工,RapidMiner认证分析师,RapidMiner认证专家,大学教授职位:3297年RM数据科学家
    @Anna_May1
    即使该属性在set role的下拉菜单中不存在,您仍然可以输入它,并且它将工作。有时,我们无法猜测哪些属性在哪些操作符中可用。因此,有时需要手动操作。

    欢呼,
    马丁
    - RapidMin乐鱼平台进入er数据科学服务主管-
    德国多特蒙德
  • Anna_May1Anna_May1 成员职位:14学我
    @mschmitz

    感谢您的回复!问题是可用的属性就是你在上面的图片中看到的那些。当像教程中描述的那样做“设置角色”时,我使用的数据是如图所示的数据。根据我的理解,如果你选择的数据就是图片中的数据,那么选择任何属性都是没有意义的。
    这就是为什么我不知道如何“设置角色”,因为它对数据输出没有意义。

    所以我在问自己,我的错误在哪里。我已经处理了教程中描述的数据,不知道问题是什么。

    欢呼,

    安娜可能
  • MartinLiebigMartinLiebig 管理员,主持人,员工,RapidMiner认证分析师,RapidMiner认证专家,大学教授职位:3297年RM数据科学家
    @Anna_May1
    你能把流程贴出来让我们看看吗?

    最好的
    马丁
    - RapidMin乐鱼平台进入er数据科学服务主管-
    德国多特蒙德
  • JEdwardJEdward RapidMiner认证分析师,RapidMiner认证专家,会员职位:578独角兽
    @Anna_May1

    欢迎来到RapidMiner社区!

    对属性使用Set Role作为“标签”的目的是让算法以后知道如何对数据进行分类。通常你的Label属性可能被命名为“Sentiment”,并且有两个值“Positive”和“Negative”。
    而且,在将数据从data传递到Process Documents中以从文本中提取所有新属性之前,通常会在数据集中设置此属性。

    也许这里的技巧是将Set Role操作符放在Process Documents from Data操作符之前,看看这次是否可以为标签选择一个属性。

    希望有帮助!
    Ekitsune
  • EkitsuneEkitsune 成员职位:2学我
    这就跟你问声好!@bhupendra_patil您提到过将会有另一篇文章集中讨论如何改进文本处理。我在哪里可以找到它?:)非常感谢!
登录注册置评。