TF-IDF 是一种常用于衡量文本中词汇重要性的统计方法,广泛应用于信息检索与文本挖掘领域。该方法结合了两个关键指标:词频(TF)和逆文档频率(IDF),通过两者的乘积来评估一个词语在特定文档中的显著程度。
词频(TF)指的是某个词在当前文档中出现的次数与其总词数的比例。例如,若“learning”在某段文字中频繁出现,则其 TF 值较高,表明它可能是该文档的核心词汇之一。
逆文档频率(IDF)则反映了一个词在整个语料库中的普遍性。如果一个词出现在大量文档中(如“is”、“the”等停用词),它的 IDF 值会较低;反之,越稀有的词,其 IDF 值越高,说明更具区分能力。
最终的 TF-IDF 值由 TF 与 IDF 相乘得到:
TF-IDF = TF × IDF
这种机制能够有效识别出那些在局部文档中高频出现但在全局语料中低频出现的关键词,从而提升文本分析的准确性。
下面是一个使用 Python 中 sklearn 库实现 TF-IDF 向量化的示例代码:
from sklearn.feature_extraction.text import TfidfVectorizer, CountVectorizer
import pandas as pd
# 示例文本集合
all_texts = [
"I love machine learning",
"Machine learning is awesome",
"I love coding in Python"
]
# 初始化TF-IDF向量化器
vectorizer = TfidfVectorizer()
tfidf_matrix = vectorizer.fit_transform(all_texts)
# 提取特征词列表
feature_names = vectorizer.get_feature_names_out()
# 获取对应的IDF数值
idf_values = vectorizer.idf_
print("IDF值:", idf_values)
# 构建特征词与IDF值的映射字典
idf_dict = dict(zip(feature_names, idf_values))
print("特征词-IDF字典:", idf_dict)
# 单独计算TF矩阵(基于相同的词汇表)
count_vectorizer = CountVectorizer(vocabulary=feature_names)
tf_matrix = count_vectorizer.fit_transform(all_texts)
print("TF矩阵:")
print(tf_matrix.toarray())
# 使用DataFrame格式化输出结果
tfidf_df = pd.DataFrame(
tfidf_matrix.toarray(),
columns=feature_names,
index=[f"文档{i+1}" for i in range(len(all_texts))]
)
print("TF-IDF矩阵:")
print(tfidf_df)
print("\nIDF值详情:")
for word, idf in idf_dict.items():
print(f"{word}: {idf:.4f}")
print("\nTF-IDF矩阵(数组形式):")
print(tfidf_matrix.toarray())
程序运行后输出如下结果:
TF矩阵:
[[0 0 0 0 1 1 1 0]
[1 0 0 1 1 0 1 0]
[0 1 1 0 0 1 0 1]]
IDF值: [1.69314718 1.69314718 1.69314718 1.69314718 1.28768207 1.28768207
1.28768207 1.69314718]
从结果可以看出,每个文档都被转换为一个高维向量,其中每一维对应一个词汇的 TF-IDF 权重。权重越高,表示该词对该文档的代表性越强。这种方法不仅适用于文本相似度计算,也可扩展至图像标签相似性分析等场景——只要图像能被转化为有意义的文本描述或标签序列,即可应用相同模型进行处理。