TF-IDF:概念与python实现

简介: TF-IDF:概念与python实现

1. 基本概念


TF-IDF(Term Frequency - Inverse Document Frequency)表示“词频-逆文本频率”。词频(TF,Term Frequency )表示给定词语在文件或语料中出现的频率(归一化以屏蔽长短文件的差异);逆文本频率(IDF,Inverse Document Frequency)是一个词语重要性的度量。


(1)Term Frequency


当以“人工智能的应用”为关键词进行网页搜索,根据直觉,“人工智能”、“的”、“应用”这三个词出现次数较多的网页相关性也较高。


但由于篇幅较长的网页一般包含较多的关键词,为屏蔽文本篇幅的差异,根据网页长度对关键词的次数进行归一化,就是词频(Term-Frequency)。


此时,度量网页相关性可以直接将关键词的词频相加,假设N 个关键词的词频分别为T  F 1 , TF2   , . . . , T F N  ,该网页的相关性为:


image.png

比如,某个网页的词共1000个,“人工智能”、“的”和“应用”分别出现3次,30次,10次,它们的词频分别为0.003,0.03,0.01,该网页与“人工智能的应用”相关性为


image.png

但是“人工智能”是一个很专业的词,“应用”是一个很普通的词,“的”是一个停止词(Stop Word),但在计算相关行性时候“的”贡献却是最多的,而“人工智能”贡献却最少。因此还需要给每个词赋予相应的权重进行修正,以满足以下设定:


一个词与主题相关性越大,权重越大,反正权重越小。

停止词权重为0。即忽略“的”、“得”、“地”、“是”、“也”这些词。


(2) Inverse Document Frequency


可见如果一个关键词只在少量文本中出现,当它一旦出现时,就很容易锁定该文本的主题,反之亦然;即一个关键词x 在N 个文本中出现,当N 越大时,x 的权重就越小,反之亦然。


上述理念通过定义逆文本频率(IDF,Inverse Document Frequency)实现:


image.png

其中,N 代表语料库中文本的总数,而N ( x )代表语料库中包含词x xx的文本总数。


当某个生僻词未在语料库中出现过,N ( x )=0, 需要进行如下平滑处理:


image.png


IDF反应了一个词在所有文本中出现频率的逆,如果一个词在较少文本中出现,它的IDF值应该高,如“人工智能”这样的专业名词;如果一个词在较多文本中出现,它的IDF值应该低,比如“应用”这样词。极端的情况下,如果一个词在所有(或大多数)文本中都出现,那么它的IDF值应该为0,比如“的”这样的停止词。


上述例子中,假设所有文本语料数量N =  109,“人工智能”出现次105,“应用”出现次108,“的”在所有网页中都出现,则


image.png


此时,相关性可以用TF-IDF度量,假设N 个关键词的词频分别为,该网页与关键词的相T  F 1 , TF 2   , . . . , T F N  关性为:


image.png


上述例子中,“人工智能”的TF-IDF为0.04,“应用”的TF-IDF为0.03,而“的”TF-IDF为0,则该网页与“人工智能的应用”的相关性为0.07,其中“人工智能”贡献了一半以上的相关性。


2. 代码实现


使用sklearn.feature_extraction.text中的TfidfVectorizer类实现,支持传入停止词。


from sklearn.feature_extraction.text import TfidfVectorizer
corpus=["I come to China to travel", 
    "This is a car polupar in China",          
    "I love tea and Apple ",   
    "The work is to write some papers in science"] 
tfidfVec = TfidfVectorizer()
tfidf = tfidfVec.fit_transform(corpus)
print("\n词频矩阵(TF-IDF):")
print(tfidf)
print("\n词袋模型(TF-IDF):")
print(tfidf.toarray())

输出如下:



20200705185138706.png

相关文章
|
2月前
|
存储 Java 数据处理
(numpy)Python做数据处理必备框架!(一):认识numpy;从概念层面开始学习ndarray数组:形状、数组转置、数值范围、矩阵...
Numpy是什么? numpy是Python中科学计算的基础包。 它是一个Python库,提供多维数组对象、各种派生对象(例如掩码数组和矩阵)以及用于对数组进行快速操作的各种方法,包括数学、逻辑、形状操作、排序、选择、I/0 、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等等。 Numpy能做什么? numpy的部分功能如下: ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组 用于对整组数据进行快速运算的标准数学函数(无需编写循环)。 用于读写磁盘数据的工具以及用于操作内存映射文件的工具。 线性代数、随机数生成以及傅里叶变换功能。 用于集成由C、C++
318 0
|
存储 数据挖掘 数据库
探索Python编程:从基础到高级探索移动应用开发之旅:从概念到实现
【8月更文挑战第29天】本文将带你进入Python的世界,无论你是初学者还是有一定经验的开发者。我们将从Python的基础知识开始,然后逐步深入到更复杂的主题。你将学习到如何编写清晰、高效的代码,以及如何使用Python进行数据分析和网络编程。最后,我们将介绍一些高级主题,如装饰器和生成器。让我们一起开始这段旅程吧!
|
机器学习/深度学习 数据采集 数据可视化
Python数据分析入门涉及基础如Python语言、数据分析概念及优势。
【7月更文挑战第5天】Python数据分析入门涉及基础如Python语言、数据分析概念及优势。关键工具包括NumPy(数组操作)、Pandas(数据处理)、Matplotlib(绘图)、Seaborn(高级可视化)和Scikit-learn(机器学习)。流程涵盖数据获取、清洗、探索、建模、评估和展示。学习和实践这些将助你有效利用数据。
151 2
|
分布式计算 并行计算 安全
在Python Web开发中,Python的全局解释器锁(Global Interpreter Lock,简称GIL)是一个核心概念,它直接影响了Python程序在多线程环境下的执行效率和性能表现
【6月更文挑战第30天】Python的GIL是CPython中的全局锁,限制了多线程并行执行,尤其是在多核CPU上。GIL确保同一时间仅有一个线程执行Python字节码,导致CPU密集型任务时多线程无法充分利用多核,反而可能因上下文切换降低性能。然而,I/O密集型任务仍能受益于线程交替执行。为利用多核,开发者常选择多进程、异步IO或使用不受GIL限制的Python实现。在Web开发中,理解GIL对于优化并发性能至关重要。
233 0
|
机器学习/深度学习 自然语言处理 语音技术
Python在深度学习领域的应用,重点讲解了神经网络的基础概念、基本结构、训练过程及优化技巧
本文介绍了Python在深度学习领域的应用,重点讲解了神经网络的基础概念、基本结构、训练过程及优化技巧,并通过TensorFlow和PyTorch等库展示了实现神经网络的具体示例,涵盖图像识别、语音识别等多个应用场景。
432 8
|
测试技术 Python
探索Python中的装饰器:从基础概念到高级应用
本文深入探讨了Python中一个强大而灵活的特性——装饰器。从其基本定义出发,逐步解析装饰器的本质、运作机制以及如何高效利用这一工具来优化代码结构、增加功能和提升代码的可读性与可维护性。通过具体示例,包括自定义简单装饰器、带参数装饰器、多重装饰等高级话题,本文展示了装饰器在软件开发中的广泛应用,旨在为读者提供一个全面而实用的装饰器使用指南。
|
前端开发 JavaScript 数据可视化
Python+Dash快速web应用开发——基础概念篇
Python+Dash快速web应用开发——基础概念篇
502 3
|
Python
Python函数式编程:你真的懂了吗?理解核心概念,实践高阶技巧,这篇文章带你一次搞定!
【8月更文挑战第6天】本文介绍了Python中的函数式编程,探讨了高阶函数、纯函数、匿名函数、不可变数据结构及递归等核心概念。通过具体示例展示了如何利用`map()`和`filter()`等内置函数处理数据,解释了纯函数的一致性和可预测性特点,并演示了使用`lambda`创建简短函数的方法。此外,文章还强调了使用不可变数据结构的重要性,并通过递归函数实例说明了递归的基本原理。掌握这些技巧有助于编写更清晰、模块化的代码。
226 3
|
缓存 Python
探索Python中的装饰器:从概念到实战
【8月更文挑战第31天】装饰器,在Python中是一种强大的工具,能够让我们轻松地修改函数或类的行为。本文将带你从零开始理解装饰器的概念,并通过实际代码示例展示如何创建和使用它们。我们将一步步构建一个日志记录装饰器,并探讨其对提升代码可读性和重用性的影响。通过本文的学习,你将能够自信地在你的Python项目中应用装饰器技术。

推荐镜像

更多