文本分类-程序员宅基地

1. 简述

文本分类的方法属于有监督的学习方法,分类过程包括文本预处理、特征抽取、降维、分类和模型评价。本文首先研究了文本分类的背景,中文分词算法。然后是对各种各样的特征抽取进行研究,包括词项频率-逆文档频率和word2vec,降维方法有主成分分析法和潜在索引分析,最后是对分类算法进行研究,包括朴素贝叶斯的多变量贝努利模型和多项式模型,支持向量机和深度学习方法。深度学习方法包括多层感知机,卷积神经网络和循环神经网络。

2. 背景

目前,人工智能发展迅猛,在多个领域取得了巨大的成就,比如自然语言处理,图像处理,数据挖掘等。文本挖掘是其中的一个研究方向。根据维基百科的定义,文本挖掘也叫文本数据挖掘,或是文本分析,是从文本中获取高质量信息的过程,典型的任务有文本分类、自动问答、情感分析、机器翻译等。文本分类是将数据分成预先定义好的类别,一般流程为:1. 预处理,比如分词,去掉停用词;2. 文本表示及特征选择;3. 分类器构造;4. 分类器根据文本的特征进行分类;5. 分类结果的评价。

由于近年来人工智能的快速发展,文本分类技术已经可以很好的确定一个未知文档的类别,而且准确度也很好。借助文本分类,可以方便进行海量信息处理,节约大量的信息处理费用。广泛应用于过滤信息,组织与管理信息,数字图书馆、垃圾邮件过滤等社会生活的各个领域。

3. 文本分类的过程

文本分类(Text Classification)利用有监督或是无监督的机器学习方法对语料进行训练,获得一个分类模型,这个模型可以对未知类别的文档进行分类,得到预先定义好的一个或多个类别标签,这个标签就是这个文档的类别。

4. 预处理

本文处理的数据是文本,预处理是对文本数据进行处理,大都是非结构化的文本信息。预处理就是去除没用的信息,同时把有用文本信息用数字表示,这样才可以为计算机处理。文本预处理主要包括分词、去除停用词和特殊符号。英文的基本单位是单词,可以根据空格和标点符号进行分词,然后再提取词根和词干。中文的基本单位是字,需要一些算法来进行分词。现在主要的中文分词方法有:

(1)基于字符串匹配的分词方法[2]

该方法是将待分词的字符串从头或尾开始切分出子串,再与存有几乎所有中文词语的词典匹配,若匹配成功,则子串是一个词语。根据匹配位置的起点不同,分为正向最大匹配算法(Forward Maximum Matching method,FMM)、逆向最大匹配算法(Reverse Maximum Matching method,RMM)和双向匹配算法(Bi-direction Matching method,BM)。双向匹配算法利用了前两者的优势,有更好的效果。

(2)基于统计及机器学习的分词方法[3]

主要有隐马尔可夫模型(Hidden Markov Model,HMM)和条件随机场(Conditional Random Field,CRF)。HMM假设任一时刻的状态只依赖前一时刻的状态和任意时刻的观测值只与该时刻的状态值有关。它是关于时序的概率图模型,由一个不可观测的状态随机序列,经过状态转移概率和发射概率生成观测值的过程。如图2.2所示,在分词中,每个字(观测值)都对应一个状态,状态集用B(词开始)、E(词的结束)、M(词的中间)和S(单字成词)表示,转移矩阵(BEMS*BEMS)是状态集里的元素到其他元素的概率值大小,发射矩阵是从状态到观测的概率大小。最后用Viterbi算法获得一句话的最大概率的状态,再根据状态进行分词。

和隐马尔科夫模型一样,条件随机场也是基于学习字的状态来进行状态分析,最后根据状态分词,但条件随机场还利用了上下文的信息,所以准确率高于隐马尔可夫模型。

5. 特征抽取和选择

文档经过分词和去除停用词后,词就表示文本的特征项,所以训练集中的全部特征项构成的向量空间的维度相当高,能够达到几万甚至几十万维,需要选择和抽取重要的特征。

文本经过预处理后,会得到一个一个的词语,而中文的词语的多种多样的,造成维度很高的特征向量,而且每个文档的维度不一定一致,给后面的分类产生影响。所以需要进行特征选择。

目前的特征选择算法有好多,列举以下几种:

(1)词项频率-逆文档频率(Term Frequency-Inverse Document Frequency,TF-IDF)

每个属于文档d 的词项t 的权重用公式2.2计算:

|D| 是文档集D 的文档个数,分母加1防止除数为零。在TF-IDF中词项频率(TF)用逆文档频率(IDF)归一化,这种归一化降低了文档集里词项出现频率大的权重,保证能够区分文档的词项有更大的权重,而这些词项一般有比较低的频率。

(2)互信息(Mutual Information,MI)

互信息测量的是两个变量之间的相关程度,在文本分类中,计算的是特征项t 和类别li 的相关程度,如公式2.3所示:

MI的值越大,相关度越高。在进行特征选择时,选择高于某个阈值的k个特征项作为表示这个文档的向量。

(3)CHI统计(CHI-square statistic)

CHI统计计算的是特征项t 和类别 的相关程度,如公式2.4所示:

特征选择与MI一样,他与MI的目的一样,都是计算特征项和类别的相关程度,只是计算公式不一样。

常见的特征提取方法有主成分分析,潜在语义索引,word2vec等。

(1)主成分分析(Principal Component Analysis ,PCA)

主成分分析通过线性变换,通常乘以空间中的一个基,将原始数据变换为一组各维度线性无关的矩阵,用于提取数据的主要特征分量,常用于高维数据的降维。如公式2.5所示:

(2)潜在语义分析(Latent Semantic Analysis,LSA)[5]

又称潜在语义索引(Latent Semantic Indexing,LSI),本质上是把高维的词频矩阵进行降维,降维方法是用奇异值分解(Singular Value Decomposition, SVD),假设词-文档矩阵如2.7所示:

(3)word2vec

word2vec的作用是将由one-hot编码获得的高维向量转换为低维的连续值向量,也就是稠密向量,又称分布式表示,可以很好的度量词与词之间的相似性,是一个浅层的神经网络,用的是CBoW模型和skip-gram模型。而奠定word2vec基础的是用神经网络建立统计语言模型的神经网络语言模型[10](Neural Network Language Model, NNLM),整个模型如下图2.3:

首先是一个线性的嵌入式层,将输入的one-hot词向量通过 D×V 的矩阵 C 映射为 N-1 个词向量, V 是词典的大小, D 是词向量的维度,而 C 矩阵就存储了要学习的词向量。

接下来是一个前向反馈神经网络,由tanh隐藏层和softmax输出层组成,将嵌入层输出的 N-1 个词向量映射为长度为V 的概率分布向量,从而对词典中输入的词Wt 在context下进行预测,公式如下:

 

由于NNLM只能处理定长序列,而且训练速度太慢,所以需要改进,移除tanh层,忽略上下文的序列信息,得到的模型称为CBoW[11](Continuous Bag-of-Words Model),作用是将词袋模型的向量乘以嵌入式矩阵,得到连续的嵌入向量,它是在上下文学习以得到词向量的表达。而Skip-gram模型则是对上下文里的词进行采样[11],即从词的上下文获得词向量,如图2.4所示。

改进后的神经网络仅三层,其中隐藏层的权重即是要训练的词向量。

6. 对语料进行分类后,要对分类结果进行评价

(1)准确率(precision)和召回率(recall)

准确率,是分类结果中的某类别判断正确的文档中有多少是真正的正样本的比例,是针对预测结果而言的,衡量的是分类系统的查准率。计算公式如下:

召回率,是原来某个类别的文本的分类结果中有多少被预测为正确的比例,是针对原来样本而言的,衡量的是分类系统的查全率。计算公式如下:

但是,准确率和召回率不总是正相关,有时是负相关,需要F测度来平衡。

(2)F测度(F-measure)

是正确率和召回率的的加权调和平均,公式如下:

时,就是F1,即

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43264420/article/details/104432597

智能推荐

使用nginx解决浏览器跨域问题_nginx不停的xhr-程序员宅基地

文章浏览阅读1k次。通过使用ajax方法跨域请求是浏览器所不允许的,浏览器出于安全考虑是禁止的。警告信息如下:不过jQuery对跨域问题也有解决方案,使用jsonp的方式解决,方法如下:$.ajax({ async:false, url: 'http://www.mysite.com/demo.do', // 跨域URL ty..._nginx不停的xhr

在 Oracle 中配置 extproc 以访问 ST_Geometry-程序员宅基地

文章浏览阅读2k次。关于在 Oracle 中配置 extproc 以访问 ST_Geometry,也就是我们所说的 使用空间SQL 的方法,官方文档链接如下。http://desktop.arcgis.com/zh-cn/arcmap/latest/manage-data/gdbs-in-oracle/configure-oracle-extproc.htm其实简单总结一下,主要就分为以下几个步骤。..._extproc

Linux C++ gbk转为utf-8_linux c++ gbk->utf8-程序员宅基地

文章浏览阅读1.5w次。linux下没有上面的两个函数,需要使用函数 mbstowcs和wcstombsmbstowcs将多字节编码转换为宽字节编码wcstombs将宽字节编码转换为多字节编码这两个函数,转换过程中受到系统编码类型的影响,需要通过设置来设定转换前和转换后的编码类型。通过函数setlocale进行系统编码的设置。linux下输入命名locale -a查看系统支持的编码_linux c++ gbk->utf8

IMP-00009: 导出文件异常结束-程序员宅基地

文章浏览阅读750次。今天准备从生产库向测试库进行数据导入,结果在imp导入的时候遇到“ IMP-00009:导出文件异常结束” 错误,google一下,发现可能有如下原因导致imp的数据太大,没有写buffer和commit两个数据库字符集不同从低版本exp的dmp文件,向高版本imp导出的dmp文件出错传输dmp文件时,文件损坏解决办法:imp时指定..._imp-00009导出文件异常结束

python程序员需要深入掌握的技能_Python用数据说明程序员需要掌握的技能-程序员宅基地

文章浏览阅读143次。当下是一个大数据的时代,各个行业都离不开数据的支持。因此,网络爬虫就应运而生。网络爬虫当下最为火热的是Python,Python开发爬虫相对简单,而且功能库相当完善,力压众多开发语言。本次教程我们爬取前程无忧的招聘信息来分析Python程序员需要掌握那些编程技术。首先在谷歌浏览器打开前程无忧的首页,按F12打开浏览器的开发者工具。浏览器开发者工具是用于捕捉网站的请求信息,通过分析请求信息可以了解请..._初级python程序员能力要求

Spring @Service生成bean名称的规则(当类的名字是以两个或以上的大写字母开头的话,bean的名字会与类名保持一致)_@service beanname-程序员宅基地

文章浏览阅读7.6k次,点赞2次,收藏6次。@Service标注的bean,类名:ABDemoService查看源码后发现,原来是经过一个特殊处理:当类的名字是以两个或以上的大写字母开头的话,bean的名字会与类名保持一致public class AnnotationBeanNameGenerator implements BeanNameGenerator { private static final String C..._@service beanname

随便推点

二叉树的各种创建方法_二叉树的建立-程序员宅基地

文章浏览阅读6.9w次,点赞73次,收藏463次。1.前序创建#include<stdio.h>#include<string.h>#include<stdlib.h>#include<malloc.h>#include<iostream>#include<stack>#include<queue>using namespace std;typed_二叉树的建立

解决asp.net导出excel时中文文件名乱码_asp.net utf8 导出中文字符乱码-程序员宅基地

文章浏览阅读7.1k次。在Asp.net上使用Excel导出功能,如果文件名出现中文,便会以乱码视之。 解决方法: fileName = HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8);_asp.net utf8 导出中文字符乱码

笔记-编译原理-实验一-词法分析器设计_对pl/0作以下修改扩充。增加单词-程序员宅基地

文章浏览阅读2.1k次,点赞4次,收藏23次。第一次实验 词法分析实验报告设计思想词法分析的主要任务是根据文法的词汇表以及对应约定的编码进行一定的识别,找出文件中所有的合法的单词,并给出一定的信息作为最后的结果,用于后续语法分析程序的使用;本实验针对 PL/0 语言 的文法、词汇表编写一个词法分析程序,对于每个单词根据词汇表输出: (单词种类, 单词的值) 二元对。词汇表:种别编码单词符号助记符0beginb..._对pl/0作以下修改扩充。增加单词

android adb shell 权限,android adb shell权限被拒绝-程序员宅基地

文章浏览阅读773次。我在使用adb.exe时遇到了麻烦.我想使用与bash相同的adb.exe shell提示符,所以我决定更改默认的bash二进制文件(当然二进制文件是交叉编译的,一切都很完美)更改bash二进制文件遵循以下顺序> adb remount> adb push bash / system / bin /> adb shell> cd / system / bin> chm..._adb shell mv 权限

投影仪-相机标定_相机-投影仪标定-程序员宅基地

文章浏览阅读6.8k次,点赞12次,收藏125次。1. 单目相机标定引言相机标定已经研究多年,标定的算法可以分为基于摄影测量的标定和自标定。其中,应用最为广泛的还是张正友标定法。这是一种简单灵活、高鲁棒性、低成本的相机标定算法。仅需要一台相机和一块平面标定板构建相机标定系统,在标定过程中,相机拍摄多个角度下(至少两个角度,推荐10~20个角度)的标定板图像(相机和标定板都可以移动),即可对相机的内外参数进行标定。下面介绍张氏标定法(以下也这么称呼)的原理。原理相机模型和单应矩阵相机标定,就是对相机的内外参数进行计算的过程,从而得到物体到图像的投影_相机-投影仪标定

Wayland架构、渲染、硬件支持-程序员宅基地

文章浏览阅读2.2k次。文章目录Wayland 架构Wayland 渲染Wayland的 硬件支持简 述: 翻译一篇关于和 wayland 有关的技术文章, 其英文标题为Wayland Architecture .Wayland 架构若是想要更好的理解 Wayland 架构及其与 X (X11 or X Window System) 结构;一种很好的方法是将事件从输入设备就开始跟踪, 查看期间所有的屏幕上出现的变化。这就是我们现在对 X 的理解。 内核是从一个输入设备中获取一个事件,并通过 evdev 输入_wayland

推荐文章

热门文章

相关标签