【文本分类】基于类信息的TF-IDF权重分析与改进

简介: 【文本分类】基于类信息的TF-IDF权重分析与改进

摘要:改进TFIDF,增加了类间因子、类内因子,应用于文本的特征选择,提高了精度 。

参考文献:[1]姚严志,李建良.基于类信息的TF-IDF权重分析与改进[J].计算机系统应用,2021,30(09):237-241.

一、引言


  权重计算的方法多种多样, 常用的包括文档频率、信息增益、互信息、卡方分布、TF-IDF 等。

二、基础算法


2.1、TF-IDF算法【词频-逆文档频】


  可以与sklearn中提供的TF-IDF方法TfidfVectorizer结合介绍。

c0b4f5f48bb842ab9cacd0e0d66e306d.jpg   1、 如上图,TF-IDF的值为TF*IDF。

   1.1、 tf(t, d):tf代表特征词t在文本d中出现的次数,其实就是独热(OneHot)。

    词频标准化:但是有可能d比较长,那么相应的每个特征词t相较于在其他文本di出现的次数就多,可能造成不公平,所以提出tf(t, d):tf代表特征词t在文本d中出现的频率,也就是拿t出现的次数除以d中的所有词出现次数和。

   1.2、 idf(t):idf表示逆文档频率。nd是语料库中所有文档数,df(t, d)是整个语料库中含有特征词t的文本数目。

   idf的多个公式:以上3个公式,第二个是教科书的定义。真正使用起来,使用第一或者第三个,第一个是加了平滑,第三个没有加。当sklearn中方法TfidfVectorizer使用smooth_idf = True时,使用的是第一个公式,smooth_idf = False时,使用的是第三个公式。

     2、出来TF-IDF值之后,需要基于每个文本d,来使用归一化。归一化采用L2范数,也就是欧几里得归一化,控制TF-IDF的值到区间[0,1]。


[注一]:上图的两种tf的计算方法,一旦经过欧几里得归一化之后,效果是一样的,代入L2范数很容易消去下面的分母,这也是为什么sklearn直接使用词出现次数而不使用词频的原因。

2.2、改进算法【TF-IDF-CI】


提出TF-IDF的缺点。


  传统 TF-IDF 并不能很好的区分类间和类内分布所带来的影响.。

  类间分布指的是特征词在不同类别间的分布情况,集中分布于某个类别的特征词,比在各个类别均匀分布的特征词更好;

  类内分布指的是特征词在某类别内的分布情况,在某类别内各文档均普遍出现的特征词,比仅出现于类别内一小部分文档的特征词更好。

提出两种因子。


  类间离散度因子CIac和类内离散度因子CIic

fa9895f2f09449c28ebc55ef0f09b254.png

 这些因子都是比较常规的求解方法,其中思想有借鉴意义。

[注二]:上图标注的1,也是对数据进行归一化,采用arctan,函数图像与sigmoid很像。选取函数是否会有一定的规则?值得思考。

image.png

[注三]:上图标注的2,这个公式是非常常规的方差公式,教科书上方差的分母应该是N,本文为N-1。调查后,发现除以N是当样本趋于无穷的时候,我们使用有限个样本时,方差会略小,实验证明分母取N-1效果比较好。


[注四]:上图标注的3,分母n(t, c)为0的情况非常多,论文中没有交代如何平滑。

三、代码实验


3.1、实验思路


  根据以下4种方法:

  (1)sklearn中的TF-IDF

  (2)手写的TF-IDF

  (3)sklearn中的TF-IDF + 论文中的两种因子

  (4)手写的TF-IDF + 论文中的两种因子

  比较不同算法之间,文本分类的准确率。

[注五]:TF-IDF主要是用来表示特征词的权重,基于类信息改进的TF-IDF可以应用于训练集,因为训练集是已知类别标签的;但是无法应用于测试集,因为我们在表示权重的时候不应该去拿测试集的标签,测试集标签只是用来验证结果的。参阅文献后,发现他们是对训练集用交叉验证的,感觉自欺欺人了,难以用到工程实践,求大佬指教。。。

参考了论文:张玉芳, 彭时名, 吕佳. 基于文本分类 TFIDF 方法的改进与应用. 计算机工程, 2006, 32(19): 76–78. [doi: 10.3969/j.issn.1000-3428.2006.19.028]

3.2、数据集


  数据来源于 https://github.com/cystanford/text_classification 。数据集共包含四个类别,分别为“女性”,“体育”,“文学”,“校园”,原始数据集已经划分了测试集和训练集,并给出了停用词文档。

3.3、实验结果


5折交叉检验:

方法 准确率
sklearn中的TF-IDF 0.8699288361952732
手写的TF-IDF 0.8699288361952732
sklearn中的TF-IDF + 论文中的两种因子 0.6966538843005425
手写的TF-IDF + 论文中的两种因子 0.6966538843005425

[注六]:手写出来的特征矩阵,是3306*24000维的,跑一次SVC需要10分钟,我们需要使用scipy.sparse,把普通二维矩阵,转化为稀疏矩阵csr_matrix,此时算法只需要30秒就可以完成。

实验结果分析:


  准确率下降了!满脸问号???

  检查了很多遍,2.2节公式平滑那里也调了很多参数,准确率都很低。

  虽然实验结果不如意,但是学到了很多关于TF-IDF的理论。

欣慰的是,从数据中可以发现我手写的TF-IDF算法和sklearn提供的效果一模一样!

相关文章
|
4月前
|
机器学习/深度学习 数据采集 PyTorch
使用 PyTorch 创建的多步时间序列预测的 Encoder-Decoder 模型
本文提供了一个用于解决 Kaggle 时间序列预测任务的 encoder-decoder 模型,并介绍了获得前 10% 结果所涉及的步骤。
68 0
|
6月前
|
机器学习/深度学习 自然语言处理 算法
基于TF-IDF+KMeans聚类算法构建中文文本分类模型(附案例实战)
基于TF-IDF+KMeans聚类算法构建中文文本分类模型(附案例实战)
518 1
|
6月前
TF-IDF 怎样将用单词权重的向量表示一个文档
TF-IDF 怎样将用单词权重的向量表示一个文档
68 1
|
算法 数据挖掘 Linux
【文本分类】采用同义词的改进TF-IDF权重的文本分类
【文本分类】采用同义词的改进TF-IDF权重的文本分类
127 0
【文本分类】采用同义词的改进TF-IDF权重的文本分类
|
机器学习/深度学习 自然语言处理 算法
【文本分类】基于改进TF-IDF特征的中文文本分类系统
【文本分类】基于改进TF-IDF特征的中文文本分类系统
250 0
【文本分类】基于改进TF-IDF特征的中文文本分类系统
|
机器学习/深度学习 自然语言处理 数据处理
基于TF-IDF与逻辑回归模型实现文本实体关系抽取任务
基于TF-IDF与逻辑回归模型实现文本实体关系抽取任务
174 0
基于TF-IDF与逻辑回归模型实现文本实体关系抽取任务
|
机器学习/深度学习 算法 TensorFlow
TF之LSTM:基于tensorflow框架自定义LSTM算法实现股票历史(1990~2015数据集,6112预测后100+单变量最高)行情回归预测
TF之LSTM:基于tensorflow框架自定义LSTM算法实现股票历史(1990~2015数据集,6112预测后100+单变量最高)行情回归预测
TF之LSTM:基于tensorflow框架自定义LSTM算法实现股票历史(1990~2015数据集,6112预测后100+单变量最高)行情回归预测
|
搜索推荐 索引
空间向量模型和tf-idf
空间向量模型和tf-idf
362 0
空间向量模型和tf-idf
【新闻文本分类】(task2)文本表示(CBOW和TF-IDF)
Bag of words词袋表示,又称为CountVectors或者CBOW,用它表示成对应的文本向量时,每个向量的元素对应该该维对应的词在文本中出现的次数。显然这种表示方法木有考虑词的顺序信息,没有融入上下文的信息。 下面来看下它的实现吧:
230 0
【新闻文本分类】(task2)文本表示(CBOW和TF-IDF)
|
机器学习/深度学习 算法 算法框架/工具
DL之CNN:利用卷积神经网络算法(2→2,基于Keras的API-Sequential)利用MNIST(手写数字图片识别)数据集实现多分类预测
DL之CNN:利用卷积神经网络算法(2→2,基于Keras的API-Sequential)利用MNIST(手写数字图片识别)数据集实现多分类预测
DL之CNN:利用卷积神经网络算法(2→2,基于Keras的API-Sequential)利用MNIST(手写数字图片识别)数据集实现多分类预测