机器学习:TF-IDF 算法学习

一、算法简介

TF-IDF是一种用于信息检索和数据挖掘的常用加权技术,其全称为Term Frequency-Inverse Document Frequency。它被用来评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。
TF-IDF的计算公式是:TF-IDF(t,d) = TF(t,d) × IDF(t)。其中,TF代表词频(Term Frequency),表示一个词在特定文档中出现的频率。IDF代表逆文档频率(Inverse Document Frequency),表示一个词在语料库中出现的普遍程度。
一个词在特定文档中出现的频率越高,TF值越大,表示该词在该文档中越重要。而一个词在语料库中出现的频率越低,IDF值越大,表示该词具有较好的区分能力。因此,TF-IDF值越大,表示该词在特定文档中越重要。

二、算法运用

搜索引擎:在搜索引擎中,TF-IDF常被用于计算查询串和文档之间的匹配度。如果一个关键词在某篇文档中出现的频率高,同时在其他文档中出现的频率低,那么该词就具有很好的区分能力,能够提高文档和查询串的匹配度。
自动提取关键词:通过TF-IDF计算,可以确定每个单词的权重,并将权重最大的N个单词作为文章的关键词。
找出相似文章:使用TF-IDF算法,可以找出两篇文章的关键词,然后计算两个向量的余弦相似度,值越大表示两篇文章越相似。
信息过滤:TF-IDF可以用于信息过滤,通过计算查询串和文档之间的相似度,将不相关的文档过滤掉。
文本分类:TF-IDF可以用于文本分类,通过提取文本特征,将文本分成不同的类别。

三、算法步骤

第一步,计算词频:

在这里插入图片描述
考虑到文章有长短之分,为了便于不同文章的比较,进行"词频"标准化。

第二步,计算逆文档频率:

这时,需要一个语料库(corpus),用来模拟语言的使用环境。
在这里插入图片描述
如果一个词越常见,那么分母就越大,逆文档频率就越小越接近0。分母之所以要加1,是为了避免分母为0(即所有文档都不包含该词)。log表示对得到的值取对数。

第三步,计算TF-IDF:

在这里插入图片描述
可以看到,TF-IDF与一个词在文档中的出现次数成正比,与该词在整个语言中的出现次数成反比。所以,自动提取关键词的算法就很清楚了,就是计算出文档的每个词的TF-IDF值,然后按降序排列,取排在最前面的几个词。

TF-IDF 代码实现

import jieba  
import numpy as np  
import pandas as pd  
from sklearn.feature_extraction.text import TfidfVectorizer  
  
# 定义一个更复杂的文本集  
documents = [  
    '这是第一篇文章。这是一篇关于机器学习和人工智能的文章。',  
    '这是第二篇文章,和第一篇文章类似。它也涉及到机器学习和人工智能的主题。',  
    '这是第三篇文章,和前两篇文章完全不同。它讨论的是自然语言处理和文本挖掘的算法。',  
    '这是第四篇文章,它涉及到深度学习和神经网络的最新进展。',  
    '这是第五篇文章,它是一篇关于数据分析和数据可视化的文章。它介绍了如何使用Python进行数据分析和可视化。'  
]  
  
# 自定义jieba分词函数  
def tokenize_with_jieba(text):  
    return ' '.join(jieba.cut(text))  
  
# 对所有文档应用jieba分词  
preprocessed_documents = [tokenize_with_jieba(doc) for doc in documents]  
  
# 创建TF-IDF模型对象,使用自定义的分词器(这里其实是identity,因为分词已经在前面完成了)  
vectorizer = TfidfVectorizer(tokenizer=lambda x: x.split())  # 这里我们不需要再次分词,所以只是简单地分割空格  
  
# 将文本集转换为TF-IDF矩阵  
tfidf_matrix = vectorizer.fit_transform(preprocessed_documents)  
  
# 将TF-IDF矩阵转换为pandas DataFrame  
df = pd.DataFrame(tfidf_matrix.toarray(), columns=vectorizer.get_feature_names_out())  
  
# 输出每个单词的权重  
print("单词\t权重值")  
for index, row in df.iterrows():  
    for word, weight in zip(df.columns, row):  
        print(f"文档{index + 1}的'{word}'\t{weight}")

输出结果:
在这里插入图片描述

四、算法优缺点

TF-IDF的优点是简单快速,而且容易理解。缺点是有时候用词频来衡量文章中的一个词的重要性不够全面,有时候重要的词出现的可能不够多,而且这种计算无法体现位置信息,无法体现词在上下文的重要性。如果要体现词的上下文结构,那么你可能需要使用word2vec算法来支持。

  • 23
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
tf-idf是自然语言处理中一种常用的文本特征表示方法。tf代表词频(term frequency),idf代表逆文档频率(inverse document frequency)。 tf表示在一篇文档中一个词出现的频率。一般来说,一个词在一个文档中出现得越频繁,它对文档的特征表示的重要性越大。但是tf并没有考虑到词在整个语料库中出现的频率。 idf则通过一种统计方式,计算一个词在所有文档中出现的概率。公式为idf = log(总文档数/包含该词的文档数)。由于取对数,所以当一个词在所有文档中都出现时,它的idf值会很小,对于文档特征表示的重要性也会很小。而当一个词在少数文档中出现时,它的idf值会很大,对于特征表示的重要性也会很大。 tf-idf的计算方法为tf * idf,通过将tf和idf相乘可以得到每个词在文档中的tf-idf值。这个值越大则说明这个词对文档的特征表示的重要性越高。 tf-idf可以用于文本分类、信息检索、文本聚类等任务。在文本分类中,通过计算每个词的tf-idf值可以得到文档的特征表示,然后可以使用机器学习算法对文档进行分类。在信息检索中,可以通过计算查询词的tf-idf值来评估文档和查询之间的相关性。在文本聚类中,可以根据词的tf-idf值来度量文档之间的相似度,从而将相似的文档聚类在一起。 总之,tf-idf是一种常用的文本特征表示方法,可以用于自然语言处理中的各种任务。通过考虑词频和词在整个语料库中出现的频率,tf-idf可以帮助我们更好地理解和分析文本数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值