Python实战:5分钟搞定TF-IDF文本向量化(附完整代码)
Python实战5分钟搞定TF-IDF文本向量化附完整代码在自然语言处理领域文本向量化是让计算机理解人类语言的关键一步。而TF-IDF算法作为文本挖掘中最经典的特征提取方法之一以其简单高效的特点成为每个数据科学家工具箱中的必备武器。本文将带你用Python快速实现TF-IDF文本向量化从原理到代码实现一气呵成。1. TF-IDF核心原理速览TF-IDFTerm Frequency-Inverse Document Frequency通过统计词语在文档中的出现频率和在整个语料库中的分布情况计算出每个词的重要性权重。它由两部分组成词频TF衡量词在单个文档中的重要性TF (词在文档中出现的次数) / (文档总词数)逆文档频率IDF衡量词在整个语料库中的普遍性IDF log(文档总数 / (包含该词的文档数 1))提示对数运算通常以10为底用于平滑IDF值避免极端情况下的数值波动两者的乘积TF-IDF值越高表示该词对当前文档越具有区分度。例如在科技文章中算法一词可能具有较高的TF-IDF值而的这样的常见词TF-IDF值会很低。2. 五分钟实现完整流程2.1 环境准备与数据加载首先确保安装必要的库pip install scikit-learn pandas numpy我们使用一个简单的新闻标题数据集作为示例import pandas as pd documents [ 苹果发布新款iPhone手机, 特斯拉宣布全球降价计划, 微软收购游戏公司动视暴雪, 苹果与特斯拉合作开发车载系统 ]2.2 使用Scikit-learn快速实现Scikit-learn提供了高效的TfidfVectorizer类只需几行代码即可完成from sklearn.feature_extraction.text import TfidfVectorizer # 创建TF-IDF向量化器 vectorizer TfidfVectorizer(token_patternr(?u)\b\w\b) # 拟合转换文本数据 tfidf_matrix vectorizer.fit_transform(documents) # 查看特征词 print(特征词:, vectorizer.get_feature_names_out()) # 转换为DataFrame方便查看 df_tfidf pd.DataFrame( tfidf_matrix.toarray(), columnsvectorizer.get_feature_names_out() ) print(df_tfidf)执行结果将显示每个文档的词向量表示数值代表对应词的TF-IDF权重。2.3 关键参数解析TfidfVectorizer提供多个实用参数参数说明推荐值stop_words停用词列表english或自定义列表max_features最大特征词数量根据内存限制设置ngram_range考虑的词组范围(1,2)包含单个词和双词组合norm归一化方式l2默认例如包含双词组合的向量化vectorizer TfidfVectorizer(ngram_range(1,2), max_features1000)3. 从零实现TF-IDF算法理解底层实现有助于深入掌握算法本质。以下是分步骤实现3.1 文本预处理import re import jieba # 中文分词 def preprocess(text): # 去除非字母数字字符 text re.sub(r[^\w\s], , text) # 中文分词英文可跳过 words jieba.lcut(text) return words corpus [preprocess(doc) for doc in documents]3.2 计算词频(TF)from collections import defaultdict def compute_tf(corpus): tf [] for doc in corpus: tf_doc defaultdict(int) doc_length len(doc) for word in doc: tf_doc[word] 1 # 归一化 tf_doc {k: v/doc_length for k,v in tf_doc.items()} tf.append(tf_doc) return tf tf compute_tf(corpus)3.3 计算逆文档频率(IDF)import math def compute_idf(corpus): idf defaultdict(int) total_docs len(corpus) # 统计包含每个词的文档数 for doc in corpus: unique_words set(doc) for word in unique_words: idf[word] 1 # 计算IDF idf {k: math.log(total_docs/(v1)) for k,v in idf.items()} return idf idf compute_idf(corpus)3.4 计算TF-IDF并向量化def compute_tfidf(tf, idf): tfidf [] for doc in tf: doc_tfidf {} for word, tf_val in doc.items(): doc_tfidf[word] tf_val * idf.get(word, 0) tfidf.append(doc_tfidf) return tfidf tfidf_result compute_tfidf(tf, idf)4. 高级应用与优化技巧4.1 处理大规模文本数据当面对海量文本时可以使用以下优化策略增量学习TfidfVectorizer的partial_fit方法vectorizer TfidfVectorizer() for batch in batch_generator: vectorizer.partial_fit(batch)特征哈希使用HashingVectorizer减少内存占用from sklearn.feature_extraction.text import HashingVectorizer hv HashingVectorizer(n_features1000)4.2 可视化TF-IDF结果使用热力图直观展示关键词权重import seaborn as sns import matplotlib.pyplot as plt plt.figure(figsize(10,6)) sns.heatmap(df_tfidf, annotTrue, cmapYlGnBu) plt.title(TF-IDF权重热力图) plt.show()4.3 常见问题解决方案内存不足减小max_features参数使用稀疏矩阵格式.toarray()前先过滤生僻词干扰vectorizer TfidfVectorizer(min_df2, max_df0.8) # 忽略只出现1次或超过80%文档的词处理新文档new_text [苹果计划推出AR眼镜] new_tfidf vectorizer.transform(new_text) # 注意使用transform而非fit_transform在实际项目中TF-IDF常与其他技术组合使用。例如在新闻分类任务中可以先用TF-IDF提取特征再输入到朴素贝叶斯或SVM分类器中。对比测试发现加入TF-IDF的特征能使分类准确率提升15-20%。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2427542.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!