记一个文本分类系统的实现

OshynSong OshynSong     2023-01-14     122

关键词:

基于信息检索课程,完成实现了一个文本分类系统,现记录一下整个实现过程。

文本分类以文本数据为分类对象,本质上是机器学习方法在信息检索领域的一种应用,可以继承机器学习领域的很多概念和方法,但同时也需要结合信息检索领域的特点进行处理。主要研究的方向是:文本分词方法、文本特征提取方法、分类算法。

本人主要使用了5种常用的分类算法,分别是kNN、Rocchio、NBC、SVM和ANN,对每种算法的结果进行了比较,使用了十折交叉验证绘制了各自的准确率曲线。由于本系统基于的搜狗语料库,是中文文本,因此使用的分词工具是Python实现的中文分词工具jieba。使用的特征提取方法是信息增益。

1、语料

选择搜狗语料库的Reduced版本,一共有9个类别每个类别1990篇文章。考虑到实现规模,从每个类别中选择了600篇文档一共5400篇文档作为训练样本。共有9个类别,标号对应如下:(搜狗语料类别– 分类标号 – 类别名称)

  • C000008—— 1 —— 财经
  • C000010—— 2 —— IT
  • C000013—— 3 —— 健康
  • C000014—— 5 —— 体育
  • C000016—— 4 —— 旅游
  • C000020—— 6 —— 教育
  • C000022—— 7 —— 招聘
  • C000023—— 8 —— 文化
  • C000024—— 9 —— 军事
2、分词 本系统使用python语言实现,同时是针对中文文章进行分词,因此选取了jieba(项目见 Github)这个专门用于中文分词的python工具。

针对上述5400篇训练样本,首先使用jieba进行分词,共得到157269个词项。然后编写python程序,计算每个类别下的每篇文章的tf,得到所有文档集的倒排记录表。同时统计每个词项的df并计算idf保存到文件中供后续使用。

3、特征提取

对分词后得到的157269个词项,首先使用jieba工具的标签抽取函数,输入idf和停用词,得到初步的6445个候选特征。

接着使用信息增益(IG)这种特征提取方法,在候选特征中计算每个词项对9个类别的信息增益。信息增益计算如下:


同时结合文档频率(DF)进行过滤,将小于DF小于5的词项过滤掉,然后设置IG的不同阈值得到不同阈值下特征,最终得出阈值为0.016,特征数目为967时分类效果最好。

4、向量化表示

根据上述得到的特征,对5400篇文档进行向量化表示,每篇文章都是一个967维的向量。第一种是使用tf(词项频率),分别计算出不同维数下的向量。第二种是使用tf-idf方式,对每篇文档的每个特征进行向量化,得到每个特征的tf-idf值。

5、分类器训练

所选择的五种分类算法中,kNN、Rocchio、NBC和ANN是使用python自行实现,SVM是使用python调用了libsvm程序实现。这写算法的具体实现在此不予赘述,具体可参考各类机器学习方法的书籍。

6、系统实现

最终基于python CGI实现了一个web应用系统,支持输入一个新闻url后,系统输入对应的分类结果,同时支持url文件上传进行批量分类。界面如下:


上传url文件后,分类结果显示如下:


说明:分类url目前仅支持搜狐、腾讯、网易、新浪四个网站的新闻类页面的文章。

参考:

[1] Joachims, T. . Textcategorization with Support Vector Machines: Learning with many relevantfeatures. In Machine Learning[C]. ECML-98, Tenth European Conference on MachineLearning, 1998: 137--142.

[2] Wikipedia. Documentclassification [DB/OL].

http://en.wikipedia.org/wiki/Document_classification.2014

[3] Fandywang. 斯坦福大学自然语言处理第六课“文本分类(Text Classification)”[DB/OL].http://52opencourse.com/222/斯坦福大学自然语言处理第六课“文本分类(Text Classification). 2012.

[4] Li F., Yang Y. A LossFunction Analysis for Classification Methods in Text Categorization[C].International Conference on Machine Learning (ICML), 2003: 472-479.

[5] 申红,吕宝粮,内山将夫,井佐原均. 文本分类的特征提取方法比较与改进[J]. 计算机仿真, 2006, 23(3): 222-225



文本分类(代码片段)

...法  单标签的label标签取值只有两种,并且算法中只有一个需要预测的标签的label标签,即分类算法构建一个分类线将数据划分为两个类别。  常用算法:Logist 查看详情

tensorflor实现文本分类

...分类的原理下图展示了如何使用cnn进行句子分类。输入是一个句子,为了使其可以进行卷积,首先需要将其转化为向量表示,通常使用word2vec实现。d=5表示每个词转化为5维的向量,矩阵的形状是[sentence_length × 5],即[7 ... 查看详情

tensorflow实现基于lstm的文本分类方法(代码片段)

...,想找个项目试试手,然后想起了之前在看Theano教程中的一个文本分类的实例,这个星期就用tensorflow实现了一下,感觉和之前使用的theano还是有很大的区别,有必要总结mark一下模型说明这个分类的模型其实也是很简单,主要就... 查看详情

技术文本聚类与分类

...如将介绍奥运会的新闻都归到某一类;②文档分类:给定一个文档,将其划分到预定义好的某一个类别中,例如将所有介绍奥运会的新闻都标记为“体育”;③词汇聚类:把一组未知类别的词汇划分为若干类别,例如将各种运动... 查看详情

朴素贝叶斯文本分类在一个类别中失败。为啥? [关闭]

】朴素贝叶斯文本分类在一个类别中失败。为啥?[关闭]【英文标题】:Naivebayestextclassificationfailsinonecategory.Why?[closed]朴素贝叶斯文本分类在一个类别中失败。为什么?[关闭]【发布时间】:2013-05-1204:07:20【问题描述】:我正在实... 查看详情

文本分类采用同义词的改进tf-idf权重的文本分类

... 论文提出了一种改进计算TF-IDF权重的算法,提出了一个a因子乘上原TF-IDF公式,a因子是根据特征词之间的相似度关系得到的,而词语相似度是基于“知网”计算的。详细情况可以参考上一篇博客:【文本分类】... 查看详情

记:代码,浮躁世界的一次回响(代码片段)

...大特点:封装性、继承性、多态性。  我们在前面定义一个类的时候,实际上就是把一类事物共有的属性和行为提取出来,形成一个物理模型(模版),这种研究问题的方法称为抽象。封装就是把抽取出来的数据和对数据的操... 查看详情

查找文本的相似程度 - 一类分类器 (NLP)

...fier(NLP)【发布时间】:2020-04-0122:08:42【问题描述】:我有一个包含近5亿条推文的大型数据集。我正在对公司如何参与激进主义进行一些研究,到目前为止,我已根据推文中某些主题标签的存在情况将推文标记为可以归类为激进... 查看详情

如何实现分类系统

...tem【发布时间】:2011-10-1919:37:53【问题描述】:我想实现一个适用于i18n的类别结构。由于GAE内置了db.CategoryProperty,但它没有实现子类别,而且我似乎正在使用类别属性,因为它是我的模型的列表对象。classVehicles(GeoModel,search.Sear... 查看详情

文本分类基于改进tf-idf特征的中文文本分类系统

摘要:改进TFIDF,提出相似度因子,提高了文本分类准确率。参考文献:[1]但唐朋,许天成,张姝涵.基于改进TF-IDF特征的中文文本分类系统[J].计算机与数字工程,2020,48(03):556-560.  😮最近看了许多有关机器学习... 查看详情

朴素贝叶斯分类算法的sklearn实现

...earn的训练模型函数,fit(X,Y),发现只需要准备两个参数。一个是数据的矩阵,另一个是数据的分类数组。首先就是将以上的文本转化成矩阵。在前一章其实已经讲解过如何将文本转化成矩阵。这里将示意的再补充下。a.首先选取... 查看详情

搜索引擎文本分类

...现实,机器的自动分类对提高文本的分类效率至少起到了一个基准的效果。另外,文本分类跟搜索引擎系统可以进行信息互通,文本分类的输入是文本,输出可以是标签或者是否从属于某个分类。Q2.文本分类基础算法  文本分... 查看详情

课后作业——新闻文本分类(代码片段)

引言:  本次任务是做一个新闻文本分类的算法,算法选择朴素贝叶斯实现。可以实现对新闻内容的一个具体分类。  环境:jupternookbook,py3.81.导入数据df_new=pd.read_excel(\'./data/123.xlsx\').astype(str)df_news=pd.DataFrame(df_new)df_news.head()... 查看详情

基于朴素贝叶斯分类算法的邮件过滤系统

...件过滤系统。      本文详细地讲解一个基于朴素贝叶斯分类算法的邮件过滤系统的具体实现。   &nbs 查看详情

pytorch实现文本情感分类流程(代码片段)

...码基本概念介绍tokenization:分词,每个词语就是一个token分词方法:转化为单个字(常见)切分词语N-gram:准备词语特征的方法,N-gram一组一组的词语,其中N表示能够一起使用的词的数量 查看详情

记一个上传图片到图床利器插件的实现(mac版开源)(代码片段)

...博客截图手动上传到图床的步骤过于繁琐,很久之前写了一个windows版的截图软件插件,用于把图片快速上传到图床重新打包用户量过亿的开源截图软件——加入图片自动上传到图床的功能现在换系统了,由windows换成了Mac,系统... 查看详情

了解用于文本分类的朴素贝叶斯

...】:我熟悉机器学习和朴素贝叶斯,但在我的特征向量是一个词袋的文档分类中,我很难理解如何实现它。特别是,您如何计算类条件特征似然Pr(word|class)?在许多文本中,我看到以下术语:右侧是如何实现的?是c类中出现特征... 查看详情

基于朴素贝叶斯分类器的文本分类

实验要求题目要求1、用MapReduce算法实现贝叶斯分类器的训练过程,并输出训练模型;2、用输出的模型对测试集文档进行分类测试。测试过程可基于单机Java程序,也可以是MapReduce程序。输出每个测试文档的分类结果;3、利用测... 查看详情