TF-IDF解释
是一种用于信息检索和文本挖掘的统计方法,衡量词语对文档的重要性。
是一种用于评估词语在文档集合中重要性的统计方法。
核心思想
TF(词频): 词语在文档中出现的频率
IDF(逆文档频率): 衡量一个词语在整个文档集合中的普遍重要性
TF-IDF 由两部分组成:
- TF (词频): 词语 t 在文档 d 中出现的频率
- 公式: TF(t,d) = (词语 t 在文档 d 中的出现次数) / (文档 d 中词语总数) 有时也使用简化版本: TF(t,d) = 词语 t 在文档 d 中的出现次数
- IDF (逆文档频率): 衡量词语 t 的通用性或特殊性
- 公式: IDF(t) = log(文档总数 / 包含词语 t 的文档数) 为避免分母为零,通常加1: IDF(t) = log(文档总数 / (包含词语 t 的文档数 + 1)) + 1
- TF-IDF: 两者相乘
- 公式: TF-IDF(t,d) = TF(t,d) * IDF(t)
import math
from collections import Counter
def compute_tf(text):
"""
计算词频(TF)
:param text: 文本
:return: 词频字典
"""
counter = Counter(text.split())
total_words = len(text.split())
tf_dict = {word: count / total_words for word, count in counter.items()}
return tf_dict
def compute_idf(documents):
"""
计算逆文档频率(IDF)
:param documents: 文档集合
:return: 逆文档频率字典
"""
num_docs = len(documents)
idf_dict = {}
all_words = set()
for doc in documents:
all_words.update(doc.split())
for word in all_words:
doc_count = sum(1 for doc in documents if word in doc)
idf_dict[word] = math.log(num_docs / (1 + doc_count))
return idf_dict
def compute_tf_idf(documents):
"""
计算 TF - IDF
:param documents: 文档集合
:return: 每个文档的 TF - IDF 字典列表
"""
idf = compute_idf(documents)
tf_idf_list = []
for doc in documents:
tf = compute_tf(doc)
tf_idf = {word: tf[word] * idf[word] for word in tf}
tf_idf_list.append(tf_idf)
return tf_idf_list
# 示例文档集合
documents = [
"The dog runs in the park",
"A dog is playing in the garden",
"I like to run in the morning"
]
tf_idf_result = compute_tf_idf(documents)
for i, doc_tf_idf in enumerate(tf_idf_result):
print(f"Document {i + 1} TF - IDF: {doc_tf_idf}")
基本概念
- 词频(TF,Term Frequency):指的是一个词语在一篇文档中出现的频率。词频越高,说明该词语在文档中越重要。计算方法是用该词语在文档中出现的次数除以文档中总词语数。
- 逆文档频率(IDF,Inverse Document Frequency):是一个词语在整个文档集合中的稀有程度。如果一个词语在很少的文档中出现,那么它的逆文档频率就高,说明这个词语具有很好的区分度。计算方法是用文档集合的总文档数除以包含该词语的文档数,然后取对数。
计算方法
- 假设我们有一个文档集合D,包含n篇文档。对于一个特定的词语t和一篇文档d,其词频\(TF(t, d)\)的计算公式为: \(TF(t, d)=\frac{在文档d中词语t出现的次数}{文档d中词语的总数}\)
- 逆文档频率\(IDF(t)\)的计算公式为: \(IDF(t)=\log\frac{n}{包含词语t的文档数}\)
- 那么\(TF - IDF\)值的计算公式就是: \(TF - IDF(t, d)=TF(t, d)\times IDF(t)\)
应用场景
- 信息检索:在搜索引擎中,通过计算查询词与文档的\(TF - IDF\)值,可以对搜索结果进行排序,将与查询词相关性较高的文档排在前面,提高检索效率和准确性。
- 文本分类:可以作为文本特征提取的一种方法,将文本转化为向量表示,然后用于文本分类模型的训练。\(TF - IDF\)值较高的词语往往是区分不同类别文本的关键特征。
- 关键词提取:通过计算文档中各个词语的\(TF - IDF\)值,找出值较高的词语作为文档的关键词,能够快速概括文档的主要内容。
示例
TF-IDF 的主要用途包括:
- 文本特征提取和向量化
- 关键词提取
- 文档相似度计算
- 文档检索和排序
- 文本分类
在知识图谱构建中,TF-IDF 的作用主要体现在:
- 实体和关系抽取:帮助识别文本中的重要概念和术语
- 本体构建:辅助识别领域中的关键概念
- 文本数据预处理:筛选出重要特征词,减少噪声
- 实体消歧:通过计算文本相似度帮助确定实体提及的正确指向
比 TF-IDF 更好的选择:
- 词嵌入模型:Word2Vec、GloVe、FastText 能捕捉词语的语义信息
- 基于深度学习的方法:
- BERT、RoBERTa、XLNet 等预训练语言模型 TransE、DistMult 等知识图谱嵌入模型
- 主题模型:LDA (Latent Dirichlet Allocation)
- BM25:改进的 TF-IDF 变体,更适合信息检索
- TextRank:基于图的关键词提取算法
选择哪种方法取决于具体任务、数据规模、计算资源和精度要求。现代知识图谱构建通常采用深度学习方法与传统方法相结合的策略。