【发布时间】:2017-05-11 18:01:58
【问题描述】:
我已经在 apache spark 上构建了一个非常基本的朴素贝叶斯,当然还使用了 mllib。但我对中立的确切含义有一些澄清。
据我了解,在给定的数据集中,有预先标记的句子,其中包含必要的类,下面以 3 个为例。
0-> Negative sentiment
1-> Positive sentiment
2-> Neutral sentiment
这个中性点在训练集中预先标记。
是否有任何其他形式的中立处理。假设如果数据集中没有可用的中性句子,那么我是否可以从概率尺度计算它,例如
0.0 - 0.4 => Negative
0.4- - 0.6 => Neutral
0.6 - 1.0 => Positive
这种映射在 Spark 中是否可行?我四处寻找,但找不到任何东西。 RDD API 中的NaiveBayesModel 类有一个predict 方法,它只返回一个根据训练集映射的双精度,即如果只有0,1,它将只返回0,1,而不是以缩放方式返回如上 0.0 - 1.0。
对此的任何指示/建议都会非常有帮助。
编辑 - 1
示例代码
//Performs tokenization,pos tagging and then lemmatization
//Returns a array of string
val tokenizedString = Util.tokenizeData(text)
val hashingTF = new HashingTF()
//Returns a double
//According to the training set 1.0 => Positive, 0.0 => Negative
val status = model.predict(hashingTF.transform(tokenizedString.toSeq))
if(status == 1.0) "Positive" else "Negative"
样本数据集内容
1,Awesome movie
0,This movie sucks
当然原始数据集包含更多更长的句子,但我猜这应该足以解释
使用我正在计算的上述代码。我的问题是一样的
1) 数据集中的中立性处理 在上面的数据集中,如果我要添加另一个类别,例如 2、这部电影可以让孩子们欣赏
为了争论,假设它是一个中立的评论,那么model.predict 方法将根据传入的句子给出 1.0,0.0,2.0。
2) 使用model.predictProbabilities 它给出了一个双精度数组,但我不确定它给出结果的顺序,即索引 0 是负数还是正数?具有三个特征,即负、正、中性,那么该方法将以什么顺序返回预测?
【问题讨论】:
-
我们需要在这里查看您的代码以提供帮助。根据您构建 ml 管道的方式(如果您确实使用了管道),标签可能通过您的 stringIndexer 阶段可用。
-
@PascalSoucy : 我添加了代码示例和更详细的解释
标签: scala apache-spark sentiment-analysis naivebayes