文本相似度计算:TF-IDF算法详解
字数 1181 2025-10-27 17:41:11
文本相似度计算:TF-IDF算法详解
题目描述:
给定一个文档集合(语料库)和一篇查询文档,如何量化计算查询文档与语料库中每个文档的相似度?TF-IDF算法通过分析词语在文档中的重要性来解决这个问题。
解题过程:
第一步:理解核心思想
TF-IDF认为一个词语的重要性与它在当前文档中出现的次数成正比,但与它在整个语料库中出现的文档数成反比。例如:
- "的"字在单个文档中出现次数多(TF高),但几乎所有文档都包含它(IDF低),因此重要性低
- "神经网络"在特定文档中多次出现(TF高),且仅出现在少数专业文档中(IDF高),因此重要性高
第二步:计算词频(TF)
- 定义:衡量词语在单个文档中的出现频率
- 公式:TF(w, d) = (词语w在文档d中出现的次数) / (文档d的总词数)
- 示例:文档d包含100个词,"算法"出现5次 → TF("算法", d) = 5/100 = 0.05
第三步:计算逆文档频率(IDF)
- 定义:衡量词语在整个语料库中的普遍性
- 公式:IDF(w) = log(语料库文档总数 / (包含词语w的文档数 + 1))
- 对数作用:抑制数值爆炸,+1防止除零
- 示例:语料库有1000篇文档,"算法"在200篇中出现 → IDF("算法") = log(1000/201) ≈ 1.70
第四步:计算TF-IDF权重
- 组合计算:TF-IDF(w, d) = TF(w, d) × IDF(w)
- 物理意义:同时考虑局部重要性和全局区分度
- 接前例:"算法"在文档d的权重 = 0.05 × 1.70 ≈ 0.085
第五步:构建文档向量
- 将每个文档表示为向量:向量的每个维度对应一个词的TF-IDF值
- 示例:语料库词汇表为["算法", "模型", "数据"]
- 文档d1的向量可能是:[0.085, 0.02, 0.12]
- 文档d2的向量可能是:[0.03, 0.15, 0.08]
第六步:计算余弦相似度
- 原理:比较两个向量方向的夹角(忽略长度差异)
- 公式:cosθ = (d1·d2) / (||d1|| × ||d2||)
- 计算示例:
- 分子点积:0.085×0.03 + 0.02×0.15 + 0.12×0.08 = 0.01455
- 分母模长乘积:√(0.085²+0.02²+0.12²) × √(0.03²+0.15²+0.08²) ≈ 0.083
- 相似度:0.01455/0.083 ≈ 0.175
关键改进点:
- 预处理:需先进行分词、去除停用词("的、了、是"等)
- 平滑处理:IDF分母+1避免未登录词问题
- 归一化:对长文档的TF值进行长度归一化
应用场景:
搜索引擎排序、文档自动去重、推荐系统内容匹配等。该算法虽简单,但为后续Word2Vec、BERT等模型奠定了重要的文本表示基础。