工作生活

文档分类

2019-07-04  本文已影响0人  青椒rose炒饭

这里就简单的举一个例子吧!第一次看的时候完全没有明白是怎么回事,后面睡了一下起来就明白了。主要是对于朴素贝叶斯分类模型不了解吧。

使用影评语料库获取所有的评论,训练模型后,模型能够根据文章,判断文章是正面的还是反面的。关键还是下面这张图。


有监督分类

首先是获取影评语料,这个库是按照积极(pos)和消极(neg)将文本以文件的形式分开。朴素贝叶斯分类模型,使用提取到的特征,以及正确的标签作为训练数据。

{.... , 'manhunter': False, 'scottish': False, 'brian': False, 'cox': False}, 'neg')

对于如何实现分类的需要取具体了解贝叶斯模型的原理。在本程序中一开始很不理解怎么就实现分类了? 仔细查看训练数据之后才明白过来。训练集提取文章的标签(neg/pos)然后是特征集(是否包含单词),就将这两项交给模型告诉他这个特征集是正面的或者是反面的。模型自己会学习,我感觉就是稍微复杂一点的匹配吧。


整个程序:

import nltk
#导入影评语料库
from nltk.corpus import movie_reviews
#构建语料库中所有单词的频率分布
fd = nltk.FreqDist(movie_reviews.words())
#获取前2000个单词,在提取特征值的时候会用到,
#此程序的特征集将这2000个单词组成字典,评论中包含这个词则值为True,不包含则为False
word_feature = list(fd.keys())[:2000]

#特征提取器:
def document_features(document):
    #将影评转换为集合,判断一个单词是否在集合中比判断它是否在list链表中快
    document = set(document)
    features = {}
    #遍历2000个单词构建当前文本的特征集,
    # 如果此单词存在则值为True,反之False
    for w in word_feature:
        features[w] = w in document
    return features

#获取数据
# 转换为了各个文本的 (特征集,标签)
documents =  [
        (document_features(movie_reviews.words(d)),c)
         for c in movie_reviews.categories()
         for d in movie_reviews.fileids(c)
     ]
#分为训练集和测试集
train_set,test_set = documents[100:],documents[:100]
#训练模型
classifier = nltk.NaiveBayesClassifier.train(train_set)
# 评估模型准确度
print(nltk.classify.accuracy(classifier,test_set))

输出结果:0.78

上一篇下一篇

猜你喜欢

热点阅读