精华内容
下载资源
问答
  • 中文文本分类
    千次阅读
    2019-08-13 23:54:07
    文本挖掘与文本分类的概念

    文本挖掘(Text Mining)是从一个非机构化文本信息中获取用户感兴趣或者有用的模式过程。文本挖掘的 7 个主要领域如下:

    • 搜索和信息检索:存储和文本文档的检索,包括搜索引擎和文档的检索。
    • 文本聚类:使用聚类方法,对词汇、片段、段落或文件进行分组或分类。
    • 文本分类:对片段、段落或文件进行分组和归类,在使用数据挖掘分类的方法基础上,经过训练地标记示例模型。
    • Web 挖掘:在互联网上进行数据和文本挖掘,并特别关注网络的规模和相互联系。
    • 信息抽取:从非结构化文本中识别与提取有关的事实和关系;从非结构化或半结构化文本中抽取结构化数据的关系。
    • 自然语言处理:将语言作为一种有意义、有规则的符号系统,在底层解析和理解语言的任务(如,词性标注);目前的技术主要从语法、语义的角度发现语言最本质的结构和所表达的意义。
    • 概念提取:把单词和短语按语义分成有意义相似的组。


      目前,主要存在两种文本分类方法:
    • 一、基于模式系统(通过运用知识工程技术)
    • 二、分类模型(通过使用统计和/或机器学习技术)
    文本分类项目

    文本分类步骤:
    1)预处理:去除文本的噪声信息,例如 HTML 标签、文本格式转换、检测句子边界。
    2)中文分词:使用中文分词器为文本分词,并去除停用词。
    3)构建词向量空间:统计文本词频,生成文本的词向量空间。
    4)权重策略 ——TF-IDF 方法:使用 TF-IDF 发现特征词,并抽取为反应文档主题的特征。
    5)分类器:使用算法训练器分类。
    6)评价分类结果:分类器的测试结果分析。

    文本预处理

    1. 选择处理的文本范围
    选择适当的范围取决于文本挖掘任务的目标:对于分类或聚类的任务,往往把整个文档作为处理单位;对于情感分析、文档自动文摘或信息检索,段落或章节可能更合适。
    2.建立分类文本语料库
    1)训练集语料
    复旦大学谭松波中文文本分类语料库
    搜狗新闻分类语料库
    相对于搜狗新闻分类而言,复旦大学的中文文本语料库小一些,但质量很高,是用于学习教育比较专业的语料。
    2)测试语料集
    所谓测试集就是待分类的文本语料,可以是训练集的一部分,也可以是外部来源的文本语料。待分类文本资源的获取方式有很多,如公司、图书馆、商业公司、互联网。
    3)文本格式转换
    不同格式的文本不论采用哪种处理方式,都要统一转换为纯文本文件,例如,网页文本、Word 或 PDF 文件都要转换为纯文本格式。
    一般 Python 去除 HTML 标签,较多使用 lxml 库,这是一个 C 语言编写的 XML 扩展库,比使用 re 正则表达式库的标签去除方式性能高得多,适用于海量的网络文本格式转换。
    样例代码:

    from lxml import html
    
    path = 'data/1.html'
    content = open(path,'rb').read()
    page = html.document_fromstring(content)
    text = page.text_content()
    print(text)
    

    4)检测句子边界:标记句子结束
    句子边界检测时分解整个文档,并转换成单独句子的过程,对于中文文本,它就是寻找“。”、“?”、“!”的过程,英文中有 “.” 等。

    中文分词介绍

    中文分词指的是将一个汉字序列切分成一个单独的词。分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。
    中文分词难点:
    一个著名的例子:“鸡蛋”、“牛肉”、“下雨”是词吗?如果是,那么“鸭蛋”、“驴肉”、“下雪”、“鸟蛋”、“鱼肉”、“下雾”也应该是词,按照这样的规则组合下去,会产生很多令人费解的结论,如果不是,这些字符串在我们日常生活中使用的频率非常高,而且都有独立的意义。
    一般像这种到最后谁也想不明白的问题,最终都交给概率论。
    分词是自然语言处理中最基本、最底层的模块,分词精度对后续应用模块影响很大。目前,文本的结构化表示简单分为四大类:词向量空间模型、主题模型、依存句法的树表示、RDF的图表示。
    jieba 分词系统支持的分词模式包括默认切分、全切分、搜索引擎切分几种。中文文本分词之后,连续的字序列就变成了以词为单位的向量。向量中的每个分量都是一个有独立意义的词。通过分词,中文文本实现了最基础的结构化。
    在实际应用中,为了后续生成词向量空间模型方便,还要引入 Scikit-Learn 库的 Bunch 数据结构将分词后的文本信息转换为文本向量信息并对象化。

    from sklearn.datasets.base import Bunch # 导入Bunch类
    import os
    import pickle
    # Bunch 类提供一种 Key,value的对象形式
    # target_name:所有分类集名称列表
    # label:每个文件的分类标签列表
    # filenames:文件路径
    # contents:分词后文件词向量形式
    
    def savefile(savepath,content): # 保存至文件
        fp = open(savepath,"wb")
        fp.write(content)
        fp.close()
    
    def readfile(path): # 读取文件
        fp = open(path,"rb")
        content = fp.read()
        fp.close()
        return content
        
    bunch = Bunch(target_name=[],label=[],filenames=[],contents=[])
    wordbag_path = "train_word_bag/train_set.dat" # 分词语料 Bunch 对象持久化文件路径
    seg_path = "train_corpus_seg/" # 分词后分类语料库路径
    
    catelist = os.listdir(seg_path)
    bunch.target_name.extend(catelist) # 将类别信息保存到 Bunch 对象中
    for mydir in catelist:
        class_path = seg_path + mydir +"/"
        file_list = os.listdir(class_path)
        for file_path in file_list:
            fullname = class_path + file_path
            bunch.label.append(mydir) # 保存当前文件的分类标签
            bunch.filenames.append(fullname) # 保存当前文件的文件路径
            bunch.contents.append(readfile(fullname).strip()) # 保存文件词向量
            
        # Bunch 对象持久化
        file_obj = open(wordbag_path,"wb")
        pickle.dump(bunch,file_obj)
        file_obj.close()
        
        print("构建文本对象结束")
    

    这样就在目录下生成了一个 train_set.dat 文件。此文件保存所有训练文件的所有分类信息,以及每个文件的文件名、文件所属分类信息和词向量。

    Scikit-Learn 库简介

    Scikit-Learn 首页

    1 .模块分类

    • 分类和回归算法:广义线性模型,线性和二次判别分析,岭回归,支持向量机,随机梯度下降,KNN,高斯过程,交叉分解,朴素贝叶斯,决策树,集成方法,多细粒度的算法,特征选择,半监督,保序回归,概率标准。
    • 聚类算法:K-means,仿射传播,均值漂移,谱聚类,分层聚类,DBSCAN,Birch。
    • 维度约简:PCA,潜在语义分析(截断奇异值分析),字典学习,因子分析,ICA,非负矩阵分解。
    • 模型选择:交叉验证,评价估计性能,网格搜索,搜索参数估计,模型的预测质量的量化评价,模型的持久化,验证曲线,绘制分数评价模型。
    • 数据预处理:标准化,去除均值率和方差缩放,正规化,二值化,编码分类特征,缺失值的插补。

    2 . 主要特点

    • 操作简单,高效的数据挖掘和数据分析。
    • 无访问限制,在任何情况下可重复使用。
    • 建立在 Numpy、SciPy 和 Matplotlib 基础上。
    • 使用商业开源协议 —— BSD 许可证。
    向量空间模型

           文本分类的结构化方法就是向量空间模型。虽然越来越多的实践证明,这种模型存在着局限性,但是迄今为止,它仍是在文本分类中应用最广泛、最为流行的数据结构,也是很多相关技术的基础,例如推荐系统、搜索引擎。
      向量空间模型把文本表示为一个向量,该向量的每个特征表示为文本中出现的词。通常,把训练集中出现的每个不同的字符串都作为一个维度,包括停用词、专有词、词组和其他类型模式串,如电子邮件地址和 URL 。目前,大多数文本挖掘系统都把文本存储为向量空间表示,因为他便于运用机器学习算法。这类算法适用并能有效处理高维空间文本的情况。
      由于文本在存储为向量空间时维度比较高,为节省存储空间和提高存储效率,在文本分类之前会自动过滤掉某些字或词,这些字或词即被称为停用词。这类词一般都是意义模糊的常用词,还有一些语气助词,通常它们对文本起不了分类特征的意义。这些停用词都是人工输入,非自动化生成的,生成后的停用词会形成一张停用词表。可以下载停用词表
      读取停用词列表代码:

    #读取文件
    # 1. 读取停用词表
    stopword_path = "train_word_bag/hlt_stop_words.txt"
    stpwrdlst = readfile(stopword_path).splitines()
    

    权重策略:TF-IDF 方法
    • 文本1:My dog ate my homework .
    • 文本2:My cat ate the sandwich.
    • 文本3:A dolphin ate the homework.

    生成的词袋中不重复的词 9 个,这里增加词频信息:a(1),ate(3),cat(1),dolphin(1),dog(1),homework(2),my(3),sandwich(1),the(2).
    二元表示法:

    • 文本1:0,1,0,0,1,1,1,0,0(尽管 “my” 出现了两次,但二元向量表示中仍然是 “1”)。
    • 文本2:0,1,1,0,0,0,1,1,1。
    • 文本3:1,1,0,1,0,1,0,0,1。

    采用这种方式的忽略了一个句子中出现多个相同词的词频信息,采用整数型计数方式的词向量表示:

    • 文本1:0,1,0,0,1,1,2,0,0(“my” 在句子中出现了两次)。
    • 文本2:0,1,1,0,0,0,1,1,1。
    • 文本3:1,1,0,1,0,1,0,0,1。

    接下来,对整数型计数方式进行归一化。归一化可以避免句子长度不一致的问题,便于算法计算。而且对于基于概率的算法,词频信息就变为了概率分布,这就是文档的 TF 信息。

    • 文本1:0,1/5,0,0,1/5,1/5,2/5,0,0。
    • 文本2:0,1/5,1/5,0,0,0,1/5,1/5,1/5。
    • 文本3:1/5,1/5,0,1/5,0,1/5,0,0,1/5。

    词条的文档频率:a(1/3),ate(3/3),cat(1/3),dolphin(1/3),dog(1/3),homework(2/3),my(3/3),sandwich(1/3),the(2/3).

    词袋模型的 IDF 权重:
    a log(3/1), ate log(3/3), cat log(3/1), dolphin log(3/1), dog log(3/1), homework log(3/2), my log(3/2), sandwich log(3/1), the log(3/2)。

    1. TF-IDF权重策略
      计算文本的权重向量,应该选择一个有效的权重方案。最流行的方案是 TF-IDF 权重策略。TF-IDF 的含义是词频逆文档频率,其含义是:如果某个词或短语在一篇文章中出现的频率高,并且在其他文档中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。
      “my” 这个词在文本中是经常出现的词汇之一。它不仅多次出现在单一的文本中,而且几乎出现在每个文档中。逆文档频率就是使用词条的文档频率来抵消该词的词频对权重的影响,从而得到一个较低的权重。
      词频(Term Frequency, TF)指的是某一个给定的词语在该文件中出现的频率。这个数字是对词数(Term Count)的归一化,以防止它偏向长的文件。它的重要性可表示为:


    T F i j = n i , j ∑ k n k , j TF_{ij}=\frac{n_{i,j}}{\displaystyle\sum_k{n_{k,j}}} TFij=knk,jni,j

      分子是该词在文件中的出现次数,而分母则是在文件中所有字词的出现次数之和.   逆向文件频率(Inverse Document Frequency, IDF)是一个词普遍重要性的度量.某一特定词语的 IDF,可以由总文件数目除以包含该词语的文件的数目,再将得到的商取对数得到.

    公式为:


    I D F i = log ⁡ ∣ D ∣ { j : t i ∈ d j } IDF_i=\log\frac{|D|}{\{j:t_i\in d_j\}} IDFi=log{j:tidj}D

      其中,
    • ∣ D ∣ : |D|: D: 语料库中的文件总数。

    • j : j: j: 包含词语的文件数目。如果该词语不在语料库中,就会导致分母为零,因此一般情况下使用 1 + ∣ { d ∈ D : t ∈ d } ∣ 1+|\{d\in D:t\in d\}| 1+{dD:td}

      然后再计算 T F TF TF I D F IDF IDF 的乘积。
      某一特定文件内的高词频率,以及该词语在整个文件集合中的低文件频率( T F I D F i j = T F i j I × I D F i j TFIDF_{ij}=TF_{ij}I\times IDF_{ij} TFIDFij=TFijI×IDFij),可以产生出高权重的 T F − I D F TF-IDF TFIDF 。因此, T F − I D F TF-IDF TFIDF 倾向于过滤掉常见的词语,保留重要的词语。

        import sys
        import os
        from sklearn.datasets.base import Bunch # 引入 Bunch 类
        import pickle # 引入持久化类
        from sklearn import feature_extraction
        from sklearn.feature_extraction.text import TfidfTransformer # TF-IDF 向量转换类
        from sklearn.feature_extraction.text import TfidfVectorizer # TF-IDF 向量生成类
        
        # 读取 Bunch 对象
        def readbunchobj(path):
            file_obj = open(path,"rb")
            bunch = pickle.load(file_obj)
            file_obj.close()
            return bunch
        
        # 写入 Bunch 对象
        def writebunchobj(path,bunchobj):
            file_obj = open(path,"wb")
            pickle.dump(bunchobj,file_obj)
            file_obj.close()
        
        
        def savefile(savepath, content):  # 保存至文件
            fp = open(savepath, "wb")
            fp.write(content)
            fp.close()
        
        
        def readfile(path):  # 读取文件
            fp = open(path, "rb")
            content = fp.read()
            fp.close()
            return content
        
        # 从训练集生成 TF-IDF 向量词袋
        # 导入分词后的词向量 Bunch 对象
        path = "train_word_bag/train_set.dat" # 词向量空间保存路径
        bunch = readbunchobj(path)
        
        #读取停用词表
        stopword_path = "train_word_bag/hlt_stop_words.txt"
        stpwrdlst = readfile(stopword_path).splitines()
        
        # 构建 TF-IDF 词向量对象
        tfidfspace = Bunch(target_name=bunch.target_name, label=bunch.label, filenames=bunch.filenames, tdm=[], vocabulary={})
        
        # 使用 TfidfVectorizer
        vectorizer = TfidfVectorizer(stop_words=stpwrdlst,sublinear_tf=True,max_df=0.5)
        transformer = TfidfTransformer() # 该类会统计每个词语的 TF-IDF 权值
        
        # 文本转为词频矩阵,单独保存字典文件
        tfidfspace.tdm = vectorizer.fit_transform(bunch.contents)
        tfidfspace.vocabulary = vectorizer.vocabulary_
        
        # 持久化 TF-IDF 向量词袋
        space_path = "train_word_bag/tfdifspace.dat" # 词向量词袋保存路径
        writebunchobj(space_path,tfidfspace)
      

    使用朴素贝叶斯分类模块

    最常用的文本分类方法有 KNN 最近邻算法、朴素贝叶斯算法和支持向量机算法。一般而言,KNN 最近邻的算法原理最简单,分类精度尚可,但是速度最慢;朴素贝叶斯算法对于短文本分类效果最好,精度较高;支持向量机的算法的优势是支持线性不可分的情况,精度上取中。
      测试步骤与训练集相同,首先是分词,之后生成文件词向量文件,直至生成词向量模型。不同的是,在训练词向量模型时,需要加载训练集词袋,将测试集产生的词向量映射到训练集词袋的词典中,生成向量空间模型。

    代码如下:

    # 导入分词后的词向量 Bunch 对象
    path = "test_word_bag/test_set.dat" # 词向量空间保存路径
    bunch = readbunchobj(path)
    
    # 构建测试集 TF-IDF 向量空间
    testspace = Bunch(target_name=bunch.target_name, label=bunch.label, filenames=bunch.filenames,tdm=[],vocabulary={})
    
    # 导入训练集的词袋
    trainbunch = readbunchobj("tarin_word_bag/tfdifspace.dat")
    
    # 使用 TfidfVectorizer 初始化向量空间模型
    vectorizer = TfidfVectorizer(stop_words=stpwrdlst,sublinear_tf=True,max_df=0.5,vocabulary=tarinbunch.vocabulary) # 使用训练集词袋向量
    transformer = TfidfTransformer()
    testspace.tdm = vectorizer.fit_transform(bunch.contents)
    testspace.vocabulary = trainbunch.vocabulary
    
    # 创建词袋的持久化
    space_path = "test_word_bag/testsapce.dat" # 词向量空间保存路径
    writebunchobj(space_path,testspace)
    
    # 导入多项式贝叶斯算法包
    from sklearn.naive_bayes import MultinomialNB
    
    # 执行预测
    # 导入训练集向量空间
    trainpath = "train_word_bag/tfdifspace.dat"
    train_set = readbunchobj(trainpath)
    
    # 导入测试集向量空间
    testspath = "test_word_bag/testspace.bat"
    test_set = readbunchobj(testspath)
    
    # 应用朴素贝叶斯算法
    # alpha:0.001 alpha 越小,迭代次数越多,精度越高
    clf = MultinomialNB(alpha=0.001).fit(train_set.tdm,train_set.label)
    
    # 预测分类结果
    predicted = clf.prdict(test_set.tdm)
    total = len(predicted);rate=0
    for flabel,file_name,expect_cate in zip(test_set.label,test_set.filenames,predicted):
        if flabel != expect_cate:
            rate += 1
            print(file_name,":实际类别:",flabel,"-->预测类别:",expect_cate)
        # 精度
        print("error rate:",float(rate)*100/float(total),"%")
    

    分类结果评估

    机器学习领域的算法评估有三个基本的指标。

    1)召回率(Recall Rate,也叫查全率):是检索出的相关文档数和文档库中所有的相关文档数的比率,衡量的是检查系统的查全率。


    召回率(Recall)= 系统检索到的相关文件 / 系统所有相关的文件总数

    2)准确率(Precision,也称为精度):是检索出的相关文档数与检索出的文档总数的比率,衡量的是检索系统的查准率。
    准确率(Precision)= 系统检索到的相关文件 / 系统所有检索到的文件总数

    注意:准确率和召回率是互相影响的,理想情况下肯定是做到两者都高,但是一般情况下准确率高,召回率就低;召回率高,准确率就低。

    3) F β − M e a s u r e F_{\beta}-Measure FβMeasure(又称为 F-Score):是机器学习领域常用的评价标准,计算公式为:


    F β = ( β 2 + 1 ) P R β 2 P + R F_{\beta}=\frac{(\beta^2+1)PR}{\beta^2P+R} Fβ=β2P+R(β2+1)PR

    其中, β \beta β 是参数, P P P 是准确率, R R R 是召回率
    β = 1 \beta=1 β=1 时,就是最常见的 F 1 − M e a s u r e F_1-Measure F1Measure 了。


    F 1 = 2 P R P + R F_1=\frac{2PR}{P+R} F1=P+R2PR

    文本分类项目的分类结果评估,代码如下。

    import numpy as np
    from sklearn import metrics
    
    # 定义分类精度函数
    def metrics_result(actual, predict):
        print("精度:{0:.3f}".format(metrics.precision_score(actual,predict)))
        print("召回:{0:0.3f}".format(metrics.recall_score(actual,predict)))
        print("f1-score:{0:.3f}".format(metrics.f1_score(actual,predict)))
        
    metrics_result(test_set.label,predicted)
    
    更多相关内容
  • 信息类文本主观题论证思路和论证特点题型汇编.pdf
  • 文本分类概述(nlp)

    万次阅读 多人点赞 2018-06-22 23:28:27
    文本分类问题:给定文档p(可能含有标题t),将文档分类为n个类别中的一个或多个 文本分类应用:常见的有垃圾邮件识别,情感分析 文本分类方向:主要有二分类,多分类,多标签分类 文本分类方法:传统机器学习...

    文本分类问题: 给定文档p(可能含有标题t),将文档分类为n个类别中的一个或多个
    文本分类应用: 常见的有垃圾邮件识别,情感分析
    文本分类方向: 主要有二分类,多分类,多标签分类
    文本分类方法: 传统机器学习方法(贝叶斯,svm等),深度学习方法(fastText,TextCNN等)
    本文的思路: 本文主要介绍文本分类的处理过程,主要哪些方法。致力让读者明白在处理文本分类问题时应该从什么方向入手,重点关注什么问题,对于不同的场景应该采用什么方法。
    文本分类的处理大致分为文本预处理、文本特征提取、分类模型构建等。和英文文本处理分类相比,中文文本的预处理是关键技术。

    一、中文分词:

    针对中文文本分类时,很关键的一个技术就是中文分词。特征粒度为词粒度远远好于字粒度,其大部分分类算法不考虑词序信息,基于字粒度的损失了过多的n-gram信息。下面简单总结一下中文分词技术:基于字符串匹配的分词方法、基于理解的分词方法和基于统计的分词方法 [1]。

    1,基于字符串匹配的分词方法:
    过程:这是一种基于词典的中文分词,核心是首先建立统一的词典表,当需要对一个句子进行分词时,首先将句子拆分成多个部分,将每一个部分与字典一一对应,如果该词语在词典中,分词成功,否则继续拆分匹配直到成功。
    核心: 字典,切分规则和匹配顺序是核心
    分析:优点是速度快,时间复杂度可以保持在O(n),实现简单,效果尚可;但对歧义和未登录词处理效果不佳。

    2,基于理解的分词方法:基于理解的分词方法是通过让计算机模拟人对句子的理解,达到识别词的效果。其基本思想就是在分词的同时进行句法、语义分析,利用句法信息和语义信息来处理歧义现象。它通常包括三个部分:分词子系统、句法语义子系统、总控部分。在总控部分的协调下,分词子系统可以获得有关词、句子等的句法和语义信息来对分词歧义进行判断,即它模拟了人对句子的理解过程。这种分词方法需要使用大量的语言知识和信息。由于汉语语言知识的笼统、复杂性,难以将各种语言信息组织成机器可直接读取的形式,因此目前基于理解的分词系统还处在试验阶段。

    3,基于统计的分词方法:
    过程:统计学认为分词是一个概率最大化问题,即拆分句子,基于语料库,统计相邻的字组成的词语出现的概率,相邻的词出现的次数多,就出现的概率大,按照概率值进行分词,所以一个完整的语料库很重要。
    主要的统计模型有: N元文法模型(N-gram),隐马尔可夫模型(Hidden Markov Model ,HMM),最大熵模型(ME),条件随机场模型(Conditional Random Fields,CRF)等。


    二、文本预处理:

    1,分词: 中文任务分词必不可少,一般使用jieba分词,工业界的翘楚。
    2,去停用词:建立停用词字典,目前停用词字典有2000个左右,停用词主要包括一些副词、形容词及其一些连接词。通过维护一个停用词表,实际上是一个特征提取的过程,本质 上是特征选择的一部分。
    3,词性标注: 在分词后判断词性(动词、名词、形容词、副词…),在使用jieba分词的时候设置参数就能获取。


    三、文本特征工程:

    文本分类的核心都是如何从文本中抽取出能够体现文本特点的关键特征,抓取特征到类别之间的映射。 所以特征工程很重要,可以由四部分组成:
    这里写图片描述
    1,基于词袋模型的特征表示:以词为单位(Unigram)构建的词袋可能就达到几万维,如果考虑二元词组(Bigram)、三元词组(Trigram)的话词袋大小可能会有几十万之多,因此基于词袋模型的特征表示通常是极其稀疏的。
    (1)词袋特征的方法有三种:

    • Naive版本:不考虑词出现的频率,只要出现过就在相应的位置标1,否则为0;
    • 考虑词频(即term frequency):,认为一段文本中出现越多的词越重要,因此权重也越大;
    • 考虑词的重要性:以TF-IDF表征一个词的重要程度。TF-IDF反映了一种折中的思想:即在一篇文档中,TF认为一个词出现的次数越大可能越重要,但也可能并不是(比如停用词:“的”“是”之类的);IDF认为一个词出现在的文档数越少越重要,但也可能不是(比如一些无意义的生僻词)。

    (2)优缺点:

    • 优点: 词袋模型比较简单直观,它通常能学习出一些关键词和类别之间的映射关系
    • 缺点: 丢失了文本中词出现的先后顺序信息;仅将词语符号化,没有考虑词之间的语义联系(比如,“麦克风”和“话筒”是不同的词,但是语义是相同的);

    2,基于embedding的特征表示: 通过词向量计算文本的特征。(主要针对短文本)

    • 取平均: 取短文本的各个词向量之和(或者取平均)作为文本的向量表示;
    • 网络特征: 用一个pre-train好的NN model得到文本作为输入的最后一层向量表示;

    3,基于NN Model抽取的特征: NN的好处在于能end2end实现模型的训练和测试,利用模型的非线性和众多参数来学习特征,而不需要手工提取特征。CNN善于捕捉文本中关键的局部信息,而RNN则善于捕捉文本的上下文信息(考虑语序信息),并且有一定的记忆能力。

    4,基于任务本身抽取的特征:主要是针对具体任务而设计的,通过我们对数据的观察和感知,也许能够发现一些可能有用的特征。有时候,这些手工特征对最后的分类效果提升很大。举个例子,比如对于正负面评论分类任务,对于负面评论,包含负面词的数量就是一维很强的特征。

    5,特征融合:对于特征维数较高、数据模式复杂的情况,建议用非线性模型(如比较流行的GDBT, XGBoost);对于特征维数较低、数据模式简单的情况,建议用简单的线性模型即可(如LR)。

    6,主题特征:
    LDA(文档的话题): 可以假设文档集有T个话题,一篇文档可能属于一个或多个话题,通过LDA模型可以计算出文档属于某个话题的概率,这样可以计算出一个DxT的矩阵。LDA特征在文档打标签等任务上表现很好。
    LSI(文档的潜在语义): 通过分解文档-词频矩阵来计算文档的潜在语义,和LDA有一点相似,都是文档的潜在特征。


    四、文本分类,传统机器学习方法:

    这部分不是重点,传统机器学习算法中能用来分类的模型都可以用,常见的有:NB模型,随机森林模型(RF),SVM分类模型,KNN分类模型,神经网络分类模型。
    这里重点提一下贝叶斯模型,因为工业用这个模型用来识别垃圾邮件[2]。


    五、深度学习文本分类模型:

    1,fastText模型: fastText 是word2vec 作者 Mikolov 转战 Facebook 后16年7月刚发表的一篇论文: Bag of Tricks for Efficient Text Classification[3]。
    模型结构:
    在这里插入图片描述
    原理: 句子中所有的词向量进行平均(某种意义上可以理解为只有一个avg pooling特殊CNN),然后直接连接一个 softmax 层进行分类。

    2,TextCNN: 利用CNN来提取句子中类似 n-gram 的关键信息。
    模型结构[4]:
    在这里插入图片描述
    在这里插入图片描述

    改进: fastText 中的网络结果是完全没有考虑词序信息的,而TextCNN提取句子中类似 n-gram 的关键信息。

    3,TextRNN:
    模型: Bi-directional RNN(实际使用的是双向LSTM)从某种意义上可以理解为可以捕获变长且双向的的 “n-gram” 信息。
    在这里插入图片描述
    改进: CNN有个最大问题是固定 filter_size 的视野,一方面无法建模更长的序列信息,另一方面 filter_size 的超参调节也很繁琐。

    4,TextRNN + Attention:
    模型结构[5]:
    在这里插入图片描述
    改进:注意力(Attention)机制是自然语言处理领域一个常用的建模长时间记忆机制,能够很直观的给出每个词对结果的贡献,基本成了Seq2Seq模型的标配了。实际上文本分类从某种意义上也可以理解为一种特殊的Seq2Seq,所以考虑把Attention机制引入近来。

    5,TextRCNN(TextRNN + CNN):
    模型结构[6]:
    在这里插入图片描述
    过程:
    利用前向和后向RNN得到每个词的前向和后向上下文的表示:
    在这里插入图片描述
    词的表示变成词向量和前向后向上下文向量连接起来的形式:
    在这里插入图片描述
    再接跟TextCNN相同卷积层,pooling层即可,唯一不同的是卷积层 filter_size = 1就可以了,不再需要更大 filter_size 获得更大视野。
    6,深度学习经验:
    模型显然并不是最重要的: 好的模型设计对拿到好结果的至关重要,也更是学术关注热点。但实际使用中,模型的工作量占的时间其实相对比较少。虽然再第二部分介绍了5种CNN/RNN及其变体的模型,实际中文本分类任务单纯用CNN已经足以取得很不错的结果了,我们的实验测试RCNN对准确率提升大约1%,并不是十分的显著。最佳实践是先用TextCNN模型把整体任务效果调试到最好,再尝试改进模型。

    理解你的数据: 虽然应用深度学习有一个很大的优势是不再需要繁琐低效的人工特征工程,然而如果你只是把他当做一个黑盒,难免会经常怀疑人生。一定要理解你的数据,记住无论传统方法还是深度学习方法,数据 sense 始终非常重要。要重视 badcase 分析,明白你的数据是否适合,为什么对为什么错。

    超参调节: 可以参考深度学习网络调参技巧 - 知乎专栏

    一定要用 dropout: 有两种情况可以不用:数据量特别小,或者你用了更好的正则方法,比如bn。实际中我们尝试了不同参数的dropout,最好的还是0.5,所以如果你的计算资源很有限,默认0.5是一个很好的选择。

    未必一定要 softmax loss: 这取决与你的数据,如果你的任务是多个类别间非互斥,可以试试着训练多个二分类器,也就是把问题定义为multi lable 而非 multi class,我们调整后准确率还是增加了>1%。

    类目不均衡问题: 基本是一个在很多场景都验证过的结论:如果你的loss被一部分类别dominate,对总体而言大多是负向的。建议可以尝试类似 booststrap 方法调整 loss 中样本权重方式解决。

    避免训练震荡: 默认一定要增加随机采样因素尽可能使得数据分布iid,默认shuffle机制能使得训练结果更稳定。如果训练模型仍然很震荡,可以考虑调整学习率或 mini_batch_size。


    六、实例:

    知乎的文本多标签分类比赛,给出第一第二名的介绍网址:
    NLP大赛冠军总结:300万知乎多标签文本分类任务(附深度学习源码)
    2017知乎看山杯 从入门到第二


    参考文献

    1.中文分词原理及分词工具介绍:https://blog.csdn.net/flysky1991/article/details/73948971/
    2.用朴素贝叶斯进行文本分类:https://blog.csdn.net/longxinchen_ml/article/details/50597149
    3.Joulin A, Grave E, Bojanowski P, et al. Bag of Tricks for Efficient Text Classification[J]. 2016:427-431.
    4.Kim Y . Convolutional Neural Networks for Sentence Classification[J]. Eprint Arxiv, 2014.
    5.Pappas N , Popescu-Belis A . Multilingual Hierarchical Attention Networks for Document Classification[J]. 2017.
    6.Lai S, Xu L, Liu K, et al. Recurrent Convolutional Neural Networks for Text Classification[C]//AAAI. 2015, 333: 2267-2273.

    展开全文
  • 文本分类过程概述

    千次阅读 2019-01-09 19:15:11
    传统的文本分类过程通常包括训练模块和分类模块如下图所示:一般来讲文本分类过程包括预处理、文本表示、特征降维、训练分类器和分类性能评估。  文本分类过程图 1、文本分类预处理  由于计算机很难直接处...

    传统的文本分类过程通常包括训练模块和分类模块如下图所示:一般来讲文本分类过程包括预处理、文本表示、特征降维、训练分类器和分类性能评估。

                                                                                               文本分类过程图

    1、文本分类预处理

            由于计算机很难直接处理网络上存在的大量半结构化或结构化的文本数据,所以在文本分类之前需要对这些数据进行相应的预处理。

            文本的预处理包括文本分词、去除停用词(包括标点、数字和一些无意义的词)、词义消歧、统计等处理。中文与英文相比,在分类上关键的区别是在数据集的预处理阶段。对中文文本进行分类之前,首先要进行分词处理,而英文文本单词与单词之间则有空格进行分割,无需进行分词。近几年,中文文本的分词技术主要有三类:基于字符串匹配的分词方法、基于理解的分词方法和基于统计的分词。

            A、基于字符串匹配的分词方法

            该方法也成为机械分词方法,其主要思想是预想构造一个“充分大的”词典,它是按照一定的策略将待分析的汉字串与一个“充分大的”机器词典中的词条进行匹配,若在词典中找到某个字符串,则匹配成功(识别出一个词)。按照不同的长度优先匹配的情况,可以分为最大(最长)匹配和最小(最短)匹配;按照是否与词性标注过程相结合,又可以分为单纯分词方法和分词与标注相结合的一体化方法。常用的几种机械分词方法如下:正向最大匹配法(由左到右的方向)、逆向最大匹配法(由有到左的方向)、最少切分(使每一句中切出的词数最小)。

            还可以将上述各种方法相结合,例如,可以将正向最大匹配方法和逆向最大匹配方法结合起来构成双向匹配法。由于汉语单字成词的特点,正向最小匹配和逆向最小匹配一般很少使用。一般说来,逆向匹配的切分精度略高于正向匹配,遇到的歧义现象也较少。统计结果表明,单纯使用正向最大匹配的错误率为1/169,单纯使用逆向最大匹配的错误率为1/245.但这种精度还远远不能满足实际的需要。实际使用的分词系统,都是把机械分词作为一种初分手段,还需通过利用各种其他的语言信息来进一步提高切分的准确率。

            一种方法是改进扫描方式,称为特征扫描或标志切分,优先在待分析字符串中识别和切分出一些带有明显特征的词,以这些词作为断点,可将原字符串分为较小的串再来进行机械分词,从而减少匹配的错误率。另一种方法是将分词和词类标注结合起来,利用丰富的词类信息对分词决策提供帮助,并且在标注过程中又反过来对分词结果进行检验、调整,从而极大地提高切分的准确率。

            B、基于理解的分词方法

            该方法是让计算机人工智能化,通过对句子的理解,达到对词进行识别的效果。其主要思想就是分词和句法、语义分析同时进行,利用句法信息和语义信息来处理歧义现象。它通常包括三个部分:分词子系统、句法语义子系统、总控部分。通过总控部分的协调,分词子系统获得有关词、句子的句法和语义信息来对分词歧义进行判断,即人对句子的理解过程应用到计算机上。该分词方法需要使用大量的语言知识和信息。由于汉语语言知识的庞统、复杂性,难以将各种语言信息组织成机器可直接读取的形式,因此目前基于理解的分词系统还处在试验阶段。

            C、基于统计的分词方法

    2、文本表示

            A、布尔模型

            B、向量空间模型

            C、潜在语义索引模型

            D、概率模型

    3、特征降维

            由于使用的数据集特征的集合通常非常巨大,例如DNA微阵列数据中,一条样本含有的基因维数可达到几千或者几万。Web文本数据中包含非常多的术语,维数可达到几万甚至几十万。这些数据中经常含有大量的对分类有副作用的噪声特征,假如在文本表示中使用这些特征会大大影响最终的分类效果,因此需要减少特征的维数,来提高分类的精度和文本数据的处理速度。特征选择是特征空间降维的重要方法,它从总的特征集中选择对文本分类贡献度较大的特征子集,过滤掉噪声和分类贡献低的特征进行独立的评估,这样特征会获得一个评估分值,然后对所有的特征按照其评估分值的大小进行排序,选取预定数目的最佳特征作为特征子集,其中阈值的选取要根据具体问题的实验来确定。特征选择在减少特征维数的同时还要保证不影响文本的主题信息,这样在提高分类精度的同时也会大大提高文本数据的处理效率。特征选择容易实现,且方法很多,目前常用的特征选择方法有文档频率、信息增益、互信息、期望交叉熵。

    4、分类器

            文本分类的核心问题是如何构造分类器,根据分类体系将一个文本分到一个或几个相关联的类别中。文本分类的具体过程是,用已知的训练集训练分类器,再利用分类器对未知的文本进行分类。在众多的分类算法中,常用的典型分类算法有决策树、最大熵(MaxEnt)、贝叶斯和支持向量机(SVM)算法等。下面简单介绍这几种分类算法。

    5、分类性能评估

    展开全文
  • NLP之文本分类

    万次阅读 2018-09-26 15:08:07
    文本自动分类简称文本分类(text categorization),是模式识别与自然语言处理密切结合的研究课题。传统的文本分类是基于文本内容的,研究如何将文本自动划分成政治的、经济的、军事的、体育的、娱乐的等各种类型。 ...

    文本自动分类简称文本分类(text categorization),是模式识别与自然语言处理密切结合的研究课题。传统的文本分类是基于文本内容的,研究如何将文本自动划分成政治的、经济的、军事的、体育的、娱乐的等各种类型。

    目录

    文本表示

    文本向量化

    向量的相似性度量(similarity)

    文本特征选择方法

    特征权重计算方法

    分类器设计

    文本分类评测指标


    文本分类是在预定义的分类体系下,根据文本的特征(内容或属性),将给定文本与一个或多个类别相关联的过程。因此,文本分类研究涉及文本内容理解和模式分类等若干自然语言理解和模式识别问题。

    文本分类任务的最终目的是要找到一个有效的映射函数,准确地实现域D×C到值T或F的映射,这个映射函数实际上就是我们通常所说的分类器。因此,文本分类中有两个关键问题:一个是文本的表示,另一个就是分类器设计。

    根据分类知识获取方法的不同,文本自动分类系统大致可分为两种类型:基于知识工程(knowledge engineering, KE)的分类系统和基于机器学习(machine learning, ML)的分类系统。90年代以后,基于统计机器学习的文本分类方法日益受到重视,这种方法在准确率和稳定性方面具有明显的优势。系统使用训练样本进行特征选择和分类器参数训练,根据选择的特征对待分类的输入样本进行形式化,然后输入到分类器进行类别判定,最终得到输入样本的类别。

    文本表示

    文本向量化

    一个文本表现为一个由文字和标点符号组成的字符串,由字或字符组成词,由词组成短语,进而形成句、段、节、章、篇的结构。要使计算机能够高效地处理真实文本,就必须找到一种理想的形式化表示方法,这种表示一方面要能够真实地反映文档的内容(主题、领域或结构等),另一方面,要有对不同文档的区分能力。

    目前文本表示通常采用向量空间模型(vecto rspace model,VSM)。

    下面首先给出VSM涉及的一些基本概念。
    文档(document):通常是文章中具有一定规模的片段,如句子、句群、段落、段落组直至整篇文章。
    项/特征项(term/feature term):特征项是VSM中最小的不可分的语言单元,可以是字、词、词组或短语等。一个文档的内容被看成是它含有的特征项所组成的集合。
    项的权重(term weight):对于含有n个特征项的文档,每一特征项tk都依据一定的原则被赋予一个权重wk,表示它们在文档中的重要程度。

    这样一个文档D可用它含有的特征项及其特征项所对应的权重所表示。

    一个文档在上述约定下可以看成是n维空间中的一个向量,这就是向量空间模型的由来。

    因此采用向量空间模型进行文本表示时,需要经过以下两个主要步骤:
    ①根据训练样本集生成文本表示所需要的特征项序列D={t1,t2,…,td};
    ②依据文本特征项序列,对训练文本集和测试样本集中的各个文档进行权重赋值、规范化等处理,将其转化为机器学习算法所需的特征向量。

    向量的相似性度量(similarity)

    任意两个文档D1和D2之间的相似系数Sim(D1,D2)指两个文档内容的相关程度(degree of relevance)。设文档D1和D2表示VSM中的两个向量:
    D1=D1(w11,w12,…,w1n)
    D2=D2(w21,w22,…,w2n)

    那么,可以借助于n维空间中两个向量之间的某种距离来表示文档间的相似系数,常用的方法是使用向量之间的内积来计算。

    如果考虑向量的归一化,则可使用两个向量夹角的余弦值来表示相似系数:

    文本特征选择方法

    在向量空间模型中,表示文本的特征项可以选择字、词、短语,甚至“概念”等多种元素。但是,如何选取特征,各种特征应该赋予多大的权重,选取不同的特征对文本分类系统的性能有什么影响等,很多问题都值得深入研究。目前已有的特征选取方法比较多,常用的方法有:基于文档频率(document frequency, DF)的特征提取法、信息增益(information gain, IG)法、χ2统计量(CHI)法和互信息(mutual information, MI)方法等。

    1.基于文档频率的特征提取法

    文档频率(DF)是指出现某个特征项的文档的频率。基于文档频率的特征提取法通常的做法是:从训练语料中统计出包含某个特征的文档的频率(个数),然后根据设定的阈值,当该特征项的DF值小于某个阈值时,从特征空间中去掉该特征项,因为该特征项使文档出现的频率太低,没有代表性;当该特征项的DF值大于另外一个阈值时,从特征空间中也去掉该特征项,因为该特征项使文档出现的频率太高,没有区分度。

    基于文档频率的特征选择方法可以降低向量计算的复杂度,并可能提高分类的准确率,因为按这种选择方法可以去掉一部分噪声特征。这种方法简单、易行。但严格地讲,这种方法只是一种借用算法,其理论根据不足。根据信息论我们知道,某些特征虽然出现频率低,但往往包含较多的信息,对于分类的重要性很大。对于这类特征就不应该使用DF方法将其直接排除在向量特征之外。

    2.信息增益法

    信息增益(IG)法依据某特征项ti为整个分类所能提供的信息量多少来衡量该特征项的重要程度,从而决定对该特征项的取舍。某个特征项ti的信息增益是指有该特征或没有该特征时,为整个分类所能提供的信息量的差别,其中,信息量的多少由熵来衡量。因此,信息增益即不考虑任何特征时文档的熵和考虑该特征后文档的熵的差值

    从信息增益的定义可知,一个特征的信息增益实际上描述的是它包含的能够帮助预测类别属性的信息量。从理论上讲,信息增益应该是最好的特征选取方法,但实际上由于许多信息增益比较高的特征出现频率往往较低,所以,当使用信息增益选择的特征数目比较少时,往往会存在数据稀疏问题,此时分类效果也比较差。因此,有些系统实现时,首先对训练语料中出现的每个词(以词为特征)计算其信息增益,然后指定一个阈值,从特征空间中移除那些信息增益低于此阈值的词条,或者指定要选择的特征个数,按照增益值从高到低的顺序选择特征组成特征向量。

    3.χ2统计量

     χ2统计量(CHI)衡量的是特征项ti和类别Cj之间的相关联程度,并假设ti和Cj之间符合具有一阶自由度的χ2分布。特征对
    于某类的χ2统计值越高,它与该类之间的相关性越大,携带的类别信息也较多,反之则越少。

    4.互信息法

    互信息(MI)法的基本思想是:互信息越大,特征ti和类别Cj共现的程度越大。

    以上是文本分类中比较经典的一些特征选取方法,实际上还有很多其他文本特征选取方法,例如,DTP(distance to transition point)方法,期望交叉熵法、文本证据权法、优势率方法,以及国内学者提出的“类别区分词”的特征提取方法,组合特征提取方法,基于粗糙集(rough set)的特征提取方法TFACQ,以及利用自然语言文本所隐含规律等多种信息的强类信息词(strong information class word, SCIW)的特征选取方法等等。

    另外需要指出的是,无论选择什么作为特征项,特征空间的维数都是非常高的,在汉语文本分类中问题表现得更为突出。这样的高维特征向量对后面的分类器存在不利的影响,很容易出现模式识别中的“维数灾难”现象。而且,并不是所有的特征项对分类都是有利的,很多提取出来的特征可能是噪声。因此,如何降低特征向量的维数,并尽量减少噪声,仍然是文本特征提取中的两个关键问题。

    特征权重计算方法

    特征权重用于衡量某个特征项在文档表示中的重要程度或者区分能力的强弱。权重计算的一般方法是利用文本的统计信息,主要是词频,给特征项赋予一定的权重。

    我们将一些常用的权重计算方法归纳为表13-2所示的形式。表中各变量的说明如下:wij表示特征项ti在文本Dj中的权重,tfij表示特征项ti在训练文本Dj中出现的频度;ni是训练集中出现特征项ti的文档数,N是训练集中总的文档数;M为特征项的个数,nti为特征项ti在训练语料中出现的次数。


    倒排文档频度(inverse document frequency, IDF)法是1972年Spark Jones提出的计算词与文献相关权重的经典计算方法,其在信息检索中占有重要地位。该方法在实际使用中,常用公式L+log ((N-ni)/ni)替代,其中,常数L为经验值,一般取为1。IDF方法的权重值随着包含 某个特征的文档数量ni的变化呈反向变化,在极端情况下,只在一篇文档中出现的特征含有最高的IDF值。TF-IDF方法中公式有多种表达形式,TFC方法和ITC方法都是TF-IDF方法的变种。

    TF-IWF(inverse word frequency)权重算法也是在TF-IDF算法的基础上由Basili et al.(1999)提出来的。TF-IWF与TF-IDF的不同主要体现在两个方面:①TF-IWF算法中用特征频率倒数的对数值IWF代替IDF; ②TF-IWF算法中采用了IWF的平方,而不像IDF中采用的是一次方。R.Basili等认为IDF的一次方给了特征频率太多的倚重,所以用IWF的平方来平衡权重值对于特征频率的倚重。

    除了上面介绍的这些比较常用的方法以外,还有很多其他权重计算方法。例如:Dagan et al.(1997)提出的基于错误驱动的(mistake-driven)特征权重算法,这种算法的类权重向量不是通过一个表达式直接计算出来的,而是首先为每个类指定一个初始权重向量,不断输入训练文本,并根据对训练文本的分类结果调整类权重向量的值,直到类权重向量的值大致不再改变为止。

    方法。例如:Dagan et al.(1997)提出的基于错误驱动的(mistake-driven)特征权重算法,这种算法的类权重向量不是通过一个表达式直接计算出来的,而是首先为每个类指定一个初始权重向量,不断输入训练文本,并根据对训练文本的分类结果调整类权重向量的值,直到类权重向量的值大致不再改变为止。

    分类器设计

    文本分类本身是一个分类问题,因此,一般的模式分类方法都可用于文本分类研究。常用的分类算法包括:朴素的贝叶斯分类法
    (naΪve Bayesian classifier)、基于支持向量机(support vector machines, SVM)的分类器、k-最近邻法(k-nearest neighbor, kNN)、神经网络法(neural network, NNet)、决策树(decision tree)分类法、模糊分类法(fuzzy classifier)、Rocchio分类方法和Boosting算法等。

    1.朴素贝叶斯分类器

    朴素贝叶斯分类器的基本思想是利用特征项和类别的联合概率来估计给定文档的类别概率。

    假设文本是基于词的一元模型,即文本中当前词的出现依赖于文本类别,但不依赖于其他词及文本的长度,也就是说,词与词之间是独立的。根据贝叶斯公式,文档Doc属于Ci类的概率为 

    在具体实现时,通常又分为两种情况:
    (1)文档Doc采用DF向量表示法,即文档向量V的分量为一个布尔值,0表示相应的特征在该文档中未出现,1表示特征在文档中出现。
    (2)若文档Doc采用TF向量表示法,即文档向量V的分量为相应特征在该文档中出现的频度。

    2.基于支持向量机的分类器

    基于支持向量机(support vector machine, SVM)的分类方法主要用于解决二元模式分类问题。

    SVM的基本思想是在向量空间中找到一个决策平面(decision surface),这个平面能“最好”地分割两个分类中的数据点。支持向量机分类法就是要在训练集中找到具有最大类间界限(margin)的决策平面。

    由于支持向量机算法是基于两类模式识别问题的,因而,对于多类模式识别问题通常需要建立多个两类分类器。与线性判别函数一样,它的结果强烈地依赖于已知模式样本集的构造,当样本容量不大时,这种依赖性尤其明显。此外,将分界面定在最大类间隔的中间,对于许多情况来说也不是最优的。对于线性不可分问题也可以采用类似于广义线性判别函数的方法,通过事先选择好的非线性映射将输入模式向量映射到一个高维空间,然后在这个高维空间中构造最优分界超平面。

    根据Yang and Liu (1999)的实验结果,SVM的分类效果要好于NNet、贝叶斯分类器、Rocchio和LLSF(linear least-square fit)分类器的效果,与kNN方法的效果相当。

    3.k-最近邻法

    kNN方法的基本思想是:给定一个测试文档,系统在训练集中查找离它最近的k个邻近文档,并根据这些邻近文档的分类来给该文档的候选类别评分。把邻近文档和测试文档的相似度作为邻近文档所在类别的权重,如果这k个邻近文档中的部分文档属于同一个类别,则将该类别中每个邻近文档的权重求和,并作为该类别和测试文档的相似度。然后,通过对候选分类评分的排序,给出一个阈值。

    4.基于神经网络的分类器

    神经网络(NNet)是人工智能中比较成熟的技术之一,基于该技术的分类器的基本思想是:给每一类文档建立一个神经网络,输入通常是单词或者是更为复杂的特征向量,通过机器学习获得从输入到分类的非线性映射。

    根据Yang and Liu (1999)的实验结果,NNet分类器的效果要比kNN分类器和SVM分类器的效果差,而且训练NNet的时间开销远远超过其他分类方法,所以,实际应用并不广泛。

    5.线性最小平方拟合法

    线性最小平方拟合(linear least-squares fit, LLSF)是一种映射方法其出发点是从训练集和分类文档中学习得到多元回归模型
    (multivariate regression model)。其中训练数据用输入/输出向量表示,输入向量是用传统向量空间模型表示的文档
    (词和对应的权重),输出向量则是文档对应的分类(带有0-1权重)。通过在向量的训练对上求解线性最小平方拟合,得到一个“单词-分类”的回归系数矩阵。

    根据Yang and Liu (1999)的实验结果,LLSF算法的分类效果稍逊于kNN和SVM算法的效果。

    6.决策树分类器

    决策树分类器也是模式识别研究的基本方法之一,其出发点是:大量复杂系统的组成普遍存在着等级分层现象,或者说复杂任务是可以通过等级分层分解完成的,文本处理过程也不例外。

    决策树是一棵树,树的根结点是整个数据集合空间,每个分结点是对一个单一变量的测试,该测试将数据集合空间分割成两个或更多个类别,即决策树可以是二叉树也可以是多叉树。每个叶结点是属于单一类别的记录。构造决策树分类器时,首先要通过训练生成决策树,然后再通过测试集对决策树进行修剪。一般可通过递归分割的过程构建决策树,其生成过程通常是自上而下的,选择分割的方法有多种,但是目标都是一致的,就是对目标文档进行最佳分割。从根结点到叶结点都有一条路径,这条路径就是一条决策“规则”。

    在决定哪个属性域(field)作为目前最佳的分类属性时,一般的做法是穷尽所有的属性域,对每个属性域分裂的好坏进行量化,从而计算出最佳分裂。信息增益是决策树训练中常用的衡量给定属性区分训练样本能力的定量标准。

    7.模糊分类器

    按照模糊分类方法的观点,任何一个文本或文本类都可以通过其特征关键词来描述其内容特征,因此,可以用一个定义在特征关键词类上的模糊集来描述它们。

    判定分类文本T所属的类别可以通过计算文本T的模糊集FT分别与其他每个文本类的模糊集Fk的关联度SR实现,两个类的关联度越大说明这两个类越贴近。

    8.Rocchio分类器

    Rocchio分类器是情报检索领域经典的算法,其基本思想是,首先为每一个训练文本C建立一个特征向量,然后使用训练文本的特征向量为每个类建立一个原型向量(类向量)。当给定一个待分类文本时,计算待分类文本与各个类别的原型向量(类向量)之间的距离,其距离可以是向量点积、向量之间夹角的余弦值或者其他相似度计算函数,根据计算出来的距离值决定待分类文本属于哪一类别。

    Rocchio分类方法的特点是计算简单、易行,其分类效果仅次于kNN方法和SVM方法。

    9.基于投票的分类方法

    基于投票的分类方法是在研究多分类器组合时提出的,其核心思想是:k个专家判断的有效组合应该优于某个专家个人的判断结果。
    投票算法主要有两种:Bagging算法和Boosting算法。

    Bagging算法
    训练R个分类器fi(i=1,2,…,R),其中,fi是利用从训练集(N篇文档)中随机抽取(取出后再放回)N次文档构成的训练集训练得到的。对于新文档D,用这R个分类器分别对D划分类别,得到的最多的那个类别作为D的最终判别类别。

    Boosting算法
    与Bagging算法类似,该算法需要训练多个分类器,但训练每个分量分类器的训练样本不再是随机抽取,每个分类器的训练集由其他各个分类器所给出的“最富信息”的样本点组成。基于Boosting方法有许多不同的变形,其中最流行的一种就是AdaBoost方法,该方法在文本分类领域中有着非常广泛的应用。

    文本分类评测指标

    针对不同的目的,人们提出了多种文本分类器性能评价方法,包括召回率、正确率、F-测度值、微平均和宏平均、平衡点(break-even point)、11点平均正确率(11-point average precision)等。

    一般地讲,正确率和召回率是一对相互矛盾的物理量,提高正确率往往要牺牲一定的召回率,反之亦然。在很多情况下,单独考虑正确率或者召回率来对分类器进行评价都是不全面的。因此,1999提出了通过调整分类器的阈值,调整正确率和召回率的值,使其达到一个平衡点的评测方法。

    Taghva et al.(2004)为了更加全面地评价一个分类器在不同召回率情况下的分类效果,调整阈值使得分类器的召回率分别为:0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1,然后计算出对应的11个正确率,取其平均值,这个平均值即为11点平均正确率,用这个平均正确率衡量分类器的性能。

     

    展开全文
  • NLP系列之文本分类

    千次阅读 2019-01-18 19:30:24
    本篇博客主要是记录自然语言处理中的文本分类任务中常见的基础模型的使用及分析。Github上brightmart大佬已经整理出很完整的一套文本分类任务的基础模型及对应的模型代码实现。网上也有部分博客将brightmart写的模型...
  • 文本分类:Keras+RNN vs传统机器学习

    万次阅读 2021-11-30 11:30:35
    摘要:本文通过Keras实现了一个RNN文本分类学习的案例,并详细介绍了循环神经网络原理知识及与机器学习对比。
  • 文本挖掘系列之文本分类

    千次阅读 2017-06-18 17:40:07
    文本分类介绍文本分类问题是根据文本的特征将其分到预先设定好的类别中,类别可以是两,也可以是更多的类别。文本分类是机器学习领域里监督学习的一种重要应用问题。不过需要指出的是,第一,文本分类问题中用于...
  • CNN文本分类原理讲解与实战

    万次阅读 多人点赞 2018-12-22 10:33:35
    卷积神经网络主要用来做图片分类、目标检测等图像相关的任务,这篇文章介绍了它在NLP中的应用:文本分类。本文先介绍了CNN,然后分析了CNN为什么能用在NLP中,最后讲解了Yoon Kim (2014)提出的CNN文本分类模型,代码...
  •   在2017年9到12月份参加了kaggle平台上的一个文本分类比赛:Spooky author identification,这个比赛会给出三个恐怖小说作家作品里的一些英文句子。参赛者所要做的是用训练数据训练出合适的模型,让模型在测试...
  • 文本分类概述

    千次阅读 2015-01-29 18:16:34
     自动文本分类(Automatic Text Categorization),或者简称为文本分类,是指计算机将一篇文章归于预先给定的某一或某几的过程。  文本分类是指按照预先定义的主题类别,为文档集合中的每个文档确定一个类别.文本...
  • 文本分类数据集汇总名词解释一、“达观杯”文本智能处理挑战赛数据集1、数据格式2、测试集:test_set.csv数据集二数据集三参考文献 名词解释 (1)脱敏处理 一、“达观杯”文本智能处理挑战赛数据集 “达观杯”文本...
  • 基于SVM的中文文本分类方法

    千次阅读 2017-06-15 16:50:21
    基于SVM的中文文本分类方法 1、文本分类简介 文本分类(Text Classification)是将文本文档与规定好的类别进行匹配的过程。文本分类可以分为训练和分类两个阶段,其对应的流程图如下面的图1.1和图1.2所示: 图...
  • 文本表示方法 在机器学习算法的训练过程中,假设给定NNN个样本,每个样本有MMM个特征,这样组成了N×MN×MN×M的样本矩阵,然后完成算法的训练和预测。同样的在计算机视觉中可以将图片的像素看作特征,每张图片看作...
  • 本文转载自:https://blog.csdn.net/liuchonge/article/details/77585222上一篇博客中我们已经总结了文本分类中常用的深度学习模型,因为知乎的本次竞赛是多标签的文本分类任务,这也是我第一次接触多标签分类,所以...
  • 文本分类中的降维方法总结

    万次阅读 2017-08-18 11:16:11
    人们通常采用向量空间模型来描述文本向量,但是如果直接用分词算法和词频统计方法得到的特征项来表示文本向量中的各个维,那么这个向量的维度将是非常的大。 这种未经处理的文本矢量不仅给后续工作带来巨大的计算...
  • 文本分类/聚类

    千次阅读 2018-10-11 11:29:19
    预处理 删除标点符号 python进行删除标点符号... 2、根据项目特点研究稳定性测试技术,完成相关工具的开发以及测试; 技能要求:1、有移动终端自动化工具架构设计与开发者优先,熟悉Android自动化工具Uiautomator、Mo...
  • 百度大脑EasyDL是如何帮助NLP文本分类用户提升标注效率的?业界领先的文本分类智能标注产品效果如何?在百度产品经理夜巡的带领下,你将会学习到EasyDL专业版文本分类模型最新上线的智能标注功能的具体解析,并且为...
  • 第四周.01.GCN文本分类及RGCN模型讲解

    千次阅读 2021-06-25 16:30:11
    主要参考的文章是:Graph Convolutional Networks for Text Classification,是2019 AAAI(Association for the Advancement of Artificial Intelligence)(CCF A会议)发表的一篇文章 另外一篇2018 AAAI的文章是
  • 文本分类---逻辑回归(1)

    万次阅读 多人点赞 2018-01-03 17:40:04
    基于sklearn的文本分类—逻辑回归(1) 本文是文本分类的第一篇,记录使用逻辑回归进行文本分类任务,数据集下载地址:http://thuctc.thunlp.org/ 文本分类的主要内容如下: - 1.基于逻辑回归的文本分类 - 2....
  • Keras之文本分类实现

    万次阅读 多人点赞 2018-05-24 14:25:22
    转载自:https://zhuanlan.zhihu.com/p/29201491写在前面从优达DLND毕业后,一直想自己动手做...于是,想着先从自己熟悉的内容着手吧,Siraj老师第三周的编程挑战是做一个多类别的文本分类器,链接在此:Github,那...
  • 目录 1.简述 2.分析任务 3.构建baseline模型 3.1数据清洗与预处理 3.2选取合适的模型 3.2.1模型选取方法 GELE模型做为baseline模型 4. 评估指标 5.baseline的优化 ...文本分类是自然语...
  • 深度学习与文本分类总结

    千次阅读 2018-08-01 12:09:29
    转自:... ... 前面一段时间一直忙着参加知乎看山杯机器学习挑战赛,现在比赛结束了想着总结一下最近的收获。因为这是一个多标签多类别的文本分类问题,而且题目非常适合用深度学习相关的知...
  • 循环神经网络RNN RNN的模型将文本看作词序列(如下图左边所示),通过获取词之间的依赖以及文本结构信息进行分类。RNN最常见的结构是LSTM,其缓解了RNN梯度消失的问题。Tree-LSTM是LSTM的树型结构扩展(如下图...
  • 文本分类

    千次阅读 2013-05-26 17:28:25
     自动文本分类(Automatic Text Categorization),或者简称为文本分类,是指计算机将一篇文章归于预先给定的某一或某几的过程。  文本分类是指按照预先定义的主题类别,为文档集合中的每个文档确定
  • 本文将详细讲解数据预处理、Jieba分词和文本聚类知识,这篇文章可以说是文本挖掘和自然语言处理的入门文章。两万字基础文章,希望对您有所帮助。欢迎大家来到“Python从零到壹”,在这里我将分享约200篇Python系列...
  • 文本分类中的文本特征表示

    万次阅读 2018-01-11 16:49:45
    目前,针对文本话题分类的研究还是很热的,主要包括微博,知乎等大型话题社区,论坛网站。之前知乎针对该问题在著名的机器学习比赛网上,还开展了比赛,有关技术和code有很多。文本话题分析主要是应用是对文本进行...
  • 逻辑回归实现文本分类

    千次阅读 2018-05-01 14:56:29
    基于sklearn的文本分类—逻辑回归本文是文本分类的第一篇,记录使用逻辑回归进行文本分类任务,数据集下载地址:http://thuctc.thunlp.org/文本分类的主要内容如下: - 1.基于逻辑回归的文本分类 - 2.基于朴素贝叶斯...
  • 北邮数据挖掘文本分类实验

    千次阅读 2019-12-26 20:29:47
    首先需要说明的是,这是北邮王晓茹老师的数据挖掘与数据仓库这门课的文本分类的实验。实验要求如下 实验一文本数据的分类与分析 【实验目的】 1.掌握数据预处理的方法,对训练集数据进行预处理; 2.掌握文本建模的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 167,239
精华内容 66,895
关键字:

信息类文本的特点

友情链接: nRF-SOC-source-code.rar