【问题标题】:Getting a 'pos' test on a negative review对负面评论进行“pos”测试
【发布时间】:2017-07-20 07:26:54
【问题描述】:

好的,所以我训练了一个 NaiveBayes 电影评论分类器……但是当我针对负面评论(从我复制并粘贴到 txt 文件中的网站)运行它时,我得到了“pos”……我在做什么有事吗?下面是代码:

import nltk, random
from nltk.corpus import movie_reviews
documents = [(list(movie_reviews.words(fileid)), category)
for category in movie_reviews.categories()
for fileid in movie_reviews.fileids(category)]
random.shuffle(documents)
all_words = nltk.FreqDist(w.lower() for w in movie_reviews.words())
word_features = list(all_words)[:2000]

def document_features(document): 
    document_words = set(document) 
    features = {}
    for word in word_features:
        features['contains({})'.format(word)] = (word in document_words)
    return features

featuresets = [(document_features(d), c) for (d,c) in documents]
train_set, test_set = featuresets[100:], featuresets[:100]
classifier = nltk.NaiveBayesClassifier.train(train_set)

print(nltk.classify.accuracy(classifier, test_set)) 
classifier.show_most_informative_features(5)
>>>0.67
>>>Most Informative Features
      contains(thematic) = True              pos : neg    =      8.9 : 1.0
        contains(annual) = True              pos : neg    =      8.9 : 1.0
       contains(miscast) = True              neg : pos    =      8.7 : 1.0
      contains(supports) = True              pos : neg    =      6.9 : 1.0
    contains(unbearable) = True              neg : pos    =      6.7 : 1.0

f = open('negative_review.txt','rU')
fraw = f.read()
review_tokens =nltk.word_tokenize(fraw)
docfts = document_features(review_tokens)

classifier.classify(docfts)
>>>    'pos'

更新 在多次重新运行程序后,它现在准确地将我的负面评论归类为负面......有人可以帮我理解为什么吗?或者这是普通的巫术?

【问题讨论】:

    标签: python nlp nltk document-classification nltk-trainer


    【解决方案1】:

    分类器并非 100% 准确。更好的测试是查看分类器如何处理多个电影评论。我看到分类器的准确率是 67%,这意味着 1/3 的评论会被错误分类。您可以尝试使用不同的分类器或不同的特征来改进模型(尝试 n-gram 和 word2vec)。

    【讨论】:

    • 作业要求仅使用 NaiveBayes 分类器:/
    • 你的代码没有问题,你只需要改进你的功能。您必须达到一定的准确度阈值吗?
    • 不...实际上奇怪的是在重新运行几次之后...它实际上将我的负面评论归类为负面!这太奇怪了……我会截取这次跑步的截图,然后在我的任务下发布!准确率也上升到了 0.7!这是魔法吗?
    • 可能是个问题。由于您 random.shuffle 训练数据与测试数据之间存在一些差异,因此是可以预料的,但如果您的准确度一直在上升,则说明有问题。
    • 我认为您应该通过交叉验证器运行您的模型。亚历克西斯是正确的,你的准确性不应该持续上升。 K-Fold 交叉验证将为您提供更准确的模型正确性描述。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-14
    • 2019-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多