文本分类指南(一)—北京艾迪特

 2024-02-24 02:04:09  阅读 0

最近在北京艾迪信息技术公司工作,涉及一些文本分类问题。 在查阅了很多文章和资料后,我大致了解了文本分类的整体流程。 根据所访问的信息,我最初编写了一个文本分类程序。 在程序的编写和工程实践过程中,我遇到了各种容易被忽视的问题。 本文将结合实际工程经验,对文本分类的步骤、过程和问题进行简要介绍和总结。

1.文本分类简介

自动文本分类(Text),简称文本分类,是指计算机将文章分配到预定类别的过程。 例如,当我们访问新浪网站首页时,会出现“新闻、军事、社会、国际、财经、股票、基金、外汇、科技、手机、发现”等栏目。 不同内容的文章都与这些导航栏相关。 关联对应于文本分类的过程。 可见,文本分类的主要应用领域之一是基于文章内容的文本分类,即“基于主题的分类”。 当然,这只是文本分类应用的一部分。 还有许多其他有趣的问题可以通过文本分类来解决。 例如,文本分类还可以用来判断文章的写作风格、作者的态度(积极?消极?),甚至判断作者的真实性(比如检查《盗墓贼》中的“秦岭神树”章节是否存在)。笔记》是南派三叔)亲手写的?)。 总而言之,凡是与文本和分类有关的东西,无论从什么角度出发、基于什么特征,都可以称为文本分类。

文本分类的研究可以追溯到 20 世纪 60 年代。 早期的文本分类主要是基于知识工程( ),通过人工定义一些规则来对文本进行分类。 这种方法费时费力,并且需要对某一领域有足够的了解。 只有理解了它,我们才能写出合适的规则。 到了 20 世纪 90 年代,随着在线文本的激增和机器学习的兴起,基于统计学习的方法开始流行。 统计学习方法需要一批被人类准确分类的文档作为学习材料(称为训练集。人类对一批文档进行分类比从这些文档中总结准确的规则要便宜得多),计算机进行学习从这些文件中。 从文档中挖掘出一些可以有效分类的规则。 这个过程形象地称为训练,而总结的规则集通常称为分类器。 经过训练,计算机需要使用这些分类器对它以前从未见过的文档进行分类。 大量结果表明,基于统计学习方法的分类精度与专家手工分类的结果相当,而且其学习不需要专家干预,可以应用于任何领域的学习,使其成为分类问题的主流方法。文本分类。

一般来说,文本分类可以分为以下几个过程:

(1)预处理:将原始语料格式化为相同格式,方便后续统一处理;

(2)索引:将文档分解为基本处理单元,同时降低后续处理的成本;

(3)统计:词频统计、项目(单词、概念)与分类之间的相关概率;

(4)特征提取:从文档中提取反映文档主题的特征;

(5)分类器:分类器的训练;

(6)评估:对分类器的测试结果进行分析。

本文将主要介绍文本分类过程中的语料准备、统计和特征提取过程,从而生成分类器可以理解和处理的数据形式。 这些内容涉及上述步骤(1)-(4)。 实践经验表明,这部分工作的结果往往直接影响最终的分类结果,需要特别关注。 步骤(5)和(6)将在后续文章中进一步讨论。

2. 文本向量表示

当计算机进行文本分类时,第一个任务是将文本数据转换为计算机可以理解的由0和1组成的数字语言。 这就是向量空间模型(VSM:空间模型)派上用场的时候。 总之,向量空间模型将文本内容的处理简化为向量空间中的向量运算,并利用空间相似性来表达语义相似性,直观易懂。

那么如何将文本转换为矢量呢? 简单生动的词袋模型(BOW)出现了。 BOW(Bag模型)假设对于一段文本,忽略它的词序、语法和句法,而将其仅仅视为单词的集合,或者单词的组合。 文本中每个单词的出现都是独立的,不依赖于其他单词是否出现。 也就是说,本文作者在任意位置选择一个词时,都是独立选择的,不受前一句话的影响。 然而,这种文档表示模型(BOW)基本上完全忽略了除了单词信息之外的所有部分,这给它可以表达的信息量设置了上限。

接下来的工作是构建Bag of Words模型。 假设字典的大小为9,即有9个单词w1,w2,...,w9,对应下面三篇文章D1,D2和D3。 。 考虑最简单的向量生成情况。 当字典中的单词出现在文档中时,标记为1,否则标记为0。统计得到的单词列表(表格内容是为了方便演示而编造的)如下:

实用类文本分类_实例文本分类中文具体包括_中文文本分类具体实例

对于文章D1“今天天气真好”,可以得到的向量为(1,0,1,0,1,0,0,0,0);

对于文章D2“今天吃饭了吗”可以得到的向量为(1,1,0,1,0,0,0,0,1);

能得到文章D3“你写的代码真不错”的向量是(0,1,0,0,1,1,1,1,0);

3.特征词选择

有了上面文本的向量形式,我们是否可以直接用这些向量来训练计算机进行分类呢? 答案当然是否定的! 首先,汉语的词汇量至少在20万左右。 假设模型训练有20万篇文章语料,那么每次训练都要处理一个20万*20万维度的巨大矩阵。 许多分类器的算法复杂度与矩阵的维数索引有关。 训练这么大维的矩阵可能需要半天以上的时间。 如果计算机配置较低,甚至可能会出现内存溢出错误。 其次,一篇文章的众多单词中,有些单词显然对分类没有帮助。 例如,在上面的文章D1和D2中,“今天”这个词显然是一个没有区别的词,而“天气”和“吃”这两个词就有很好的区别。 如果分类时仅使用“天气”和“吃”两个词作为特征词汇向量,则文章D1和D2的文本向量将降维为(1,0)和(0,1)。 这时候,很明显文章有更好的区分度,而且向量都是正交的。 同时,通过特征值滤波步骤将向量维度从9降为2,不仅降低了计算复杂度,而且提高了分类的准确性。

从上面的分析可以看出,特征词选择在文本分类中占有非常重要的地位。 事实上,对于大多数机器学习 (ML) 问题,特征提取和筛选是至关重要的步骤。 深度学习(DL)最近之所以如此流行,是因为它可以大大简化手动特征提取的过程,从而在处理一些特定的复杂问题时取得优异的效果。 文本分类中常用的特征词选择算法有互信息、文档频率、信息增益、卡方检验等,这次我们介绍特征选择算法中比较有效的卡方检验方法。 忽略数学推导过程,直接举个例子来感受一下算法是如何工作的:

例如,有N=篇文档,其中M篇是关于IT的。 我们想要检查“码农”一词与“IT”类别之间的相关性。 我们有四个观察结果需要处理:

1、包含“”且属于“IT”类别的文档数量,名为A;

2、包含“”但不属于“IT”类别的文档数量,名为B;

3、不包含“”但属于“IT”类别的文档数量,名为C;

4、既不包含“编码员”也不属于“IT”类别的文档数量,名为D。

用下表来表达更清楚:

中文文本分类具体实例_实用类文本分类_实例文本分类中文具体包括

如果您没有看到某些特征,请让我告诉您。 首先,A+B+C+D=N(这不是废话)。 其次,A+C实际上意味着“属于IT类别的文章数量”,因此,它等于M,同时B+D等于NM。 然后根据以下公式计算“码农”的卡方值:

根据卡方检验的定义,此时的检验值为14,大于阈值6.635。 可以确认“码农”与“IT”类别具有99.99%的显着水平相关性。 也就是说,我们可以有很大的概率在文章中出现“码农”这个词。 它被认为是“IT”文本。 计算机可以使用“码农”作为特征词来过滤文本是否为“IT”。 这时候,计算机终于有了一点人类的智能。

计算出的卡方值越大,相关性越大。 例如,考虑以下极端示例:“今天”,类别为“IT”:

实例文本分类中文具体包括_实用类文本分类_中文文本分类具体实例

从上表中我们可以看到,“今天”这个词均匀分布在不同类别的文本中。 AD-BC等于0,卡方值为0,说明“今天”与类别“IT”无关,不能作为特征词来区分类别“IT”。 在实际项目中,我们可以结合训练语料的规模和特点,选择每个类别中卡方值最高的前N个词作为特征词进行分类。 下面以搜狗小规模分类语料库中排名前10的特征词为例。 :

4.特征权重的计算

在前面的例子中,通过简单地根据特征词是否出现来赋值0和1来生成文档向量。 这种数学描述假设一篇文章中每个单词的重要性都是相同的,这显然是不合理的。 更重要的单词应该给予更高的权重。 比如俗话说,重要的事情说三遍。 如果某个词在文章中重复出现,直观上给这个词赋予大于1的权重值是比较合理的。然而,一些常用词如“今天”总会在文章中出现多次。 这些话被认为很重要,但显然不合适。 为了解决特征词权重选择的问题,工程中最常用、也更容易使用的是TFIDF算法。 这里简单介绍一下:

TF-IDF是一种统计方法,用于评估单词对于文档集或语料库中的文档的重要性。 TFIDF的主要思想是:如果某个单词或短语在一篇文章中出现频率较高,而在其他文章中很少出现,则认为这个单词或短语具有良好的区分能力,是该文章的关键词。 。 TFIDF其实就是:TF * IDF,TF词频(Term),IDF逆向文件频率()。

TF表示文档d中术语出现的频率。 是一个词的一般重要性的衡量标准。

对于特定文档中的某个单词,其重要性可以表示为:

上式中,分子是该单词在文档中出现的次数,分母是文档中所有单词出现次数的总和。

特定单词的 IDF 可以通过将文档总数除以包含该单词的文档数,然后取商的对数来获得:

其中|D|:语料库中的文档总数。

至此,分类器的训练数据准备就完成了。 这里总结一下工程应用在数据准备过程中会遇到的小问题(坑)。

5、工程问题处理

1. 分词

从语用的角度来看,分词主要是维护字典。 HMM或CRF对最终结果的贡献并不像字典的贡献那么明显。 另外,根据应用场景的不同,你可能还需要自己做一些额外的事情。 例如,对于保险相关的分类任务,需要基于正则分词将保险产品“福德人生Life”变成一个词,而不是“福德”和“生命Life”。 这个分词粒度上的小技巧是根据具体的应用场景来确定的。

2. 特征筛选

在特征词筛选过程中,要注意数据清洗和过滤,选择合适的停用词列表,剔除低频词。 否则,您筛选的特征词可能会出现类似“的”、“一一一一”、“@几天”等意想不到的无用词。 使用这些特征来训练分类器必然不会产生好的结果。

3. 特征重要性

除了TF-IDF之外,根据应用场景的不同,对特征重要性也有不同的要求。 例如,名词和专有名词在Query中被赋予较大的权重,“哈哈”等情态助词在口碑评价中也非常重要。 我们不能按照常规处理,将情态助词放入停用词中而不使用它们。 相反,我们应该给出更高的权重值。

4.模型尺寸优化

有时工程需要对模型尺寸有要求。 比如即使在云端,整个系统也是有内存需求的,我们希望对其进行优化。 此时主要有两种方法:

A。 特征选择。 加大特征选择的力度,比如原来选择Top 5000,现在选择Top 1000。这可以类比主成分分析,会减少模型的指标数据,所以是有损的。

b. 简化模型。 您可以删除最终模型中一些权重极小的或为 0 的特征,然后根据剩余特征重新训练新模型。

5、提高运营效率

根据经验,当语料规模超过5万时,需要注意优化运行效率。 提高运行效率可以从编程技巧和处理流程两个方面进行优化。

1)编程能力。 在数据准备阶段将处理大量的文本数据。 使用Java编程时,应注意尽量减少新类的生成,并使用类来处理中间字符串操作。 当文档语料进行切分时,建立单词检索字典,这样一篇文章就可以使用单词的检索值()来存储,而不是使用字符串()存储,从而减少了空间和计算复杂度。 特征筛选后,根据特征词检索值通过查词典即可恢复出特征词。

2)工艺处理。 数据准备工作可以分为分词、特征选择、文本向量计算三个部分分别完成。 每个步骤之间通过一些数据记录文件进行数据交互。 这样可以避免将所有进程数据一次性添加到内存中导致的内存溢出错误或者触发大量JVM垃圾收集机制导致的处理性能下降。

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

文章为原创,请点赞或收藏。 如需转载请注明或联系我。 如果您是大数据爱好者,欢迎一起讨论。

关于

北京爱迪特信息技术有限公司()专注于数据到信息的有效管理和应用。 是领先的商业信息服务技术提供商,也是数据仓库和大数据技术与应用的先驱实践者。

•公司官方网站:

•新浪微博:大数据愿景

•微信关注:大数据愿景

标签: 分类 文本 特征

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码