文本相似度计算:TF-IDF算法详解
字数 1181 2025-10-27 17:41:11

文本相似度计算:TF-IDF算法详解

题目描述
给定一个文档集合(语料库)和一篇查询文档,如何量化计算查询文档与语料库中每个文档的相似度?TF-IDF算法通过分析词语在文档中的重要性来解决这个问题。

解题过程

第一步:理解核心思想
TF-IDF认为一个词语的重要性与它在当前文档中出现的次数成正比,但与它在整个语料库中出现的文档数成反比。例如:

  • "的"字在单个文档中出现次数多(TF高),但几乎所有文档都包含它(IDF低),因此重要性低
  • "神经网络"在特定文档中多次出现(TF高),且仅出现在少数专业文档中(IDF高),因此重要性高

第二步:计算词频(TF)

  1. 定义:衡量词语在单个文档中的出现频率
  2. 公式:TF(w, d) = (词语w在文档d中出现的次数) / (文档d的总词数)
  3. 示例:文档d包含100个词,"算法"出现5次 → TF("算法", d) = 5/100 = 0.05

第三步:计算逆文档频率(IDF)

  1. 定义:衡量词语在整个语料库中的普遍性
  2. 公式:IDF(w) = log(语料库文档总数 / (包含词语w的文档数 + 1))
  3. 对数作用:抑制数值爆炸,+1防止除零
  4. 示例:语料库有1000篇文档,"算法"在200篇中出现 → IDF("算法") = log(1000/201) ≈ 1.70

第四步:计算TF-IDF权重

  1. 组合计算:TF-IDF(w, d) = TF(w, d) × IDF(w)
  2. 物理意义:同时考虑局部重要性和全局区分度
  3. 接前例:"算法"在文档d的权重 = 0.05 × 1.70 ≈ 0.085

第五步:构建文档向量

  1. 将每个文档表示为向量:向量的每个维度对应一个词的TF-IDF值
  2. 示例:语料库词汇表为["算法", "模型", "数据"]
    • 文档d1的向量可能是:[0.085, 0.02, 0.12]
    • 文档d2的向量可能是:[0.03, 0.15, 0.08]

第六步:计算余弦相似度

  1. 原理:比较两个向量方向的夹角(忽略长度差异)
  2. 公式:cosθ = (d1·d2) / (||d1|| × ||d2||)
  3. 计算示例:
    • 分子点积: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等模型奠定了重要的文本表示基础。

文本相似度计算: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等模型奠定了重要的文本表示基础。