情绪分析模型的准确性可疑

时间:2018-02-07 11:21:58

标签: python scikit-learn nltk sentiment-analysis

我正在使用NLTKscikitlearn构建情感分析模型。我决定测试几个不同的分类器,以便查看哪个是最准确的,并最终将所有这些分类器用作产生置信度分数的方法。

用于此测试的数据集都是评论,标记为正面或负面。

我训练每个分类器有5,000个评论,5个单独的时间,有6个不同(但非常相似)的数据集。每项测试都使用了一组新的5000条评论。

我平均每个测试和数据集的准确度,以达到整体平均准确度。看看:

  • 多项朴素贝叶斯: 91.291%
  • Logistic回归: 96.103%
  • SVC: 95.844%

在某些测试中,准确度高达99.912%。事实上,其中一个数据集的最低平均准确度为81.524%。

以下是相关的代码段:

def get_features(comment, word_features):
    features = {}
    for word in word_features:
        features[word] = (word in set(comment))
    return features

def main(dataset_name, column, limit): 
    data = get_data(column, limit)
    data = clean_data(data)  # filter stop words

    all_words = [w.lower() for (comment, category) in data for w in comment]
    word_features = nltk.FreqDist(all_words).keys()

    feature_set = [(get_features(comment, word_features), category) for
                       (comment, category) in data]

    run = 0
    while run < 5:
        random.shuffle(feature_set)

        training_set = feature_set[:int(len(data) / 2.)]
        testing_set = feature_set[int(len(data) / 2.):]

        classifier = SklearnClassifier(SVC())
        classifier.train(training_set)

        acc = nltk.classify.accuracy(classifier, testing_set) * 100.
        save_acc(acc)  # function to save results as .csv

        run += 1

虽然我知道这些分类器通常可以返回很好的结果,但这似乎有点太好了。

我需要检查哪些内容才能确保有效?

1 个答案:

答案 0 :(得分:3)

如果你得到99,66%到81.5%的范围,那就不太好了。

要在文本分类的情况下分析数据集,您可以检查:

  • 如果数据集是平衡的?
  • 每个标签的分配单词,有时每个标签使用的词汇可能会有所不同。
  • 正面/负面,但对于相同的来源?就像之前的点可能如果域不相同,评论可以使用不同的表达式来进行肯定的否定评论。这有助于在多个来源中获得高精度。
  • 尝试使用不同来源的评论。

如果你得到那么高的准确度,恭喜!你的get_features真的很棒。 :)