当前位置: 首页 > news >正文

TD-IDF的一些应用

TF-IDF(词频 - 逆文档频率)作为经典的文本特征提取算法,在自然语言处理(NLP)领域应用广泛。它能将文本转化为可量化的数值特征,为后续的数据分析和建模提供基础。本文结合实际场景,介绍如何用 Python 实现 TF-IDF 的常见应用。

一、环境准备

首先确保安装必要的库,最常用的是 scikit-learn(提供成熟的 TF-IDF 工具)和 nltk(可选,用于文本预处理):

pip install scikit-learn nltk

二、核心工具:TfidfVectorizer

scikit-learn 中的 TfidfVectorizer 是实现 TF-IDF 的核心工具,它集成了文本分词、词频计算、IDF 加权等功能,无需手动编写复杂公式。基本用法如下:

from sklearn.feature_extraction.text import TfidfVectorizer# 示例文本数据
documents = ["Python是一种流行的编程语言,适合数据分析和机器学习","机器学习是人工智能的一个分支,依赖大量数据训练模型","数据分析常用Python工具,如Pandas和NumPy,处理结构化数据","人工智能包括机器学习、自然语言处理等多个领域"
]# 初始化TF-IDF向量器(默认分词会按空格和标点分割,支持中文)
tfidf = TfidfVectorizer(max_features=100,  # 保留Top N高频词stop_words=["是", "的", "一种"],  # 自定义停用词(过滤无意义词汇)lowercase=False  # 不强制转为小写(中文无需小写处理)
)# 拟合数据并转换为TF-IDF矩阵
tfidf_matrix = tfidf.fit_transform(documents)# 获取词汇表(所有分词后的词语)
words = tfidf.get_feature_names_out()
print("词汇表:", words)# 输出TF-IDF矩阵(每行对应一篇文档,每列对应一个词的TF-IDF值)
print("\nTF-IDF矩阵形状:", tfidf_matrix.shape)  # (文档数, 词汇数)

三、实战应用场景

1. 自动提取文档关键词

关键词提取是 TF-IDF 最经典的应用之一。通过对单篇文档的 TF-IDF 值排序,可快速定位核心词汇。

def extract_keywords(tfidf_matrix, words, doc_index, top_n=3):"""提取指定文档的Top N关键词"""# 获取该文档的TF-IDF向量doc_tfidf = tfidf_matrix[doc_index].toarray()[0]# 按TF-IDF值降序排序,返回词语和分数keyword_scores = sorted(zip(words, doc_tfidf), key=lambda x: x[1], reverse=True)# 过滤分数为0的词,取前N个return [word for word, score in keyword_scores if score > 0][:top_n]# 提取第1篇文档(索引0)的关键词
print("文档1关键词:", extract_keywords(tfidf_matrix, words, doc_index=0))
# 输出示例:['Python', '编程语言', '数据分析']

应用场景:论文摘要关键词自动生成、新闻主题标签推荐、文档快速摘要。

2. 文本相似度计算

通过比较两篇文档的 TF-IDF 向量相似度,可判断内容相关性(如查重、推荐相似文章)。

from sklearn.metrics.pairwise import cosine_similarity# 计算文档间的余弦相似度(值越接近1,相似度越高)
similarity_matrix = cosine_similarity(tfidf_matrix)
print("\n文档相似度矩阵:")
for i in range(len(similarity_matrix)):for j in range(i+1, len(similarity_matrix)):print(f"文档{i+1}与文档{j+1}的相似度:{similarity_matrix[i][j]:.4f}")# 示例输出:文档2与文档4的相似度较高(都涉及“人工智能”“机器学习”)

应用场景:文章查重系统、推荐系统(如 “猜你喜欢”)、问答系统中匹配相似问题。

3. 文本分类预处理

TF-IDF 可将文本转化为机器学习模型能处理的数值特征,为分类任务提供输入。

from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import accuracy_score# 准备带标签的文本数据(示例:科技类=0,教育类=1)
texts = ["Python用于数据分析和机器学习","人工智能技术在医疗领域的应用","中小学编程教育纳入课程体系","在线教育平台助力学生自主学习"
]
labels = [0, 0, 1, 1]  # 标签:科技=0,教育=1# 转换为TF-IDF特征
tfidf = TfidfVectorizer()
X = tfidf.fit_transform(texts)
y = labels# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=42)# 用朴素贝叶斯模型分类
model = MultinomialNB()
model.fit(X_train, y_train)# 预测并评估准确率
y_pred = model.predict(X_test)
print("\n分类准确率:", accuracy_score(y_test, y_pred))  # 示例:准确率1.0# 预测新文本类别
new_text = ["机器学习课程走进高中课堂"]
new_text_tfidf = tfidf.transform(new_text)
print("新文本预测类别:", model.predict(new_text_tfidf))  # 输出:1(教育类)

应用场景:垃圾邮件识别、情感分析(正面 / 负面评价)、新闻分类(科技 / 体育 / 娱乐)。

4. 搜索引擎基础

在简易搜索引擎中,可通过 TF-IDF 计算查询词与文档的相关性,返回最匹配的结果。

def search(query, documents, tfidf):"""根据查询词返回相关文档排序"""# 将查询词转换为TF-IDF向量query_tfidf = tfidf.transform([query])# 计算与所有文档的相似度similarities = cosine_similarity(query_tfidf, tfidf_matrix).flatten()# 按相似度降序返回文档索引return [documents[i] for i in similarities.argsort()[::-1] if similarities[i] > 0]# 搜索示例
query = "Python 数据分析"
print("\n搜索结果:")
for doc in search(query, documents, tfidf):print("-", doc)
# 输出:优先返回包含“Python”和“数据分析”的文档

应用场景:站内搜索、文档检索系统、智能客服知识库查询。

四、进阶技巧与优化

  1. 中文分词优化
    TfidfVectorizer 默认按标点和空格分词,对中文不够友好。可结合 jieba 进行精准分词:

    import jieba
    from sklearn.feature_extraction.text import TfidfVectorizer# 自定义分词函数
    def jieba_tokenizer(text):return jieba.lcut(text)  # 精确分词# 初始化向量器时指定分词函数
    tfidf = TfidfVectorizer(tokenizer=jieba_tokenizer)
    
  2. 停用词处理
    过滤无意义词汇(如 “的”“在”“吗”)可提升效果,可使用 nltk 或自定义停用词表:

    from nltk.corpus import stopwords
    # 下载英文停用词(中文需自定义)
    import nltk
    nltk.download('stopwords')
    english_stopwords = stopwords.words('english')
    tfidf = TfidfVectorizer(stop_words=english_stopwords)
    
  3. 参数调优

    max_features:限制词汇表大小,避免维度灾难;                                              ngram_range:支持词组特征(如 (1,2) 表示同时考虑单个词和词组);                      min_df/max_df:过滤在太少 / 太多文档中出现的词(如 min_df=2 表示只保留至少在 2 篇文档中出现的词)。

五、局限性与替代方案

TF-IDF 虽简单高效,但存在局限性:

忽略词语语义关系(如 “电脑” 和 “计算机” 无法识别为同义词);

对短文本效果较差,依赖词频统计;

无法捕捉上下文信息。

替代方案:

词向量(Word2Vec、GloVe):保留语义关系;

BERT 等预训练模型:捕捉上下文语义,适用于复杂 NLP 任务。

总结

TF-IDF 作为文本特征提取的 “基石算法”,凭借简单、高效、可解释性强的特点,在关键词提取、相似度计算、文本分类等场景中仍被广泛使用。通过 scikit-learn 等工具,我们可以快速将其应用到实际项目中,解决文本分析的基础问题。对于更复杂的语义理解需求,可结合词向量或预训练模型进一步优化,但 TF-IDF 仍是入门 NLP 的必备技能。

http://www.dtcms.com/a/326287.html

相关文章:

  • 降压型DCDC电源芯片推荐-芯伯乐XBL4001 40V/5A
  • Python3.10 + Firecrawl 下载 Markdown 文档:构建高效通用文章爬虫
  • 深度学习 --- 迁移学习以及onnx推理
  • 自建Web应用防火墙(WAF)
  • 前端面试:promise...then与asnyc ...await
  • 华为Atlas 200 DK 板卡使用技巧记录(一)修改板卡IP
  • Pytest项目_day12(yield、fixture的优先顺序)
  • CobaltStrike钓鱼鱼饵制作的方式(chm、doc、execl、exe、powshell 上线cs)
  • [特殊字符] OpenCV图像预处理与ResNet-50深度学习分类实战
  • 元数据管理与数据治理平台:Apache Atlas 关系搜索 Relationship Search
  • AI产品经理手册(Ch12-16)AI Product Manager‘s Handbook学习笔记
  • 使用纯NumPy实现回归任务:深入理解机器学习本质
  • C++安装使用eigen库时出现warning C4819问题的解决方案
  • 【网络运维】Linux:LNMP 项目实践
  • NodeJs》》url地址参数 解析 URLSearchParams querystring
  • vscode的wsl环境,怎么打开linux盘的工程?
  • CSS彩虹七色十六进制值
  • langmem
  • 排序与查找,简略版
  • 《算法导论》第 18 章 - B 树
  • linux 秒 安装谷歌浏览器 区分ubuntu和centos 给python爬取网站使用
  • Haystack:面向大模型应用的模块化检索增强生成(RAG)框架
  • 简单Modules 的配置与管理,灵活应对多版本软件环境的需求。
  • 基于SpringBoot+Uniapp的血压监控小程序(Echarts图形化分析)
  • C++进阶:C++11(2)
  • 应用层模拟面试题
  • 【Jmeter】两个函数拼接
  • IPCP(IP Control Protocol,IP控制协议)
  • 李宏毅2025《机器学习》-第十讲:AI“思想钢印”:深入解析大模型的知识编辑技术
  • docter的使用、vscode(cursor)和docker的连接,详细分析说明