libsvm文本分类
- 格式:doc
- 大小:174.50 KB
- 文档页数:31
⾃然语⾔处理之⽂本情感分类⼀、概述 ⽂本情感分析(Sentiment Analysis)是指利⽤⾃然语⾔处理和⽂本挖掘技术,对带有情感⾊彩的主观性⽂本进⾏分析、处理和抽取的过程。
情感分析任务按其分析的粒度可以分为篇章级,句⼦级,词或短语级;按其处理⽂本的类别可分为基于产品评论的情感分析和基于新闻评论的情感分析;按其研究的任务类型,可分为情感分类,情感检索和情感抽取等⼦问题。
⽂本情感分析的基本流程如下图所⽰,包括从原始⽂本爬取,⽂本预处理,语料库和情感词库构建以及情感分析结果等全流程。
情感分类⼜称情感倾向性分析,是对带有感情⾊彩的主观性⽂本进⾏分析、推理的过程,即分析对说话⼈的态度,倾向正⾯,还是反⾯。
它与传统的⽂本主题分类⼜不相同,传统主题分类是分析⽂本讨论的客观内容,⽽情感分类是要从⽂本中得到它是否⽀持某种观点的信息。
⽐如,“⽇媒:认为歼-31能够抗衡F-35,这种说法颇具恭维的意味。
”传统主题分类是要将其归为类别为“军事”主题,⽽情感分类则要挖掘出⽇媒对于“歼-31能够抗衡F-35”这个观点,持反⾯态度。
这是⼀项具有较⼤实⽤价值的分类技术,可以在⼀定程度上解决⽹络评论信息杂乱的现象,⽅便⽤户准确定位所需信息。
按照处理⽂本的粒度不同,情感分析可分为词语级、短语级、句⼦级、篇章级以及多篇章级等⼏个研究层次。
按照处理⽂本的类别不同,可分为基于新闻评论的情感分析和基于产品评论的情感分析。
纵观⽬前主观性⽂本情感倾向性分析的研究⼯作,主要研究思路分为基于语义的情感词典⽅法和基于机器学习的⽅法。
⼆、基于情感词典的情感分类⽅法 2.1 基于词典的情感分类步骤 基于情感词典的⽅法,先对⽂本进⾏分词和停⽤词处理等预处理,再利⽤先构建好的情感词典,对⽂本进⾏字符串匹配,从⽽挖掘正⾯和负⾯信息。
如图: 2.2 ⽂本预处理及⾃动分词 ⽂本的预处理 由⽹络爬⾍等⼯具爬取到的原始语料,通常都会带有我们不需要的信息,⽐如额外的Html标签,所以需要对语料进⾏预处理。
利用SVM进行文本分类并研究特征选择对文本分类的影响SVM(支持向量机)是一种常用于文本分类的机器学习算法。
它的主要思想是将文本数据映射到高维向量空间,并在此空间中构建一个超平面来实现分类。
特征选择是在特定的文本分类任务中选择最相关特征的过程。
本文将研究特征选择对SVM文本分类的影响。
一、SVM文本分类的基本步骤SVM文本分类的基本步骤包括数据预处理、特征提取、特征选择和模型训练四个主要阶段。
1.数据预处理:这一步骤包括去除文本中的停用词、标点符号等无用信息,同时进行词干化和词向量化处理,将文本转换为向量表示。
2.特征提取:常用的特征提取方法有词袋模型和TF-IDF模型。
词袋模型统计文档中每个词的出现频率,将其构成一个向量。
TF-IDF模型基于词袋模型,加入了对词频的权重调整,更准确地反映了词对文档的重要性。
3.特征选择:特征选择是从所有特征中选择最有用的特征,以提高分类器的性能。
常用的特征选择方法有信息增益、卡方检验和互信息等。
4.模型训练:最后,使用选择的特征和标注的训练集来训练SVM分类器,通过调整超参数,如正则化参数C和核函数类型等,来优化模型的性能。
特征选择在SVM文本分类中起着至关重要的作用,它能够减少特征维度,提高分类效果。
以下是特征选择对文本分类的影响:1.维度减少:文本数据往往具有高维度,而很多特征无关或冗余。
通过特征选择可以减少特征维度,消除冗余信息,提高计算效率。
2.加快训练速度:特征选择可以减少训练样本的数量,从而缩短SVM 模型的训练时间。
特征选择能够剔除一些对分类任务无关的特征,使得模型更快速地收敛。
3.提高分类性能:特征选择有助于找到与分类任务最相关的特征,去除冗余和噪声,从而提高分类器的泛化能力和分类性能。
4.解释性:选择最相关的特征可以增加对分类结果的可解释性。
通过特征选择,我们可以更好地理解哪些特征对分类有贡献,有助于进一步分析文本数据的规律和特点。
三、特征选择方法1.信息增益:信息增益是通过比较每个特征与分类结果之间的关联性来衡量特征的重要性。
学号:2009030114哈尔滨师范大学学士学位论文题目基于支持向量机的文本分类算法研究与实现学生李慧颖指导教师李红宇副教授年级2009级专业计算机科学与技术系别计算机科学与技术学院计算机科学与信息工程学士学位论文题目基于支持向量机的文本分类算法研究与实现学生李慧颖指导教师李红宇副教授年级2009级专业计算机科学与技术系别计算机科学与技术学院计算机科学与信息工程哈尔滨师范大学2013年5月摘要:随着计算机与通讯技术的飞速发展,互联网上的电子文档信息急剧增加。
这就使得文本的自动分类越来越受人们的重视,而支持向量机和文本分类问题有着良好的结合点,从而使得基于支持向量机的文本分类成为这个领域的研究热点。
支持向量机是一种基于结构风险最小化准则的分类学习机模型,它的应用十分广泛。
虽然支持向量机算法的性能在许多实际问题的应用中得到了验证,但是还存在着一些需要改进的地方,如:训练算法速度慢、测试阶段运算量大等。
关键词:支持向量机;文本分类;学习机模型目录第一章引言 (1)1.1研究背景及意义 (1)1.2 国内外研究现状 (1)1.2.1 文本分类研究现状 (1)1.2.2 SVM研究现状 (2)1.3 文本内容研究 (3)第二章文本分类 (4)2.1 文本自动分类概述 (4)2.2 文本分类所涉及的技术领域 (4)2.2.1 文本分类与自然语言处理 (4)2.2.2 文本分类与文本挖掘 (5)2.2.3 文本分类与机器学习 (5)2.2.4 文本分类与模式识别 (5)2.3 文本分类的关键技术 (6)2.3.1 文本表示 (6)2.3.2 特征选择 (7)2.3.3 权重计算 (9)2.3.4 常用的文本分类算法 (9)2.4 文本分类的应用 (11)第三章支持向量机 (13)3.1 支持向量机简介 (13)3.2 支持向量分类机 (14)3.2.1 线性可分问题 (14)3.2.2 近似线性可分问题 (15)3.2.3 线性不可分问题 (15)3.3 支持向量机的应用步骤 (16)3.4基于支持向量机文本分类方法的优势 (17)3.5基于支持向量机文本分类方法中存在的问题 (17)第四章小波变换在支持向量机分类中的应用 (19)4.1 问题的提出 (19)4.2降维相关的研究工作 (19)4.3 小波分析 (20)4.3.1 离散小波变换 (20)4.3.2 小波的定义 (21)4.4 一维哈尔小波变换 (21)4.4.1 哈尔基函数 (22)4.4.2 哈尔小波函数 (22)4.4.3 函数的规范化 (23)4.4.4 哈尔基的结构 (24)4.5 哈尔小波变换的应用 (24)4.5.1 哈尔小波变换的过程 (24)4.5.2 哈尔小波变换的应用 (24)4.6 哈尔小波变换在本文中的应用 (26)4.6.1 小波变换的应用 (27)4.7 实验及结果分析 (28)4.7.1 实验平台及环境 (28)4.7.2 实验步骤 (28)4.7.3 实验目的 (29)4.7.4 结果分析 (29)第五章总结 (33)5.1 文本总结 (33)5.2 工作展望 (33)参考文献: (34)Absatrct: . (35)第一章引言1.1研究背景及意义所谓的文本自动分类,最初是应信息检索(Information Retrieval,IR)系统的要求出现的。
基于SVM的文本分类算法研究随着互联网技术的发展,信息爆炸的时代已经来临。
人们需要从庞大的信息中筛选出自己所需要的信息。
这时,文本分类技术就显得尤为重要。
文本分类作为信息挖掘的一部分,其在广告推荐、情感分析、垃圾短信识别、新闻分类等领域有着广泛的应用。
SVM(Support Vector Machine)是一种非常流行的分类算法。
它集结了数学、统计、信息论和计算机科学等多个学科的知识,被视为机器学习中最强大的有监督学习算法之一。
其主要思想是通过构造一个最优的超平面将数据进行分类。
本文旨在研究基于SVM的文本分类算法,并探讨其在实际应用中的优点和不足之处。
一、文本分类技术概述文本分类是指将文本自动分类为事先定义的类别之一的任务。
随着互联网的发展和应用,文本分类技术得到了越来越多的关注和研究,主要包括以下几个方面:1. 特征提取:将文本转化为计算机可以理解的形式,通常使用的方法有词袋模型、TF-IDF模型等。
2. 分类算法:将文本进行分类,目前主要使用的算法有贝叶斯分类、K近邻分类、支持向量机分类等。
3. 样本准备:建立训练集和测试集,并对文本进行预处理,包括去除停止词、词干提取等。
4. 模型评估与调优:对模型进行评估和优化,以提高分类准确率。
二、基于SVM的文本分类算法支持向量机(SVM)是一种分类和回归分析的机器学习算法,通过寻找最优超平面实现分类。
SVM算法是一种二分类模型,但可以通过多个SVM模型相结合实现多分类。
在文本分类领域中,SVM算法广泛使用,并成为文本分类算法的首选之一。
SVM算法的主要特点在于能够处理高维数据,并具有良好的泛化能力,这使得它在文本分类中更具有优势。
与其他分类算法相比,SVM具有更少的超参数需要调整,使得其应用更加便捷。
本文所研究的基于SVM的文本分类算法,主要包含以下几个步骤:1. 文本预处理:对文本进行去除HTML标签、停用词过滤、词干提取、向量化等操作,以准备好分类任务所需的数据。
基于SVM的文本分类任务实例分析近年来,随着数据时代的到来,文本分类技术在信息处理、智能搜索、情感分析等领域得到了广泛的应用。
基于SVM(Support Vector Machine)的文本分类是一种有效的文本分类方法,具有准确性高、泛化能力强等特点。
本文将通过实例分析,深入研究和探讨基于SVM的文本分类任务。
一、SVM简介SVM是机器学习中的一种算法,其基本思想是找到一个最优的超平面,将数据点分为不同的类别。
SVM是一种清晰、有效、可靠的算法,其在非线性分类、文本分类、图像识别等领域都有着广泛的应用。
二、文本分类文本分类(Text Classification)是指将文本信息自动分类到预定义的类别中。
文本分类技术对于实现自动化的信息处理、智能搜索、情感分析等领域具有重要的意义。
文本分类任务具体分为训练和预测两个部分,通过训练使得机器学习算法获取不同类别的文本特征,完成模型的构建和训练,最终实现对未知文本的分类和预测。
三、基于SVM的文本分类实例分析在本文中,我们以20 Newsgroup数据集作为实验数据,该数据集包含来自20个不同新闻组的18,846篇新闻文章,其中分别包含11,314篇训练文本和7,532篇测试文本。
我们使用Python语言和scikit-learn库实现了基于SVM的文本分类实例。
1.数据预处理在进行文本分类之前,我们需要对原始文本进行预处理。
预处理步骤包括去除标点、停用词等无用信息,进行向量化处理,将文本转化为数值型数据。
2.特征提取特征提取是文本分类中非常重要的一步,它决定了文本表示的质量和分类效果的好坏。
我们使用TF-IDF(Term Frequency-Inverse Document Frequency)作为特征提取的方法。
TF-IDF是一种用于度量文本中词语重要性的方法,它考虑了某一词语在文档中出现的频率以及在整个语料库中出现的频率。
3.模型构建和训练SVM算法是一种监督学习算法,我们需要先构建一个训练集,将文本特征和对应的分类标签建立映射。
SVM模式识别与回归软件包(LibSVM)详解SVM模式识别与回归软件包――LibSVMSVM用于模式识别或回归时,SVM方法及其参数、核函数及其参数的选择,目前国际上还没有形成一个统一的模式,也就是说最优SVM算法参数选择还只能是凭借经验、实验对比、大范围的搜寻或者利用软件包提供的交互检验功能进行寻优。
目前,LIBSVM拥有Java、Matlab、C#、Ruby、Python、R、Perl、Common LISP、LabView等数十种语言版本。
最常使用的是Matlab、Java和命令行的版本。
2:处理数据,把数据制作成LIBSVM的格式,其每行格式为: label index1:value1 index2:value2 ...其中我用了复旦的分类语料库,当然我先做了分词,去停用词,归一化等处理了 3:使用svm-train.exe训练,得到****.model文件。
里面有支持向量,gamma值等信息 4:使用svm-predict.exe做测试这里有几个问题现在必须说明:1:有关数据格式, index1:value1 index2:value2 ...这里面的index1,index2必须是有序的。
我测试了好多次才发现了这个问题,因为我原来做实验的数据室不必有序的。
2:有关python语言,python有些版本不同导致一些语法也是有差异的,建议使用低版本的,如2.6,比如2.6和3.*版本的有关print的规定是有差别的。
这几个.exe文件里面很多参数可以调的,我暂时是想学习下所以都只用了默认值了。
现在做好标记,以后要真做实验用他可以随时用上!2.准备好数据,首先要把数据转换成Libsvm软件包要求的数据格式为: labelindex1:value1 index2:value2 ...其中对于分类来说label为类标识,指定数据的种类;对于回归来说label为目标值。
(我主要要用到回归)Index是从1开始的自然数,value是每一维的特征值。
libsvm参数说明【原创版】目录1.概述2.安装与配置3.参数说明4.应用实例5.总结正文1.概述LIBSVM 是一个开源的支持向量机(SVM)算法库,它可以在多种平台上运行,包括 Windows、Linux 和 Mac OS。
LIBSVM 提供了一系列用于解决分类和回归问题的工具和算法,它的核心是基于序列最小化算法的支持向量机。
2.安装与配置在使用 LIBSVM 之前,需要先安装它。
在 Windows 平台上,可以直接下载LIBSVM 的二进制文件,然后设置环境变量。
对于 Linux 和 Mac OS 平台,需要先安装相应的依赖库,然后编译并安装 LIBSVM。
在安装完成后,需要配置 LIBSVM 的参数,包括选择核函数、设置惩罚参数等。
这些参数对于支持向量机的性能至关重要,需要根据实际问题进行调整。
3.参数说明LIBSVM 的参数主要包括以下几个方面:- 核函数:LIBSVM 支持多种核函数,包括线性核、多项式核、径向基函数(RBF)核和 Sigmoid 核。
核函数的选择取决于问题的性质,需要根据实际问题进行选择。
- 惩罚参数:惩罚参数用于控制模型的复杂度,避免过拟合。
惩罚参数的取值范围是 0 到 1,取值越小,模型的复杂度越高,过拟合的风险也越高。
- 迭代次数:迭代次数用于控制算法的收敛速度,取值越大,收敛速度越快,但可能会影响模型的精度。
- 随机种子:随机种子用于生成随机数,影响模型的初始化和迭代过程。
在实际应用中,建议设置随机种子,以保证模型的可重复性。
4.应用实例LIBSVM 在实际应用中可以用于多种问题,包括分类、回归和排序等。
例如,在人脸检测、车牌识别和文本分类等问题中,可以使用 LIBSVM 来实现支持向量机算法。
5.总结LIBSVM 是一个功能强大的支持向量机库,它提供了多种核函数和参数设置,可以用于解决多种实际问题。
第1页共1页。
LIBSVM使用方法1libsvm简介2libsvm使用方法libsvm就是以源代码和可执行文件两种方式得出的。
如果就是windows系列操作系统,可以轻易采用软件包提供更多的程序,也可以展开修正编程;如果就是unix类系统,必须自己编程,软件包中提供更多了编程格式文件,我们在sgi工作站(操作系统irix6.5)上,采用免费编译器gnuc++3.3编程通过。
2.1libsvm使用的一般步骤:1)2)3)4)5)6)按照libsvm软件包所建议的格式准备工作数据集;对数据展开直观的翻转操作方式;考量采用rbf核函数;使用交叉检验挑选最佳参数c与g;使用最佳参数c与g对整个训练集展开训练以获取积极支持向量机模型;利用以获取的模型展开测试与预测。
2.2libsvm使用的数据格式该软件采用的训练数据和检验数据文件格式如下:::...其中就是训练数据集的目标值,对于分类,它就是标识某类的整数(积极支持多个类);对于重回,就是任一实数。
就是以1已经开始的整数,可以就是不已连续的;为实数,也就是我们常说道的自变量。
检验数据文件中的label只用作排序准确度或误差,如果它就是未明的,只需用一个数核对这一栏,也可以空着不填上。
在程序包中,还包括存有一个训练数据实例:heart_scale,便利参照数据文件格式以及练采用软件。
可以撰写大程序,将自己常用的数据格式转换成这种格式。
2.3svmtrain和svmpredict的用法svmtrain(训练建模)的用法:svmtrain[options]training_set_file[model_file]options:需用的选项即为则表示的涵义如下-ssvm类型:svm设置类型(默认0)0--c-svc1--v-svc2–一类svm3--e-svr4--v-svr-t核函数类型:核函数设置类型(默认2)0–线性:u'v1–多项式:(r*u'v+coef0)^degree2–rbf函数:exp(-r|u-v|^2)3–sigmoid:tanh(r*u'v+coef0)-ddegree:核函数中的degree设置(预设3)-gr(gama):核函数中的?函数设置(默认1/k)-rcoef0:核函数中的coef0设置(预设0)-ccost:设置c-svc,?-svr和?-svr的参数(默认1)-nnu:设置?-svc,一类svm和?-svr的参数(预设0.5)-pe:设置?-svr中损失函数?的值(默认0.1)-mcachesize:设置cache内存大小,以mb为单位(预设40)-eε:设置允许的终止判据(默认0.001)-hshrinking:与否采用启发式,0或1(预设1)-wiweight:设置第几类的参数c为weight?c(c-svc中的c)(默认1)-vn:n-fold可视化检验模式其中-g选项中的k是指输入数据中的属性数。
使用libSVM求解分类问题的C++小例1.libSVM简介训练模型的结构体struct svm_problem//储存参加计算的所有样本{int l; //记录样本总数double *y; //指向样本类别的组数struct svm_node **x;//数据样本};当样本类别事先已经被告知时,可以通过数字来给样本数据进行标识(如果是两类通常以1与-1来表示)。
如果不清楚样本类别可以用样本个数编号来设置,这时候分类的准确率也就无法判定了。
数据样本是一个二维数组,其中每个单元格储存的是一个svm_node,y与样本数据的对应关系为:数据节点的结构体struct svm_node//储存单一向量的单个特征{int index; //索引double value; //值};如果需要储存向量,就可以使用6个svm_node来保存,内存映像为:index 1 2 3 4 5 -1value 1 121 12321 121 1 NULLSVM模型类型枚举enum { C_SVC, NU_SVC, ONE_CLASS, EPSILON_SVR, NU_SVR };◆C_SVC:C表示惩罚因子,C越大表示对错误分类的惩罚越大◆NU_SVC:和C_SVC相同。
◆ONE_CLASS:不需要类标号,用于支持向量的密度估计和聚类.◆EPSILON_SVR:-不敏感损失函数,对样本点来说,存在着一个不为目标函数提供任何损失值的区域,即-带。
◆NU_SVR:由于EPSILON_SVR需要事先确定参数,然而在某些情况下选择合适的参数却不是一件容易的事情。
而NU_SVR能够自动计算参数。
注意:C_SVC与NU_SVC其实采用的模型相同,但是它们的参数C的范围不同C_SVC采用的是0到正无穷,NU_SVC是[0,1]。
核函数类型枚举enum { LINEAR, POLY, RBF, SIGMOID, PRECOMPUTED };◆LINEAR:线性核函数(linear kernel)◆POLY:多项式核函数(ploynomial kernel)◆RBF:径向机核函数(radical basis function)◆SIGMOID:神经元的非线性作用函数核函数(Sigmoid tanh)◆PRECOMPUTED:用户自定义核函数计算模型参数结构体struct svm_parameter{int svm_type; //支持向量机模型类型int kernel_type; //核函数类型int degree; /* 使用于POLY模型*/double gamma; /* for poly/rbf/sigmoid */double coef0; /* for poly/sigmoid *//* these are for training only */double cache_size; /* 缓存块大小(MB) */double eps; /* 终止条件(默认0.001) */double C; /*惩罚因子for C_SVC, EPSILON_SVR and NU_SVR */int nr_weight; /*权重的数目for C_SVC */int *weight_label; /* for C_SVC */double* weight; /* for C_SVC */double nu; /* for NU_SVC, ONE_CLASS, and NU_SVR */double p; /* for EPSILON_SVR */int shrinking; /*指明训练过程是否使用压缩*/int probability; /*指明是否要做概率估计*/};结构体svm_mod el用于保存训练后的训练模型,当然原来的训练参数也必须保留。
文本分类入门(一)文本分类问题的定义系列文章,从文本分类问题的定义开始,主要讲解文本分类系统的构成,主流的统计学习方法以及较为优秀的SVM算法及其改进。
一个文本(以下基本不区分“文本”和“文档”两个词的含义)分类问题就是将一篇文档归入预先定义的几个类别中的一个或几个,而文本的自动分类则是使用计算机程序来实现这样的分类。
通俗点说,就好比你拿一篇文章,问计算机这文章要说的究竟是体育,经济还是教育,计算机答不上就打它的屁屁(……)。
注意这个定义当中着重强调的两个事实。
第一,用于分类所需要的类别体系是预先确定的。
例如新浪新闻的分类体系,Yahoo!网页导航的分类层次。
这种分类层次一旦确定,在相当长的时间内都是不可变的,或者即使要变更,也要付出相当大的代价(基本不亚于推倒并重建一个分类系统)。
第二,一篇文档并没有严格规定只能被分配给一个类别。
这与分类这个问题的主观性有关,例如找10个人判断一篇文章所陈述的主题究竟属于金融,银行还是财政政策领域,10个人可能会给出11个不同的答案(聪明的读者,您应该能看出来并没有11个答案,这只是一种修辞方法,笑),因此一篇文章很可能被分配到多个类别当中,只不过分给某些类别让人信服,而有些让人感觉模棱两可罢了(说的专业点,置信度不一样)。
八股是一种写文章的格式,过去用于科举,现在用于科研,总之,和科学有点关系的文章就得八股,鉴于我正锻炼自己写论文的能力,所以按照标准的格式,陈述了文本分类问题的定义之后,我要说说它的应用范围。
现在一说到文本分类,大部分人想当然的将这个问题简化为判断一篇文章说的是什么,这只是文本分类的一小部分应用,我们可以称之为“依据主题的分类”。
实际上,文本分类还可以用于判断文章的写作风格,作者态度(积极?消极?),甚至判断作者真伪(例如看看《红楼梦》最后二十回到底是不是曹雪芹写的)。
总而言之,凡是与文本有关,与分类有关,不管从什么角度出发,依据的是何特征,都可以叫做文本分类。
当然,目前真正大量使用文本分类技术的,仍是依据文章主题的分类,而据此构建最多的系统,当属搜索引擎。
内里的原因当然不言自明,我只是想给大家提个醒,文本分类还不完全等同于网页分类。
网页所包含的信息远比含于其中的文字(文本)信息多得多,对一个网页的分类,除了考虑文本内容的分类以外,链入链出的链接信息,页面文件本身的元数据,甚至是包含此网页的网站结构和主题,都能给分类提供莫大的帮助(比如新浪体育专栏里的网页毫无疑问都是关于体育的),因此说文本分类实际上是网页分类的一个子集也毫不为过。
当然,纯粹的文本分类系统与网页分类也不是一点区别都没有。
文本分类有个重要前提:即只能根据文章的文字内容进行分类,而不应借助诸如文件的编码格式,文章作者,发布日期等信息。
而这些信息对网页来说常常是可用的,有时起到的作用还很巨大!因此纯粹的文本分类系统要想达到相当的分类效果,必须在本身的理论基础和技术含量上下功夫。
除了搜索引擎,诸如数字图书馆,档案管理等等要和海量文字信息打交道的系统,都用得上文本分类。
另外,我的硕士论文也用得上(笑)。
下一章和大家侃侃与文本分类有关的具体方法概览,有事您说话。
文本分类入门(二)文本分类的方法文本分类问题与其它分类问题没有本质上的区别,其方法可以归结为根据待分类数据的某些特征来进行匹配,当然完全的匹配是不太可能的,因此必须(根据某种评价标准)选择最优的匹配结果,从而完成分类。
因此核心的问题便转化为用哪些特征表示一个文本才能保证有效和快速的分类(注意这两方面的需求往往是互相矛盾的)。
因此自有文本分类系统的那天起,就一直是对特征的不同选择主导着方法派别的不同。
最早的词匹配法仅仅根据文档中是否出现了与类名相同的词(顶多再加入同义词的处理)来判断文档是否属于某个类别。
很显然,这种过于简单的方法无法带来良好的分类效果。
后来兴起过一段时间的知识工程的方法则借助于专业人员的帮助,为每个类别定义大量的推理规则,如果一篇文档能满足这些推理规则,则可以判定属于该类别。
这里与特定规则的匹配程度成为了文本的特征。
由于在系统中加入了人为判断的因素,准确度比词匹配法大为提高。
但这种方法的缺点仍然明显,例如分类的质量严重依赖于这些规则的好坏,也就是依赖于制定规则的“人”的好坏;再比如制定规则的人都是专家级别,人力成本大幅上升常常令人难以承受;而知识工程最致命的弱点是完全不具备可推广性,一个针对金融领域构建的分类系统,如果要扩充到医疗或社会保险等相关领域,则除了完全推倒重来以外没有其他办法,常常造成巨大的知识和资金浪费。
后来人们意识到,究竟依据什么特征来判断文本应当隶属的类别这个问题,就连人类自己都不太回答得清楚,有太多所谓“只可意会,不能言传”的东西在里面。
人类的判断大多依据经验以及直觉,因此自然而然的会有人想到何让机器像人类一样自己来通过对大量同类文档的观察来自己总结经验,作为今后分类的依据这便是统计学习方法的基本思想(也有人把这一大类方法称为机器学习,两种叫法只是涵盖范围大小有些区别,均无不妥)。
统计学习方法需要一批由人工进行了准确分类的文档作为学习的材料(称为训练集,注意由人分类一批文档比从这些文档中总结出准确的规则成本要低得多),计算机从这些文档重挖掘出一些能够有效分类的规则,这个过程被形象的称为训练,而总结出的规则集合常常被称为分类器。
训练完成之后,需要对计算机从来没有见过的文档进行分类时,便使用这些分类器来进行。
现如今,统计学习方法已经成为了文本分类领域绝对的主流。
主要的原因在于其中的很多技术拥有坚实的理论基础(相比之下,知识工程方法中专家的主观因素居多),存在明确的评价标准,以及实际表现良好。
下一章就深入统计学习方法,看看这种方法的前提,相关理论和具体实现。
文本分类入门(三)统计学习方法前文说到使用统计学习方法进行文本分类就是让计算机自己来观察由人提供的训练文档集,自己总结出用于判别文档类别的规则和依据。
理想的结果当然是让计算机在理解文章内容的基础上进行这样的分类,然而遗憾的是,我们所说的“理解”往往指的是文章的语义甚至是语用信息,这一类信息极其复杂,抽象,而且存在上下文相关性,对这类信息如何在计算机中表示都是尚未解决的问题(往大里说,这是一个“知识表示”的问题,完全可以另写一系列文章来说了),更不要说让计算机来理解。
利用计算机来解决问题的标准思路应该是:为这种问题寻找一种计算机可以理解的表示方法,或曰建立一个模型(一个文档表示模型);然后基于这个模型,选择各方面满足要求的算法来解决。
用谭浩强的话说,程序,就是数据+算法。
(啥?你不知道谭浩强是谁?上过学么?学过C么?这捣什么乱?)既然文本的语义和语用信息很难转换成计算机能够理解的表示形式,接下来顺理成章的,人们开始用文章中所包含的较低级别的词汇信息来表示文档,一试之下,效果居然还不错。
统计学习方法进行文本分类(以下就简称为“统计学习方法”,虽然这个方法也可以应用到除文本分类以外的多个领域)的一个重要前提由此产生,那就是认为:文档的内容与其中所包含的词有着必然的联系,同一类文档之间总存在多个共同的词,而不同类的文档所包含的词之间差异很大[1]。
进一步的,不光是包含哪些词很重要,这些词出现的次数对分类也很重要。
这一前提使得向量模型(俗称的VSM,向量空间模型)成了适合文本分类问题的文档表示模型。
在这种模型中,一篇文章被看作特征项集合来看,利用加权特征项构成向量进行文本表示,利用词频信息对文本特征进行加权。
它实现起来比较简单,并且分类准确度也高,能够满足一般应用的要求。
[5]而实际上,文本是一种信息载体,其所携带的信息由几部分组成:如组成元素本身的信息(词的信息)、组成元素之间顺序关系带来的信息以及上下文信息(更严格的说,还包括阅读者本身的背景和理解)[12]。
而VSM这种文档表示模型,基本上完全忽略了除词的信息以外所有的部分,这使得它能表达的信息量存在上限[12],也直接导致了基于这种模型构建的文本分类系统(虽然这是目前绝对主流的做法),几乎永远也不可能达到人类的分类能力。
后面我们也会谈到,相比于所谓的分类算法,对特征的选择,也就是使用哪些特征来代表一篇文档,往往更能影响分类的效果。
对于扩充文档表示模型所包含的信息量,人们也做过有益的尝试,例如被称为LSI(Latent Semantic Index潜在语义索引)的方法,就被实验证明保留了一定的语义信息(之所以说被实验证明了,是因为人们还无法在形式上严格地证明它确实保留了语义信息,而且这种语义信息并非以人可以理解的方式被保留下来),此为后话。
前文说到(就不能不用这种老旧的说法?换换新的,比如Previously on "Prison Break",噢,不对,是Previously on Text Categorizaiton……)统计学习方法其实就是一个两阶段的解决方案,(1)训练阶段,由计算机来总结分类的规则;(2)分类阶段,给计算机一些它从来没见过的文档,让它分类(分不对就打屁屁)。
下一章就专门说说训练阶段的二三事。
文本分类入门(四)训练Part 1训练,顾名思义,就是training(汗,这解释),简单的说就是让计算机从给定的一堆文档中自己学习分类的规则(如果学不对的话,还要,打屁屁?)。
开始训练之前,再多说几句关于VSM这种文档表示模型的话。
举个例子,假设说把我正在写的“文本分类入门”系列文章的第二篇抽出来当作一个需要分类的文本,则可以用如下的向量来表示这个文本,以便于计算机理解和处理。
w2=(文本,5,统计学习,4,模型,0,……)这个向量表示在w2所代表的文本中,“文本”这个词出现了5次(这个信息就叫做词频),“统计学习”这个词出现了4次,而“模型”这个词出现了0次,依此类推,后面的词没有列出。
而系列的第三篇文章可以表示为w3=(文本,9,统计学习,4,模型,10,……)其含义同上。
如果还有更多的文档需要表示,我们都可以使用这种方式。
只通过观察w2和w3我们就可以看出实际上有更方便的表示文本向量的方法,那就是把所有文档都要用到的词从向量中抽离出来,形成共用的数据结构(也可以仍是向量的形式),这个数据结构就叫做词典,或者特征项集合。
例如我们的问题就可以抽离出一个词典向量D=(文本,统计学习,模型,……)所有的文档向量均可在参考这个词典向量的基础上简化成诸如w2=(5,4,0,……)w3=(9,4,10,……)的形式,其含义没有改变。
5,4,10这些数字分别叫做各个词在某个文档中的权重,实际上单单使用词频作为权重并不多见,也不十分有用,更常见的做法是使用地球人都知道的TF/IDF 值作为权重。
(关于TF/IDF的详细解释,Google的吴军研究员写了非常通俗易懂的文章,发布于Google黑板报,链接地址是/2006/06/blog-post_27.html,有兴趣不妨一读)TF/IDF作为一个词对所属文档主题的贡献程度来说,是非常重要的度量标准,也是将文档转化为向量表示过程中的重要一环。