当前位置:   article > 正文

TF-IDF关键词提取改进——TF-IDF-CI_基于chi-tfidf算法改进特征词的选取

基于chi-tfidf算法改进特征词的选取

TF-IDF关键词提取改进——TF-IDF-CI

1 前言

​ TF-IDF是关键词提取中常用的手段,但是它仅仅考虑了特征词在文本中的词频和逆文档率,没有考虑到特征词在类内和类间中的分布情况,依然有很大的改进空间。而TF-IDF-CI就是对TF-IDF的一种改进方式。

本文主要参考:

2 基础知识

2.1 关键词提取

关键词是能够表达文档中心内容的词语,常用于计算机系统标引论文内容特征、信息检索、系统汇集以供读者检阅。关键词提取是文本挖掘领域的一个分支,是文本检索、文档比较、摘要生成、文档分类和聚类等文本挖掘研究的基础性工作。

对于篇幅很长像卷轴一样 的文章,借助关键词,可以更好的提取出相关的信息。

从算法的角度来说,关键词提取方法可以分为两类:无监督关键词提取方法有监督关键词提取方法

在这里插入图片描述

2.2 分词

对于一篇文章,如果说想要提取出关键词,就需要用到分词来提取出文章中的词语。

对于英文,由于英文在书写时,每个词之间都有非字母元素将词语分隔开,提取起来相对容易。但对于中文,分词并不是一件很容易的事情,一般来讲,会使用一些分词工具来对中文进行分词。

其实吧,有时候让人去对中文分词,有时候也有些难度,比如下面的两个句子:

  • 小龙女对杨过说:我也想过过过过过过的生活。
  • 海水朝朝朝朝朝朝朝落,浮云长长长长长长长消。

这一类句子对于人分词都有些难度,让机器分词难度就更大了。

常用的一些分词工具如下:

  • jieba
  • nltk
  • spaCy

2.3 无监督关键词提取和有监督关键词提取

2.3.1 无监督关键词提取

无监督关键词提取是指不需要人工标注的语料,利用某些方法发现文本中比较重要的词作为关键词,进行关键词提取。该方法是先抽取出候选词,然后对各个候选词进行打分,然后输出top K个分值最高的候选词作为关键词。根据打分策略的不同,有着不同的算法。

无监督提取关键词的方法主要有三类:

  1. 基于统计特征的关键词提取:它的思想是利用文档中的词语的统计信息抽取文档的关键词,一般常用TF,TF-IDF;
  2. 基于词图模型的关键词提取:它主要是构建文档的语言网络图,然后对语言进行网络图分析,在这个图上寻找具有重要作用的词或者短语,而它们就是需要提取的关键词,一般常用PageRank,TextRank;
  3. 基于主题模型的关键词提取:它主要利用主题模型中关于主题分布的性质进行关键词提取,一般常用LDA。
2.3.2 有监督关键词提取

有监督关键词提取是将关键词抽取过程视为二分类问题,先提取出候选词,然后对于每个候选词划定标签,要么是关键词,要么不是关键词,然后训练关键词抽取分类器。

当新来一篇文档时,提取出所有的候选词,然后利用训练好的关键词提取分类器,对各个候选词进行分类,最终将标签为关键词的候选词作为关键词。

2.3.3 无监督方法和有监督方法的优缺点

无监督方法不需要人工标注训练集合的过程,因此更加快捷,但由于无法有效综合利用多种信息 对候选关键词排序,所以效果无法与有监督方法媲美;而有监督方法可以通过训练学习调节多种信息对于判断关键词的影响程度,因此效果更优,有监督的文本关键词提取算法需要高昂的人工成本,因此现有的文本关键词提取主要采用适用性较强的无监督关键词提取。

3 TF-IDF

要了解对TF-IDF的改进,首先不妨对TF-IDF进行了解。

TF-IDF(term frequency–inverse document frequency),也叫词语-逆向文本频率,是一种用于信息检索和文本挖掘的常用加权技术。

TF-IDF的主要思想是:如果一个词语在文本中出现的次数多,但在其它文本中出现的较少,则认为该词是关键词

3.1 TF

词频(TF)表示词条在文本中出现的频率,计算公式为:
T F i j = n i , j ∑ k n k , j TF_{ij} = \frac{n_{i,j}}{\sum_kn_{k,j}} TFij=knk,jni,j
其中, n i , j n_{i,j} ni,j是该词在文本中出现的次数, ∑ k n k , j \sum_kn_{k,j} knk,j是文本中出现的词汇的总和。

3.2 IDF

逆向文本频率(IDF)一般用下面公式进行计算:
I D F i = l o g ∣ D ∣ ∣ { j : t i ∈ d j } ∣ IDF_i = log\frac{|D|}{|\{j:t_i \in d_j\}|} IDFi=log{j:tidj}D
其中, ∣ D ∣ |D| D指的是文本总数, ∣ { j : t i ∈ d j } ∣ |\{j:t_i \in d_j\}| {j:tidj}指的是包含词语 t i t_i ti的文本数目

考虑到如果词语未出现在这个文本中,容易出现分母为0的情况,一般使用下面的公式:
I D F i = l o g ∣ D ∣ 1 + ∣ { j : t i ∈ d j } ∣ IDF_i = log\frac{|D|}{1 + |\{j:t_i \in d_j\}|} IDFi=log1+{j:tidj}D
也有使用
I D F i = l o g 1 + ∣ D ∣ 1 + ∣ { j : t i ∈ d j } ∣ IDF_i = log\frac{1 + |D|}{1 + |\{j:t_i \in d_j\}|} IDFi=log1+{j:tidj}1+D

3.3 TF-IDF

TF-IDF计算公式如下:
T F − I D F = T F × I D F TF-IDF = TF \times IDF TFIDF=TF×IDF
此时,当一个词语的词频很高,同时它在整个文本集中的少数文本中出现,此时所得的TF-IDF值高。TF-IDF倾向于滤掉常见的词语,保留重要的词语。

当然,为了获得更好的效果,一般来说会对分词后的结果去掉停用词

4 TF-IDF改进

4.1 TF-IDF不足

TF-IDF主要将文本集视作一个整体,没有考虑到文本所属的类内的关系、以及不同类之间的关系。在现实应用时,我们更追求这个词在这个类中出现的多,在其他类中出现的少,往往这种词更适合作为关键词。

比如对于疾病的关键词,一般有以下文本:

(宇宙安全声明:下面文本为个人虚构,不来源于任何一个数据集,如有雷同,纯属巧合)

  • 1958年11月14日,石湖荡县李荣在家中精神不振、头昏脑涨、四肢无力,可能是因为长期性熬夜导致的。

  • 1712年8月1日,宽裕县剧院有一名观众晕倒,该观众精神不振、头晕目眩,有可能是因为长期为了吃5折早餐天天通宵导致。

  • 1986年5月,西光镇小吃街有一名食客精神不振,晕倒在街头,经调查,发现他经常图小便宜,每天晚上11点到次日9点在这里排队买5毛钱的包子。

这时候,显然,词语“精神不振”是我们需要的描述症状的关键词。在上面文本集中,“精神不振”词频很高,但它的IDF值低,使用TF-IDF很难提取出来。

4.2 TF-IDF-CI

为了更好的衡量文本的类内关系和类间关系,在论文中,考虑引入了类间离散因子 C I a c CI_{ac} CIac类内离散因子 C I i c CI_{ic} CIic

4.2.1 类间因子

一般来说,相比于在各个类别中均匀分布的某个特征词,集中分布于某个类别的特征词更能体现这个类的内容属性。一般来说,使用标准差能够更好地分析数据的离散程度,这里,对于特征词 t j t_j tj,计算它的标准差如下:
S ( t j ) = ∑ k = 1 ∣ C ∣ ( T F ( t j , c k ) − T F ( t j ) ‾ ) 2 ∣ C ∣ − 1 S(t_j) = \sqrt{\frac{\sum_{k=1}^{|C|}(TF(t_j,c_k) - \overline{TF(t_j)})^2}{|C| - 1}} S(tj)=C1k=1C(TF(tj,ck)TF(tj))2
这里, c k c_k ck指的是特征词 t j t_j tj所在的类别, ∣ C ∣ |C| C指的是类别总数, T F ( t j , c k ) TF(t_j,c_k) TF(tj,ck)指的是特征词 t j t_j tj在类别 c k c_k ck中出现的频率, T F ( t j ) ‾ \overline{TF(t_j)} TF(tj)指的是特征词 t j t_j tj在各个类别中出现的频率。

计算出标准差 S ( t j ) S(t_j) S(tj)后, C I a c CI_{ac} CIac计算公式如下
C I a c = 2 π a r c t a n ( S ( t j ) ) CI_{ac} = \frac{2}{\pi}arctan(S(t_j)) CIac=π2arctan(S(tj))

4.2.2 类内因子

对于类内,通常认为在某类别内各文本中均普遍出现的特征词,更能够表现该类别的内容属性。这里,计算的公式如下
s ( t j , c k ) = T F ( t j , c k ) ⋅ N ( c k ) n ( t j , c k ) − T F ( t j , c k ) s(t_j,c_k) = TF(t_j,c_k) \cdot \frac{N(c_k)}{n(t_j,c_k)} - TF(t_j,c_k) s(tj,ck)=TF(tj,ck)n(tj,ck)N(ck)TF(tj,ck)
其中, N ( c k N(c_k N(ck)表示类别 c k c_k ck中的文档数, n ( t j , c k ) n(t_j,c_k) n(tj,ck)表示类别 c k c_k ck包含特征词 t j t_j tj的文档数。

之后,类内离散因子 C I i c CI_{ic} CIic计算公式如下
C I i c = 2 π a r c t a n ( s ( t j , c k ) ) CI_{ic} = \frac{2}{\pi}arctan(s(t_j,c_k)) CIic=π2arctan(s(tj,ck))

4.2.3 TF-IDF-CI

这里,我们发现

  • 特征词 t j t_j tj在不同类别中的 S ( t j ) S(t_j) S(tj)越大,特征词越能体现文本集的内容属性;
  • 特征词 t j t_j tj在类别 c k c_k ck中的 s ( t j , c k ) s(t_j,c_k) s(tj,ck)越小,特征词越能体现文本集的内容属性;

基于此,给出改进后的TF-IDF,即TF-IDF-CI
T F − I D F − C I = T F × I D F × 1 − C I i c ( t j , c k ) 1 − C I a c ( t j ) TF-IDF-CI = TF \times IDF \times \frac{1-CI_{ic}(t_j,c_k)}{1-CI_{ac}(t_j)} TFIDFCI=TF×IDF×1CIac(tj)1CIic(tj,ck)
论文中,作者对TF-IDF、TF-IDF-DI和TF-IDF-CI的性能进行了比较

在这里插入图片描述

这里,相较于TF-IDF,它的性能有了提高。

4.3 TF-IDF-CI可能的不足与改进

4.3.1 可能的不足

在论文作者的实验中,使用到的是均衡的数据集,但不均衡的数据集往往比均衡的数据集更多。

当数据集不均衡时,使用TF-IDF-CI,有可能会出现低频高权词语

低频高权词语,指的是它在文本集中出现的很少(TF-IDF值低),但是它的权重因子很高(CI很高)

比如现在有疾病类的文本集(文本数量多)和汽车类的文本集(文本数量少),在疾病类中,“六个月”出现的多,权重也高,此时能够反应疾病特征,但对于汽车类,“六个月”频率很少,但由于疾病类的文本影响,使得它的权重很高,此时对于汽车类,“六个月”就是一个低频高权词语。

显然,低频高权词语不能够反应文本集的内容属性。

4.3.2 改进方式

对于这种低频高权词语,能够改进的方法一般有三种:新增停用词过滤优化TF-IDF-CI的计算

这里我们主要介绍前两种。(第三种方式就留给大神去做吧)

4.3.2.1 新增停用词

有的时候,我们得到的关键词与这个类别关系不是很大(如地名等),这时只需要在原有的停用词基础之上新增这些词就可以了。

4.3.2.2 过滤

但更多的时候,这种低频高权的词语与这个类别有些关系,此时直接去停用词,容易产生不好的效果。

这时,抓住低频高权的词语的一个重要特点:低频,借助这个,我们可以根据词语出现的次数 c o u n t count count以及词语出现的文本数 n u m _ d o c num\_doc num_doc来对词语进行过滤。

对于过滤的阈值,需要根据实际的情况来进行确定,这里推荐一个我在实验中使用的一个阈值 θ \theta θ:分级阈值。
θ = { 0.01 × n u m _ d o c , x ≥ 1 0 5 0.1 × n u m _ d o c , x < 1 0 5 \theta =

{0.01×num_doc,x1050.1×num_doc,x<105
θ= 0.01×num_doc,x1050.1×num_doc,x<105
不过,这里的分级只是简单的分级,对于更小或更大的文本数的文本集,选取的阈值可能依然有调整,建议结合实际的结果,来获得更加科学合理的阈值。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/695049
推荐阅读
相关标签
  

闽ICP备14008679号