文档分类

作者: 青椒rose炒饭 | 来源:发表于2019-07-04 14:48 被阅读0次

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

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


    有监督分类

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

    • 特征提取:获取语料库的前2000个单词,就使用文章是否拥有这些单词为特征。

      #获取影评库中的单词构建频率分布
      fd = nltk.FreqDist(movie_reviews.words())
      #选取前2000个用于就够特征,特征集就是这些单词在不在文件中
      word_feature = list(fd.keys())[:2000]
      
      #特征提取器:
      def document_features(document):
          document = set(document)
          features = {}
          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]
      
    • 训练数据:前面的字典就是特征 {单词:存在与否},单词选用的是语料库的前2000个。

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

    • 朴素贝叶斯分类模型
      直接在nltk模块下调用就可以了很方便的。

       #训练模型
        classifier = nltk.NaiveBayesClassifier.train(train_set)
      

    对于如何实现分类的需要取具体了解贝叶斯模型的原理。在本程序中一开始很不理解怎么就实现分类了? 仔细查看训练数据之后才明白过来。训练集提取文章的标签(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

    相关文章

      网友评论

        本文标题:文档分类

        本文链接:https://www.haomeiwen.com/subject/qptlhctx.html