【问题标题】:aspect based sentiment using NLTK?使用 NLTK 的基于方面的情感?
【发布时间】:2015-02-19 02:54:53
【问题描述】:

我正在研究基于方面的情绪分析。对于每条评论,我都有一个训练集(text 和 aspectTerms)。

使用 NLTK3,我想构建一个朴素贝叶斯分类器,用于预测未见测试数据的各个方面。我将使用一个特性词性标注方面。

特征方法是什么样的?如何训练分类器?如何在看不见的数据上测试分类器?

我尝试了以下方法:

我的特征函数看起来像

def featurepos(word):
    return dict(wordpos,true)  //return part of speech tagging for a given word

并构建了一个分类器

classifier=NaiveBayesClassifier.train(train_set)
#train_set contains [(posofaspect,"aspect")]

现在我想用测试数据测试分类器。

为了检查准确性,下面的代码需要test_set

nltk.classify.util.accuracy(classifier,test_set)

test_set 是字典列表吗?如果它是一个字典,它的结构是什么? -我糊涂了。 如果有例子,那就太有帮助了!

【问题讨论】:

  • wordpos 是什么?一个词、它的 PoS 和“方面”之间的关系是什么?你能指出任何背景来帮助我们了解你想要做什么吗?
  • 我找到alt.qcri.org/semeval2014/task4 来简要解释我认为这里的任务。但是,贝叶斯分类器和 PoS 标签如何融入大局并不明显。请解释您的方法。
  • POS 是词性标注。我想构建一个分类器来从测试集中提取方面。方面是文本中的关键字,它们很可能是名词。所以我已经有了带有方面的火车集文本。
  • 所以你提取名词作为方面,什么是动词、形容词和副词作为情感?您如何确定一种情绪以及如何确定它描述的哪个方面?或者你只是假设一个句子,一种情绪,一个方面?
  • 更具体地说,在您的featurepos 函数中,您有一个未绑定或全局变量wordpos。它是什么,它来自哪里?

标签: python classification nltk sentiment-analysis


【解决方案1】:

这就是准确度函数的作用,根据documentation

def accuracy(classifier, gold):
    results = classifier.classify_many([fs for (fs,l) in gold])
    correct = [l==r for ((fs,l), r) in zip(gold, results)]
    if correct:
        return float(sum(correct))/len(correct)
    else:
        return 0

因此,测试集是元组(特征、对应标签)的列表,函数 (1) 使用经过训练的分类器来计算这些特征的输出,(2) 将分类结果与给定标签对应,以及 (3)输出命中率

【讨论】:

  • 我不明白为什么我得到准确度=1.0!?使用后:nltk.classify.util.accuracy(classifier,test_set)
  • 这意味着分类器得到了test_set中所有元组的正确答案。
  • 仅使用一个功能和 NaiveBayes 是不可能发生的。!
  • 很可能是您的测试集有问题。不过,它不会使您原始问题的答案无效。
猜你喜欢
  • 2014-01-16
  • 2020-04-30
  • 2015-01-20
  • 1970-01-01
  • 2017-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多