精华内容
下载资源
问答
  • 中文文本分类实验

    2012-05-17 16:13:11
    中文文本分类完整流程的简单实现,分词、去停用词、提取特征、计算文档的特征向量、支持向量机训练、测试文档分类,简单实现,其中词频统计、去停用词使用布隆过滤器加速,效果不错
  • 实验结果表明:依存关系能够作为有效的特征进行文本分类,并能够改善文本分类的性能;单独把依存关系作为特征,不能提高短文本的分类性能;可以利用依存关系作为特征扩充的手段,增加短文本的特征,增强短文本的描述能力,...
  • THUCTC(THU Chinese Text Classification)是由清华大学自然语言处理实验室推出的中文文本分类工具包,能够自动高效地实现用户自定义的文本分类语料的训练、评测、分类功能。 文本文类通常包括特征选取、特征降维...

    官方介绍:

    THUCTC(THU Chinese Text Classification)是由清华大学自然语言处理实验室推出的中文文本分类工具包,能够自动高效地实现用户自定义的文本分类语料的训练、评测、分类功能。

    文本文类通常包括特征选取、特征降维、分类模型学习三个步骤。如何选取合适的文本特征并进行降维,是中文文本分类的挑战性问题。该组根据多年在中文文本分类的研究经验,在THUCTC中选取二字串bigram作为特征单元,特征降维方法为Chi-square,权重计算方法为tfidf,分类模型使用的是LibSVM或LibLinear。

    THUCTC对于开放领域的长文本具有良好的普适性,不依赖于任何中文分词工具的性能,具有准确率高、测试速度快的优点。

    作者:

    指导教师:Maosong Sun(孙茂松教授)

    贡献者:Zhipeng Guo(郭志芃),Yu Zhao(赵宇),Yabin Zheng(郑亚斌),Xiance Si(司宪策),Zhiyuan Liu(刘知远).

    详情:THUCTC: 一个高效的中文文本分类工具

    展开全文
  • SparkTextClassifier使用Spark NaiveBayes 实现中文文本分类测试数据是我们自己用爬虫抓取的,自己练手也可以用搜狗实验室的数据集(http://www.sogou.com/labs/resource/list_news.php) 朴素贝叶斯分类效果不是很好 ...

    SparkTextClassifier

    使用Spark NaiveBayes 实现中文文本分类

    测试数据是我们自己用爬虫抓取的,自己练手也可以用搜狗实验室的数据集(http://www.sogou.com/labs/resource/list_news.php)    朴素贝叶斯分类效果不是很好 数据量大的时候准确率差不多80%,有条件可以试试tensorflow用CNN+RNN+word2vec 我们线上的准确率98%

    0、DataFactory.java

    0、读取 classPath -> data -> NewsData 目录下的数据 (通过文件夹分类)

    1、读取 classPath -> data -> stopWord.txt文件

    2、移除停用词

    3、把数据分词

    4、分割数据(分为测试数据和训练数据)

    5、写入数据到 classPath -> data 目录下的 data-test.txt 和 data-train.txt 文件中

    6、保存标签数据到 classPath -> models -> labels.txt 文件中

    1、NaiveBayesTrain.java

    0、读取 classPath -> data -> data-train.txt 文件

    1、训练模型...

    2、保存模型到 classPath -> models -> category-4 目录

    3、保存tf文件到 classPath -> models -> tf 目录

    4、保存idf文件到 classPath -> models -> idf 目录

    2、NaiveBayesTest.java

    0、加载模型

    1、加载tf、idf

    2、读取 classPath -> data -> data-test.txt 文件

    3、对数据进行打分

    目录结构

    -resources

    --data

    ---NewsData 语料目录

    ---data-test.txt 测试数据

    ---data-train.txt 训练数据

    ---stopWord.txt 停用词

    ---models

    ---category-4 模型目录

    ---idf idf文件

    ---tf tf文件

    ---labels.txt 标签数据

    测试集训练结果

    =======================================================

    Summary

    -------------------------------------------------------

    Correctly Classified Instances : 786 98.7437%

    Incorrectly Classified Instances : 10 1.2563%

    Total Classified Instances : 796

    ===================================

    展开全文
  • 贝叶斯文本分类实验

    千次阅读 2012-03-12 14:44:56
    主要是利用朴素贝叶斯对文本进行分类,用TF-IDF 权重进行优化。 实验流程: 1 首先下载搜狗语料库 采用其中的五个类别,分别是,1 – 汽车2 –财经3 — 教育 IT4 — 健康5 — 体育 。其中每个分类的训练...

    这个其实是我数据挖掘 的大作业 :

    实验原理

    主要是利用朴素贝叶斯对文本进行分类,用TF-IDF 权重进行优化。

    实验流程:

    1 首先下载搜狗语料库

    采用其中的五个类别,分别是,1 – 汽车2 –财经3 — 教育 IT4 — 健康5 — 体育 。其中每个分类的训练文档为1000篇,测试文档为131篇。

    2中文分词

    利用中科院的分词软件,对所有的文档进行分词。比如 第一个类别下的 10.txt 分词后的结果存储在1_re_10.txt 中 。 分词结果(只列出部分):

    /x /x 本报/rz 记者/n 陈雪/nr 频/ag 实习/v 记者/n 唐翔/nr 发自/v 上海/ns

    /x /x 一家/n 刚刚/d 成立/vi 两年/m 的/ude1 网络/n 支付/vn 公司/n ,/wd 它/rr 的/ude1 目标/n 是/vshi 成为/v 市值/n 100亿/m 美元/q 的/ude1 上市/vn 公司/n 。/wj

    他的结果 后面还可以跟着词性,后面我们我们建立词典的时候,只用名词。

     
      clip_image002

    然后所有的训练文档和 测试 的文档放在同一个目录下,我的程序是 读一个ls .txt的文件来决定处理哪些文件。 我采用每个分类1000-1999 作为训练文档,10-140 作为测试文档。

    对于第一个分类来说,1_re_10 到1_re_140 都是测试文档 , 1_re_1000 到1_re_1999是训练文档。

    3 建立词典

    对所有的文档进行词频统计,并只记录下高于某个times 的词,然后再利用stopword.txt ,去掉一些停用词。这样最后得到一个 dict.txt的文件。dict.txt 的格式是 :词 空格 词频,词典一共有33845 个名词。

     
      clip_image004

    其中可以通过生成dict.txt ,可以手工判断一些词作为新的停用词放到到 stopword中去,再次运行程序 ,下次生成新的dict.txt 就可以去掉了 。

    4 利用朴素贝叶斯算法对文本进行分类

    bayes 算法 : 假设 d 为任意文档,文档 d 用其含有的特征词来表示,即 d=(t

    1,t2,……,tk),k 为文档的特征词数,tj表示文档 d 中的第 j 个特征词,由此得到下式:

    clip_image006; 其中, clip_image008 表示分类器预测特征值在类别 cj的文档中发生的概率。

    根据贝叶斯定理:

    clip_image010

    由于 P ( d )对所有类来说都是常数 , 同时有C++ 浮点运算的原因,对于clip_image012 就不用乘法了clip_image014 正比于 clip_image008[1]的和 。

    clip_image008[2] 表示分类cj特征词ti 出现的概率 ,那么就是等于 特征词ti出现的频率除以cj分类的总的词数 。

    详见tf-idf-nb.cpp :bayes()用来训练训练文本,int getType(string filename ) 返回文件的类别。 下面主要介绍下主代码区。

    /*计算 P(ti| cj) count(ti) / count(cj), 该分类下的某个词的

    出现的概率 除以 该分类的总的词的数目

    因为我各自分类取的文档数是一定的所以 我的p(cj) = 1/N */

    for(type = 0 ; type < N ; type ++ )

    {

    long sizeInt = bMap[type].size();

    map<string ,double >::iterator iter ;

    for(iter =bMap[type].begin() ; iter != bMap[type].end() ; iter ++ )

    {

    iter->second = (iter->second + 1.0)/( count_classify[type]) ; //这里就是计算 clip_image008[3]

    }

    }

    while(input >> word)

    {

    string rc = word.substr(0,word.find("/")) ;

    //cout << rc << endl;

    for(i = 0 ; i < N ; i ++) /*这个就是对测试文档 累加在每个分类下的概率*/

    {

    iter = bMap[i].find(rc);

    if( iter != bMap[i].end())

    result[i] += iter->second;

    }

    }

    但是 使用词频的方法正确率只有73%

    5 利用TF-IDF 进行优化

    之前使用的朴素贝叶斯,使用的是词频权重,这个对文本预处理的依赖性很强。然后我在网上搜索改进方法,使用TF-IDF 作为新的权重计算方法。

    clip_image017 ,就是在计算 clip_image008[4] 的时候 ,再乘上这个权重。这个IDF权重。

    N 表示文档总数,N(tk)表示包含词 tk的文档数。IDF 的值越大,说明包含该特征词的文档越少,那么这个特征词分布得就相对集中,则这个特征词有可能包含更多的类别信息;相反,如果 IDF 的值比较小,则说明这个特征词在文档集中分布得相对均匀,对文档的分类没有多大贡献,该词不适合作为分类的特征。

    相应在代码中的修改如下表:

    while(input >> word)

    {

    string rc = word.substr(0,word.find("/")) ;

    //cout << rc << endl;

    for(int i = 0 ; i < N ; i ++)

    {

    iter = bMap[i].find(rc);

    if( iter != bMap[i].end() && dictMap.find(rc) != dictMap.end() )

    {

    if( weightMap.find(rc) != weightMap.end() )

    result[i] += (iter->second * (log( documentN / (weightMap.find(rc)->second) ) ) ) ;

    else

    cout << "can not find " << rc << "in weightMap" << endl;

    }

    }

    }

    实验结果为:

    clip_image020

    这里我用数字代表分类,一共五个类别,5 5 表示第5个类别的文档,然后用改进后的算法计算之后的的类别。下面简单的统计了每个分类的正确率,和整体的正确率。


    原始博客地址

    展开全文
  • THUCTC(THU中文文本分类)是由清华大学自然语言处理实验室推出的中文文本分类工具包,能够自动高效地实现用户自定义的文本分类语料的训练,评估,分类功能。 ,特征降维,分类模型学习三个步骤。如何选择合适的文本...
  • 实验结果表明:该平台可以通过计算分类器分类准确率的宏平均值比较分类算法与特征选择算法的性能,可以评估语料库的可用性,能够用于研究中文分词、特征选择、分类算法等中文文本分类技术问题。
  • 复旦中文文本数据集,包含训练集与测试集,数据集为TXT格式,可以进行文本分类实验,机器学习,深度学习,需要的可以下载。
  • 介绍了中心向量算法和KNN算法两种分类方法。针对KNN分类方法在计算文本...实验结果表明,改进的KNN算法较中心向量法和传统的KNN算法在处理中文文本分类问题上有较好的分类效果,验证了对KNN算法改进的有效性和可行性。
  • 利用TF-IDF策略的中文文本分类算法比较,刘昕玥,王敬,本文基于TF-IDF特征选取方法,分别使用朴素贝叶斯、随机森林与支持向量机算法对中文文本语料库进行分类实验。实验表明,支持向量机
  • 大嫡模型应用在文本分类中的研究却非常少, 而使用最大嫡模型进行中文文本分类的研究尚未见到. 使用最大墒模型进行了中文文本分类 . 通过实验比较和分析了不同的中文文本特征生成方法、不同的 特征数目, 以及在使用...
  • 基于Topic model的中文文本分类 问题描述 在给定的数据库上利用Topic Model做无监督学习,学习到主题的分布。可以在数据库中随机选定K本小说,在每本小说中随机抽出M个段落作为训练数据,并抽出N个段落作为测试,...

    问题描述

    在给定的数据库上利用Topic Model做无监督学习,学习到主题的分布。可以在数据库中随机选定K本小说,在每本小说中随机抽出M个段落作为训练数据,并抽出N个段落作为测试,利用topic model和其他的分类器对给定的段落属于哪一本小说进行分类。 其中K至少为3.

    实验原理

    文本分类简介

    文本分类是指在给定分类体系,根据文本内容自动确定文本类别的过程。最基础的分类是归到两个类别中,称为二分类问题,例如电影评论分类,只需要分为“好评”或“差评”。分到多个类别中的称为多分类问题,例如,把名字分类为法语名字、英语名字、西班牙语名字等。

    一般来说文本分类大致分为如下几个步骤:

    1. 定义阶段:定义数据以及分类体系,具体分为哪些类别,需要哪些数据。

    2. 数据预处理:对文档做分词、去停用词等准备工作。

    3. 数据提取特征:对文档矩阵进行降维,提取训练集中最有用的特征。

    4. 模型训练阶段:选择具体的分类模型以及算法,训练出文本分类器。

    5. 评测阶段:在测试集上测试并评价分类器的性能。

    6. 应用阶段:应用性能最高的分类模型对待分类文档进行分类。

    LDA模型简介

    LDA(Latent Dirichlet Allocation)由Blei, David M.、Ng, Andrew Y.、Jordan于2003年提出,用来推测文档的主题分布。它可以将文档集中每篇文档的主题以概率分布的形式给出,从而通过分析一些文档抽取出它们的主题分布后,便可以根据主题分布进行主题聚类或文本分类。LDA 模型是话题模型(topic model)的典型代表,通过概率模型建立了从主题到文档中每个词的关系,从利用贝叶斯概率,能通过文档的词推导出文档的主题。

    LDA中的 3 个概念:

    词(word):数据中的基本离散单元

    文档(document):待处理的数据对象,由词组成,不计顺序。文档对象在话题模型中是“词袋”概念。

    话题(topic):每篇文档都有特定的一些话题,根据这些话题产生

    在LDA模型中,一篇文章的生成方式如下:

    1. 从狄利克雷分布α\alpha中取样生成文档i的主题分布θi\theta _{i}

    2. 从主题的多项式分布θi\theta_{i}中取样生成文档i第 j 个词的主题zi,jz_{i,j}

    3. 从狄利克雷分布β\beta中取样生成主题zi,jz_{i,j}对应的词语分布ϕzi,j\phi_{z_{i,j}}

    4. 从词语的多项式分布ϕzi,j\phi_{z_{i,j}}中采样最终生成的词语ωi,j\omega_{i,j}
      其中,类似\beta分布是二项式分布的共轭先验概率分布,而狄利克雷分布(Dirichlet分布)是多项式分布的共轭先验概率分布。LDA的图模型结构如下图所示
      LDA模型结构示意图

    多项式分布

    多项分布,是二项分布扩展到多维的情况. 多项分布是指单次试验中的随机变量的取值不再是0-1的,而是有多种离散值可能(1,2,3…,k).概率密度函数为:
    p(x1,x2,,xk;n,p1,p2,,pk)=n!x1!xk!p1x1pkxk p(x_1, x_2,\cdot \cdot\cdot,x_k;n,p_1,p_2,\cdot\cdot\cdot,p_{k})=\frac{n!}{x_1!\cdot\cdot\cdot x_k!}p_1 ^{x_1} \cdot\cdot\cdot p_k^ {x_k}

    Gamma分布

    Gamma函数的定义:
    Γ(x)=0tx1etdt \Gamma(x) = \int_{0}^{\infty} t^{x-1}e^{-t}dt

    β\beta分布

    β\beta分布的定义:对于参数\alpha>0,\beta>0, 取值范围为[0, 1]的随机变量x的概率密度函数为
    f(x;α,β)=1B(α,β)xα1(1x)β1 f(x;\alpha, \beta) = \frac{1}{B(\alpha,\beta)}x^{\alpha-1}(1-x)^{\beta-1}
    其中
    1B(α,β)=Γ(α+β)Γ(α)Γ(β) \frac{1}{B(\alpha,\beta)} = \frac{\Gamma(\alpha+\beta)}{\Gamma(\alpha)\Gamma(\beta)}

    Dirichlet分布

    Dirichlet分布是多项式分布的共轭先验分布。这两个分布模型在文档生成模型中的应用是非常自然的想法——因为后验分布和先验分布具有相同形式,只是参数有所不同,这意味着当我们获得新的观察数据时,我们就能直接通过更新参数,获得新的后验分布。参数为的Dirichlet分布的密度函数为
    p(θα)=Γ(i=1Kαi)i=1KΓ(αi)θ1α11θkαk1 p(\theta |\alpha) = \frac {\Gamma (\sum_{i=1}^{K} \alpha_{i})} {\prod\nolimits_{i=1}^K \Gamma(\alpha_{i}) } \theta_{1}^{\alpha_{1}-1}\cdot \cdot\cdot \theta_{k}^{\alpha_{k}-1}
    根据该模型可写出LDA的联合概率分布为
    p(w,z,θ,βα,η)=p(θα)p(βη)j=1Np(zjθ)p(ωjzj) p(w,z,\theta, \beta\vert \alpha, \eta ) = p(\theta \vert \alpha)p(\beta \vert\eta) \prod\nolimits_{j=1}^N p(z_{j}\vert \theta) p(\omega_{j}\vert_{z_{j}})

    实验流程

    本次实验以第一次实验所提供的金庸先生的16本武侠小说作为数据集,利用LDA进行文本分类。

    数据预处理

    与第一次实验相同,删去所有的隐藏符号,删除所有的非中文字符,不考虑上下文关系的前提下删去所有标点符号。以jieba库对中文语料进行分词。由实验要求得,需对数据库进行训练集和测试集划分。在该实验当中,将测试集化为2000行语料,其余行列为训练集。

    def get_data():
        """如果文档还没分词,就进行分词"""
        outfilename_1 = "./cnews.train_jieba.txt"
        outfilename_2 = "./cnews.test_jieba.txt"
        if not os.path.exists('./cnews.train_jieba.txt'):
            outputs = open(outfilename_1, 'w', encoding='UTF-8')
            outputs_test = open(outfilename_2, 'w', encoding='UTF-8')
            datasets_root = "./datasets"
            catalog = "inf.txt"
    
            test_num = 10
            test_length = 20
            with open(os.path.join(datasets_root, catalog), "r", encoding='utf-8') as f:
                all_files = f.readline().split(",")
                print(all_files)
    
            for name in all_files:
                with open(os.path.join(datasets_root, name + ".txt"), "r", encoding='utf-8') as f:
                    file_read = f.readlines()
                    train_num = len(file_read) - test_num
                    choice_index = np.random.choice(len(file_read), test_num + train_num, replace=False)
                    train_text = ""
                    for train in choice_index[0:train_num]:
                        line = file_read[train]
                        line = re.sub('\s', '', line)
                        line = re.sub('[\u0000-\u4DFF]', '', line)
                        line = re.sub('[\u9FA6-\uFFFF]', '', line)
                        if len(line) == 0:
                            continue
                        seg_list = list(jieba.cut(line, cut_all=False))  # 使用精确模式
                        line_seg = ""
                        for term in seg_list:
                            line_seg += term + " "
                            # for index in range len(line_seg):
                        outputs.write(line_seg.strip() + '\n')
    
    
                    for test in choice_index[train_num:test_num + train_num]:
                        if test + test_length >= len(file_read):
                            continue
                        test_line = ""
                        # for i in range(test, test + test_length):
                        line = file_read[test]
                        line = re.sub('\s', '', line)
                        line = re.sub('[\u0000-\u4DFF]', '', line)
                        line = re.sub('[\u9FA6-\uFFFF]', '', line)
                        seg_list = list(jieba.cut(line, cut_all=False))  # 使用精确模式
                        #line_seg = ""
                        for term in seg_list:
                            test_line += term + " "
                        outputs_test.write(test_line.strip()+'\n')
    
            outputs.close()
            outputs_test.close()
            print("得到训练集与测试集!!!")
    

    运用LDA进行训练并进行验证

    本文用了gensim中的corpora和其中自带的lda模型来进行训练。corpora能够构建词频矩阵。

        fr = open('./cnews.train_jieba.txt', 'r', encoding='utf-8')
        train = []
        for line in fr.readlines():
            line = [word.strip() for word in line.split(' ')]
            train.append(line)
    
    
        """构建词频矩阵,训练LDA模型"""
        dictionary = corpora.Dictionary(train)
        # corpus[0]: [(0, 1), (1, 1), (2, 1), (3, 1), (4, 1),...]
        # corpus是把每本小说ID化后的结果,每个元素是新闻中的每个词语,在字典中的ID和频率
        corpus = [dictionary.doc2bow(text) for text in train]
        #
        lda = models.LdaModel(corpus=corpus, id2word=dictionary, num_topics=16)
        # lsi = models.LsiModel(corpus=corpus,id2word=dictionary,num_topics=16)
        topic_list_lda = lda.print_topics(16)
        # topic_list_lsi = lsi.print_topics(16)
        print("以LDA为分类器的16个主题的单词分布为:\n")
        for topic in topic_list_lda:
            print(topic)
    
        """测试"""
        file_test = "./cnews.test_jieba.txt"
        news_test = open(file_test, 'r', encoding='UTF-8')
        test = []
        # 处理成正确的输入格式
        for line in news_test:
           # line = line.split('\t')[1]
            #line = re.sub(r'[^\u4e00-\u9fa5]+', '', line,)
            line = [word.strip() for word in line.split(' ')]
            test.append(line)
    
        for text in test:
            corpus_test = dictionary.doc2bow((text))
            # print(corpus_test)
    
    
    
        corpus_test = [dictionary.doc2bow(text) for text in test]
        # print(corpus_test)
        # 得到每本小说的主题分布
        print("以LDA为分类器的十六本小说的主题分布为:\n")
        topics_test = lda.get_document_topics(corpus_test)
    
        for i in range(10):
            print(i)
            print('的主题分布为:\n')
            print(topics_test[i], '\n')
    
        fr.close()
        news_test.close()
    

    实验结果

    16个主题的单词分布为:

    (0, ‘0.074*“即” + 0.045*“一掌” + 0.024*“正要” + 0.023*“劈” + 0.021*“长老” + 0.015*“相见” + 0.013*“瞧见” + 0.013*“位” + 0.012*“占” + 0.012*“足”’)
    (1, ‘0.069*“内力” + 0.028*“这次” + 0.013*“伤人” + 0.013*“火焰” + 0.011*“尽” + 0.011*“万” + 0.011*“心惊” + 0.010*“说出” + 0.010*“可要” + 0.010*“刀法”’)
    (2, ‘0.023*“了” + 0.022*“的” + 0.016*“哪” + 0.012*“於” + 0.012*“在” + 0.011*“又” + 0.010*“或” + 0.010*“怎能” + 0.009*“因” + 0.009*“如何”’)
    (3, ‘0.060*“的” + 0.028*“他” + 0.027*“了” + 0.022*“是” + 0.019*“这” + 0.016*“弟子” + 0.015*“在” + 0.012*“武功” + 0.010*“也” + 0.009*“和”’)
    (4, ‘0.035*“了” + 0.028*“在” + 0.023*“他” + 0.021*“得” + 0.021*“的” + 0.021*“听” + 0.015*“便” + 0.015*“中” + 0.014*“但” + 0.012*“见”’)
    (5, ‘0.033*“他” + 0.032*“如此” + 0.022*“了” + 0.018*“兄弟” + 0.016*“剑法” + 0.015*“却” + 0.014*“的” + 0.013*“与” + 0.011*“但” + 0.011*“到”’)
    (6, ‘0.056*“我” + 0.052*“你” + 0.049*“了” + 0.044*“道” + 0.030*“的” + 0.027*“他” + 0.022*“是” + 0.016*“也” + 0.014*“那” + 0.014*“不”’)
    (7, ‘0.022*“的” + 0.022*“人物” + 0.018*“尽” + 0.014*“逼” + 0.013*“银子” + 0.012*“只好” + 0.011*“胡说八道” + 0.010*“哈哈” + 0.009*“显得” + 0.009*“为”’)
    (8, ‘0.033*“前来” + 0.021*“小小” + 0.016*“啷” + 0.014*“同门” + 0.013*“如何是好” + 0.012*“呛” + 0.011*“嫌” + 0.010*“出招” + 0.010*“跌” + 0.009*“来不及”’)
    (9, ‘0.066*“的” + 0.035*“在” + 0.028*“了” + 0.024*“他” + 0.018*“上” + 0.018*“是” + 0.013*“这” + 0.012*“中” + 0.009*“一” + 0.009*“将”’)
    (10, ‘0.020*“来” + 0.019*“张” + 0.017*“一名” + 0.014*“站” + 0.013*“一面” + 0.013*“汉子” + 0.012*“起身” + 0.011*“声响” + 0.010*“那” + 0.010*“到”’)
    (11, ‘0.038*“了” + 0.027*“将” + 0.025*“的” + 0.017*“长剑” + 0.016*“他” + 0.016*“已” + 0.015*“在” + 0.014*“一” + 0.013*“向” + 0.011*“从”’)
    (12, ‘0.038*“两位” + 0.026*“不必” + 0.019*“招数” + 0.018*“走出” + 0.013*“中土” + 0.012*“拜” + 0.011*“毒手” + 0.011*“敌手” + 0.011*“目光” + 0.010*“擒”’)
    (13, ‘0.072*“的” + 0.037*“是” + 0.037*“了” + 0.023*“道” + 0.020*“她” + 0.017*“这” + 0.016*“他” + 0.016*“在” + 0.013*“也” + 0.013*“有”’)
    (14, ‘0.064*“的” + 0.061*“是” + 0.026*“也” + 0.022*“他” + 0.020*“和” + 0.020*“人” + 0.019*“有” + 0.016*“都” + 0.015*“说” + 0.012*“这”’)
    (15, ‘0.044*“武林” + 0.042*“居然” + 0.034*“一位” + 0.026*“撞” + 0.019*“房中” + 0.016*“颤” + 0.013*“声道” + 0.013*“力道” + 0.012*“横” + 0.010*“外号”’)

    0
    的主题分布为:

    [(6, 0.34669572), (13, 0.6095521)] 可以看出属于第14个主题

    1
    的主题分布为:

    [(0, 0.08241061), (3, 0.4389208), (6, 0.4161207)] 可以看出属于第3个主题的概率大

    2
    的主题分布为:

    [(0, 0.012508655), (1, 0.012508655), (2, 0.012508656), (3, 0.012508665), (4, 0.012508665), (5, 0.012508658), (6, 0.60123813), (7, 0.22364065), (8, 0.012508655), (9, 0.012508662), (10, 0.012508655), (11, 0.012508661), (12, 0.012508655), (13, 0.012508659), (14, 0.012508705), (15, 0.012508655)] 可以看出属于第七个主题

    3
    的主题分布为:

    [(6, 0.65538734), (12, 0.087329924), (14, 0.2064464)] 可以看出属于第七个主题

    4
    的主题分布为:

    [(6, 0.8660557)] 可以看出属于第七个主题

    5
    的主题分布为:

    [(4, 0.1860438), (5, 0.2250588), (9, 0.16105035), (11, 0.37007958)] 可以看出属于第十二个主题

    6
    的主题分布为:

    [(3, 0.11233538), (9, 0.07748296), (12, 0.07419315), (13, 0.5327368), (14, 0.16874391)] 可以看出属于第十三个主题

    7
    的主题分布为:

    [(0, 0.015625179), (1, 0.015625179), (2, 0.015625188), (3, 0.015625188), (4, 0.015625205), (5, 0.015625186), (6, 0.015625183), (7, 0.015625183), (8, 0.015625179), (9, 0.0156252), (10, 0.01562518), (11, 0.015625192), (12, 0.01562518), (13, 0.015625196), (14, 0.7656222), (15, 0.015625179)] 可以看出属于第十五个主题

    8
    的主题分布为:

    [(6, 0.75041765), (9, 0.16206965)] 可以看出属于第七个主题

    9
    的主题分布为:

    [(6, 0.70361245), (9, 0.10615072), (13, 0.13601784)] 可以看出属于第七个主题

    总结

    在理解了LDA主题模型原理的基础上,使用了gensim中封装的LDA模型,提取了金庸小说全集的主题分布特征,得到了如上所示的效果。由实验结果可知,分类的效果并不是特别好,原因可以由16个主题的单词分布可以看出,这些单词都是一些十分常见的单词,并不具有特殊性,而在此基础上还能有不错的效果也证实了LDA的独到之处。

    附录

    #!/usr/bin/python
    # -*- coding:utf-8 -*-
    
    import jieba, os, re
    import numpy as np
    from gensim import corpora, models
    
    def get_data():
        """如果文档还没分词,就进行分词"""
        outfilename_1 = "./cnews.train_jieba.txt"
        outfilename_2 = "./cnews.test_jieba.txt"
        if not os.path.exists('./cnews.train_jieba.txt'):
            outputs = open(outfilename_1, 'w', encoding='UTF-8')
            outputs_test = open(outfilename_2, 'w', encoding='UTF-8')
            datasets_root = "./datasets"
            catalog = "inf.txt"
    
            test_num = 10
            test_length = 20
            with open(os.path.join(datasets_root, catalog), "r", encoding='utf-8') as f:
                all_files = f.readline().split(",")
                print(all_files)
    
            for name in all_files:
                with open(os.path.join(datasets_root, name + ".txt"), "r", encoding='utf-8') as f:
                    file_read = f.readlines()
                    train_num = len(file_read) - test_num
                    choice_index = np.random.choice(len(file_read), test_num + train_num, replace=False)
                    train_text = ""
                    for train in choice_index[0:train_num]:
                        line = file_read[train]
                        line = re.sub('\s', '', line)
                        line = re.sub('[\u0000-\u4DFF]', '', line)
                        line = re.sub('[\u9FA6-\uFFFF]', '', line)
                        if len(line) == 0:
                            continue
                        seg_list = list(jieba.cut(line, cut_all=False))  # 使用精确模式
                        line_seg = ""
                        for term in seg_list:
                            line_seg += term + " "
                            # for index in range len(line_seg):
                        outputs.write(line_seg.strip() + '\n')
    
    
                    for test in choice_index[train_num:test_num + train_num]:
                        if test + test_length >= len(file_read):
                            continue
                        test_line = ""
                        # for i in range(test, test + test_length):
                        line = file_read[test]
                        line = re.sub('\s', '', line)
                        line = re.sub('[\u0000-\u4DFF]', '', line)
                        line = re.sub('[\u9FA6-\uFFFF]', '', line)
                        seg_list = list(jieba.cut(line, cut_all=False))  # 使用精确模式
                        #line_seg = ""
                        for term in seg_list:
                            test_line += term + " "
                        outputs_test.write(test_line.strip()+'\n')
    
            outputs.close()
            outputs_test.close()
            print("得到训练集与测试集!!!")
    
    
    if __name__ == "__main__":
        get_data()
        """准备好训练语料,整理成gensim需要的输入格式"""
        fr = open('./cnews.train_jieba.txt', 'r', encoding='utf-8')
        train = []
        for line in fr.readlines():
            line = [word.strip() for word in line.split(' ')]
            train.append(line)
    
    
        """构建词频矩阵,训练LDA模型"""
        dictionary = corpora.Dictionary(train)
        # corpus[0]: [(0, 1), (1, 1), (2, 1), (3, 1), (4, 1),...]
        # corpus是把每本小说ID化后的结果,每个元素是新闻中的每个词语,在字典中的ID和频率
        corpus = [dictionary.doc2bow(text) for text in train]
        #
        lda = models.LdaModel(corpus=corpus, id2word=dictionary, num_topics=16)
        # lsi = models.LsiModel(corpus=corpus,id2word=dictionary,num_topics=16)
        topic_list_lda = lda.print_topics(16)
        # topic_list_lsi = lsi.print_topics(16)
        print("以LDA为分类器的16个主题的单词分布为:\n")
        for topic in topic_list_lda:
            print(topic)
    
        """测试"""
        file_test = "./cnews.test_jieba.txt"
        news_test = open(file_test, 'r', encoding='UTF-8')
        test = []
        # 处理成正确的输入格式
        for line in news_test:
           # line = line.split('\t')[1]
            #line = re.sub(r'[^\u4e00-\u9fa5]+', '', line,)
            line = [word.strip() for word in line.split(' ')]
            test.append(line)
    
        for text in test:
            corpus_test = dictionary.doc2bow((text))
            # print(corpus_test)
    
    
    
        corpus_test = [dictionary.doc2bow(text) for text in test]
        # print(corpus_test)
        # 得到每个测试集的主题分布
        
        topics_test = lda.get_document_topics(corpus_test)
    
        for i in range(10):
            print(i)
            print('的主题分布为:\n')
            print(topics_test[i], '\n')
    
        fr.close()
        news_test.close()
    
    

    [1] 我是这样一步步理解–主题模型(Topic Model)、LDA(案例代码) - 简书
    [2] 一文详解LDA主题模型 - 知乎
    [3] 主题模型-LDA浅析_Stay hungry, Stay foolish-CSDN博客_lda模型
    [4] 隐狄利克雷主题模型(Latent Dirichlet Allocation, LDA Topic Model) - 知乎
    [5] 文本主题抽取:用gensim训练LDA模型

    展开全文
  • THUCTC(THU Chinese Text Classification)是由清华大学自然语言处理实验室推出的中文文本分类工具包,能够自动高效地实现用户自定义的文本分类语料的训练、评测、分类功能。文本分类通常包括特征选取、特征降维、...
  • 基于相关反馈技术的基本原理, 以SVM 分类方法为基础, 研究了基于SVM 的中文文本分类反馈学习技 术, 分析了分类处理中反馈学习的主要模式, 给出了基于SVM 文本分类反馈学习的具体实现方法, 并进行了相应的 ...
  • 采用一种无须分词的中文文本分类方法,以二元汉字串表示文本特征,与需要利用词典分词的分类模型相比,避免了分词的复杂计算;为提高以bigram项表示文本特征的分类算法的准确率,提出了基于类别特征向量表示的中文...
  • 针对中文文本的自动分类问题,提出了一种逆向匹配算法。该算法的基本思路是构造一个带权值的分类主题词表,然后用词表中的关键词在待分类的文档中进行逆向匹配,并统计匹配成功的权值和,以权值和最大者作为分类结果。本...
  • 针对中文文本的自动分类问题,提出了一种新的算法。该算法的基本思路是构造一个带权值的分类主题词表,该词表采用键树的方式构建,然后利用哈希杂凑法和长词匹配优先原则在主题词表中匹配待分类的文档中的字符串,并统计...
  • Classification)是由清华大学自然语言处理实验室推出的中文文本分类工具包,能够自动高效地实现用户自定义的文本分类语料的训练、评测、分类功能。文本分类通常包括特征选取、特征降维、分类模型学习三个步骤。如何...
  • 实验采用朴素贝叶斯作为分类器,使用IG,ECE,CC,MI和CHI等5种特征选择公式对该方法与传统方法进行比较,得到分类性能宏平均指标对比分别为91.075%对86.971%,91.122%对86.992%,91.160%对87.470%,90.253%对86.061%,90.881...
  • 背景介绍笔者实验室项目正好需要用到文本分类,作为NLP领域最经典的场景之一,文本分类积累了大量的技术实现方法,如果将是否使用深度学习技术作为标准来衡量,实现方法大致可以分成两类:基于传统机器学习的文本...
  • 提出了一种基于特征项扩展的中文文本分类方法.该方法首先对文档的特征词进行分析,然后利用HowNet抽取最能代表主题的特征义原,接着根据这些义原对特征项进行扩展,并赋予扩展的特征项适当权值来说明其描述能力.最后...
  • 实验结果表明, 在英文文本分类中表现良好的特征抽取方法( IG、MI 和CHI) 在不加修正的情况下并不适合中文文本分类。文中从理论上分析了产生差异的原因, 并分析了可能的矫正方法包括采用超大规模训练语料和采用组合的...
  • 基于神经网络的中文...通过实验比较分析了不同特征选择方法与特征维度对分类性能的影响,证明了该特征选择方法在基于神经网络的中文文本分类中的优越性,并得出神经网络的特征输入维度在200左右的时候分类性能最佳。
  • 笔者实验室项目正好需要用到文本分类,作为NLP领域最经典的场景之一,文本分类积累了大量的技术实现方法,如果将是否使用深度学习技术作为标准来衡量,实现方法大致可以分成两类: 基于传统机器学习的文本分类 ...
  • 本文是参考gaussic大牛的“ text-classification-cnn-rnn”后,基于同样的数据集,嵌入词级别操作的CNN文本分类实验结果,gaussic大牛是基于字符级的;进行了第二版的更新:1。加入不同的卷积核; 2。加入正则化; 3...
  • 本文比较研究了在中文文本分类中特征选取方法对分类效果的影响。考察了文档频率 DF、 信息增 益 IG、 互信息 MI、 χ2 分布 CHI四种不同的特征选取方法。采用支持向量机(SVM)和 KNN 两种不同的分类 器以考察不同抽取...
  • 一篇好的中文翻译: 【论文阅读】Topical Word Embeddings1. 重新来过的linux系统肯定是什么都没有,首先安装pycharm什么的,用gibbslda++训练预处理好的语料,之后就用twe1训练一手。2. 训练时提示 “No module ...
  • 型的中文文本分类系统的设计和实现。对文本分类系统的系 统结构、预处理、特征提取、训练算法、分类算法等进行了详 细介绍。引入标题权重系数改进词语权重, 并提出了一种新 的分类算法。实验测试结果表明查全率和...
  • Text classification with CNN and Word2vec本文是参考gaussic大牛的“text-classification-cnn-rnn”后,基于同样的数据集,嵌入词级别所做的CNN文本分类实验结果,gaussic大牛是基于字符级的;进行了第二版的更新...
  • 搜狗实验文本分类语料库

    万次阅读 2014-03-03 16:04:05
    语料库统计的意义:提供一个较大规模的标准中文文本分类测试平台。 应用案例:中文文本分类,主题跟踪与检测等。 语料库说明 语料库数据包括: [1] 用于分类的新闻语料,按照SOGOU-T网页语料库格式整理 [2]...

空空如也

空空如也

1 2 3 4 5 ... 12
收藏数 240
精华内容 96
关键字:

中文文本分类实验