TF-IDF算法

文章目录

  • TF-IDF算法
    • 1、TF-IDF算法介绍
    • 2、TF-IDF的应用
    • 3、怎么使用TF-IDF
      • 3.1 sklearn实现TF-IDF算法
      • 3.2 参数介绍
    • 4、TF-IDF的不足

1、TF-IDF算法介绍

TF-IDF(term frequency-invers document frequency,词频-逆向文件频率)是一种常用于信息检索(information retrieval)与文本挖掘(text mining)的常用加权技术。

TF-IDF是一种统计方法,用于评估一字词对于一个文件集或语料库中的一份文件的重要程度。字词的重要性随着他在文件中出现的次数成正比增加,但同时也会随着它在语料库中出现的频率成反比下降。

TF-IDF的主要思想是:如果某个单词在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或短语具有很好的类别区分能力,适合用来分类。

  • TF是词频(Term Frequency)

其中,nijn_ijni​j 是该词在文章djd_jdj​ 中出现的次数,分母则是文章djd_jdj​ 中所有词汇出现的次数总和。

  • IDF是逆向文件频率(Inverse Document Frequency)

逆向文件频率(IDF):某一特定词语的IDF,可以由总文章数除以包含该词语的文件的数目,再将得到的商取对数得到。

如果包含词条ttt的文档越少,IDF越大,说明词条具有很好的类别区分能力。

其中**∣D∣|D|∣D∣是语料库中的文章总数。**∣j:ti∈dj∣|{j:t_i \in d_j}|∣j:ti​∈dj​∣表示包含词语tit_iti​的文章数目。如果该词语不再语料库中,就会导致分母为0,因此一般情况下使用1+∣j:ti∈dj∣1+|{j:t_i \in d_j}|1+∣j:ti​∈dj​∣。即:

  • TF-IDF实际上是:TF*IDF

某一特定文件中的高词语频率,以及该词语在整个文件集合中的低文件频率,可以产生高权重的TF-IDF,因此,TF-IDF倾向于过滤掉常见的词语,保留重要的词语。

公式:

注: TF-IDF算法非常容易理解,并且很容易实现,但是其简单结构并没有考虑词语的语义信息,无法处理一词多义与一义多词的情况。

2、TF-IDF的应用

  • 搜索引擎
  • 关键词提取
  • 文本相似性
  • 文本摘要

3、怎么使用TF-IDF

3.1 sklearn实现TF-IDF算法

  • 代码:
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
x_train = ['TF-IDF 主要 思想 是','算法 一个 重要 特点 可以 脱离 语料库 背景','如果 一个 网页 被 很多 其他 网页 链接 说明 网页 重要']
x_test=['原始 文本 进行 标记','主要 思想']
#该类会将文本中的词语转换为词频矩阵,矩阵元素a[i][j] 表示j词在i类文本下的词频
vectorizer = CountVectorizer(max_features=10)
#该类会统计每个词语的tf-idf权值
tf_idf_transformer = TfidfTransformer()
#将文本转为词频矩阵并计算tf-idf
tf_idf = tf_idf_transformer.fit_transform(vectorizer.fit_transform(x_train))
#将tf-idf矩阵抽取出来,元素a[i][j]表示j词在i类文本中的tf-idf权重
x_train_weight = tf_idf.toarray()#对测试集进行tf-idf权重计算
tf_idf = tf_idf_transformer.transform(vectorizer.transform(x_test))
x_test_weight = tf_idf.toarray()  # 测试集TF-IDF权重矩阵print('输出x_train文本向量:')
print(x_train_weight)
print('输出x_test文本向量:')
print(x_test_weight)

运行结果:

3.2 参数介绍

  • token_pattern 这个参数使用正则表达式来分词,其默认参数为r"(?u)\b\w\w+\b",其中的两个"\w"决定了其匹配到长度至少为2的单词,所以将’\w’个数减少到1个的话,即可实现匹配长度至少为1的单词。
  • **max_df/min_df **: [0.0, 1.0]内浮点数或正整数,默认值是1.0

当设置为浮点数的时候,过滤出现超过max_df对于min_df比例的句子中的词语;正整数时,则是超过max_df句句子。

这样就可以帮助我们过滤掉出现太多的无意义词语

  • stop_words: list类型

直接过来吧指定的停用词。

  • voca:dict类型
  • 只是用特定的词汇,其形式上与上面看到的tfidf_modl.vocabulary_相同,也是指定对应关系。

这一参数的使用有时可以帮助我们专注于一些词语。

  • ngram_ranege: tuplpe

有时候我们觉得单个的词语作为特征还不过,能够加入一些词语更好就可以设置这个参数,如下面允许词表使用一个词语,或者两个词语的组合。

这里顺便使用了一个方便的方法 get_feature_names() ,可以以列表的形式得到所有的词语
5**.max_feature**: int

在大规模语料上训练TFIDF会得到非常多的词语,如果再使用了上一个设置加入了词组,那么我们词表的大小就会爆炸。出于时间和空间效率的考虑,可以限制最多使用多少个词语,模型会优先选取词频高的词语留下。

4、TF-IDF的不足

TF-IDF采用文本逆频率IDF对TF值加权取权值大的作为关键词,但IDF的简单构造并不能有效地反映搭单词的重要程度和特征词的分布情况,使其无法很好地完成对权值的调整,所以TF-IDf算法的精度并不是很高,尤其是当文本集已经分类的情况下。

在本质上IDF是一种试图抑制噪声的加权,并且单纯地认为本文频率小的单词就越重要,文本频率大的单词就越无用。着对大部分文本信息,并不是完全正确的。ID发的简单构造并不能让提取的关键词,十分有效地反映单词地重要程度和特征词地分布情况,使其无法很好地完成对权值调整的功能。尤其在同类语料库中,这一方法有很大的弊端,往往一些同类文本的关键词被覆盖。

不足:

  1. 没有考虑特征词的位置因素对文本的区分度,词条出现在文档的不同位置时,对区分度的贡献大小是不一样的。
  2. 按照传统TF-IDF,往往对一些生僻词的IDF(逆文档频率)会比较高,因此这些生僻词常被误认为是文档关键词
  3. 传统TF-IDF中的IDF部分只考虑了特征词与他出现文本数之间的关系,而忽略了特征项在一个类别中不同的类别间的分布情况。
  4. 对于文档中出现次数较少的重要人名,地名信息提取效果不佳。

TF-IDF算法详解与实践相关推荐

  1. NEAT(NeuroEvolution of Augmenting Topologies)算法详解与实践(基于NEAT-Python)

    NEAT(NeuroEvolution of Augmenting Topologies)算法详解与实践(基于NEAT-Python) NEAT算法详解 NEAT算法概述 NEAT编码方案 结构突变 ...

  2. id3算法c语言实现,从ID3到C5.0的故事:算法详解及实践应用

    原标题:从ID3到C5.0的故事:算法详解及实践应用 在前面,我们分别概述性地介绍了决策树的基本知识: 1.算法概述 ID3(Iterative Dichotomiser3)算法可以说决策树算法中最著 ...

  3. 推荐系统简介+算法详解+项目介绍

    目录标题 推荐系统简介 1.推荐系统目的 2.推荐系统的应用 3.推荐系统的基本思想 4.推荐系统的数据分析 5.推荐系统的分类 6.推荐算法简介 6.1 基于人口统计学的推荐算法(基于用户数据) 6 ...

  4. KNN分类器之NearestNeighbors详解及实践

    KNN(K Nearest Neighbors)分类器之最近邻NearestNeighbors详解及实践 如何判断谁是最近邻? 通过距离方法.例如欧几里得距离. KNN属于基于实例的学习方法 一个实例 ...

  5. KNN(K Nearest Neighbors)分类是什么学习方法?如何或者最佳的K值?RadiusneighborsClassifer分类器又是什么?KNN进行分类详解及实践

    KNN(K Nearest Neighbors)分类是什么学习方法?如何或者最佳的K值?RadiusneighborsClassifer分类器又是什么?KNN进行分类详解及实践 如何使用GridSea ...

  6. 数据结构与算法详解目录

    数据结构与算法详解是一本以实例和实践为主的图书,主要是经典的数据结构与常见算法案例,来自历年考研.软考等考题,有算法思路和完整的代码,最后提供了C语言调试技术的方法. 后续配套微课视频. 第0章  基 ...

  7. SVM-支持向量机原理详解与实践之一

    SVM-支持向量机原理详解与实践 前言 去年由于工作项目的需要实际运用到了SVM和ANN算法,也就是支持向量机和人工神经网络算法,主要是实现项目中的实时采集图片(工业高速摄像头采集)的图像识别的这一部 ...

  8. SVM -支持向量机原理详解与实践之五

    SVM -支持向量机原理详解与实践之四 SVM原理分析 SMO算法分析 SMO即Sequential minmal optimization, 是最快的二次规划的优化算法,特使对线性SVM和稀疏数据性 ...

  9. 新颖性搜索(Novelty Search,NS)算法详解与实现

    新颖性搜索(Novelty Search,NS)算法详解与实现 基于目标的进化算法的缺点 新颖性搜索与自然进化 新颖性指标 算法描述 新颖性搜索算法实践 基于目标的进化算法的缺点 大多数机器学习方法( ...

最新文章

  1. 数字图像处理:腐蚀与膨胀操作
  2. 计算机组成的基本硬件设备
  3. legend3---lavarel中使用qq邮箱发送邮件
  4. PHP Fatal error: Class #39;DOMDocument#39; not found
  5. 关于页面动态添加控件(转)
  6. jQUery中closest和parents的主要区别是
  7. Javaweb乱码解决
  8. 存量累计超20亿部“宁闲不卖”如何“唤醒”依旧有经济价值的旧手机?
  9. shell脚本显示颜色的设置
  10. 制造业数字化转型-项目案例合集
  11. H5点击复制按钮复制文本
  12. Python实现问卷星表单机刷
  13. 8个免费高清图片素材网站,再也不用担心侵权了。
  14. sunshine in the rainsunshine in the rain
  15. LeetCode1436. 旅行终点站(Java)
  16. windows易升_直播用“易升”工具升级至Windows10 2020年5月更新
  17. 新型城镇化红利,碧桂园的确定性在哪里?
  18. 512内存安装php7,《滴水石穿-php》虚拟机中安装php7内存错误
  19. 虚拟机centos7的网络配置
  20. rails相当于java中的什么_Rails中的ERB中的%,%=,%#和-%有什么区别?

热门文章

  1. adobe acrobat reader安装教程
  2. 类似于心理测试的游戏
  3. redis 在备份报错修改vm.overcommit_memory
  4. 矩阵的翻转与旋转()(另附代码)
  5. 复数神经网络_如果神经网络状态为复数会发生什么?
  6. 爱康科技子爱康科技山西孝义30MW光伏发电项目并网发电
  7. 【福利】【两周年庆典,送书第二弹】机器学习方法体系汇总
  8. netty-Android-RN等博文收藏
  9. CHIL-SQL-LCASE() 函数
  10. 充电枪cp信号控制板_一种电动汽车交流充电系统的CP信号电压检测方法及装置与流程...