基于潜在语义索引(LSI)的文档相似度计算算法
字数 1015 2025-11-04 20:47:20

基于潜在语义索引(LSI)的文档相似度计算算法

题目描述
潜在语义索引(Latent Semantic Indexing, LSI)是一种用于文档语义分析的传统算法。它通过奇异值分解(SVD)将高维的词-文档矩阵降维,发现潜在的语义结构,从而计算文档间的语义相似度,即使文档间没有直接共享词语。例如,两篇分别讨论"猫"和"犬"的文档可能没有共同词汇,但LSI能识别它们在"宠物"主题上的关联。

解题过程

  1. 构建词-文档矩阵

    • 假设有m篇文档和n个唯一词语。构建一个m×n矩阵X,其中每行代表一篇文档,每列代表一个词语。
    • 矩阵元素通常使用TF-IDF(词频-逆文档频率)值:TF-IDF(t,d) = TF(t,d) × log(m / DF(t)),其中TF(t,d)是词语t在文档d中的频率,DF(t)是包含t的文档数。TF-IDF能突出文档中的重要词语。
  2. 奇异值分解(SVD)

    • 对矩阵X进行SVD:X = UΣVᵀ。其中U是m×m的正交矩阵(文档-潜在语义空间映射),Σ是m×n的对角矩阵(奇异值,表示潜在语义维度的重要性),V是n×n的正交矩阵(词语-潜在语义空间映射)。
    • 奇异值σ₁, σ₂, ... 按降序排列,较大的σₖ对应更重要的语义维度。
  3. 降维选择k

    • 选择保留前k个最大的奇异值(k << min(m, n)),例如k=100。截取U的前k列(Uₖ)、Σ的前k个奇异值(Σₖ)、V的前k行(Vₖᵀ),得到近似矩阵Xₖ ≈ Uₖ Σₖ Vₖᵀ。
    • 降维去除了噪声和次要变异,保留了核心语义结构。
  4. 文档相似度计算

    • 降维后,文档在潜在空间中的表示为Uₖ Σₖ(每行对应一篇文档的k维向量)。
    • 计算两篇文档的相似度:使用余弦相似度,即向量点积除以模长乘积:sim(dᵢ, dⱼ) = (dᵢ · dⱼ) / (||dᵢ|| × ||dⱼ||)。值越接近1,语义越相似。

示例
假设3篇文档:d1(猫 宠物)、d2(犬 动物)、d3(苹果 水果)。

  • TF-IDF矩阵X(行:文档,列:猫,犬,苹果,宠物,动物,水果):
    d1: [0.8, 0, 0, 0.6, 0, 0]
    d2: [0, 0.7, 0, 0, 0.5, 0]
    d3: [0, 0, 0.9, 0, 0, 0.7]
  • SVD降维到k=2后,d1和d2在"生物"维度上接近,与d3在"食物"维度分离,相似度计算显示d1与d2更相似,尽管无共享词语。
基于潜在语义索引(LSI)的文档相似度计算算法 题目描述 潜在语义索引(Latent Semantic Indexing, LSI)是一种用于文档语义分析的传统算法。它通过奇异值分解(SVD)将高维的词-文档矩阵降维,发现潜在的语义结构,从而计算文档间的语义相似度,即使文档间没有直接共享词语。例如,两篇分别讨论"猫"和"犬"的文档可能没有共同词汇,但LSI能识别它们在"宠物"主题上的关联。 解题过程 构建词-文档矩阵 假设有m篇文档和n个唯一词语。构建一个m×n矩阵X,其中每行代表一篇文档,每列代表一个词语。 矩阵元素通常使用TF-IDF(词频-逆文档频率)值:TF-IDF(t,d) = TF(t,d) × log(m / DF(t)),其中TF(t,d)是词语t在文档d中的频率,DF(t)是包含t的文档数。TF-IDF能突出文档中的重要词语。 奇异值分解(SVD) 对矩阵X进行SVD:X = UΣVᵀ。其中U是m×m的正交矩阵(文档-潜在语义空间映射),Σ是m×n的对角矩阵(奇异值,表示潜在语义维度的重要性),V是n×n的正交矩阵(词语-潜在语义空间映射)。 奇异值σ₁, σ₂, ... 按降序排列,较大的σₖ对应更重要的语义维度。 降维选择k 选择保留前k个最大的奇异值(k < < min(m, n)),例如k=100。截取U的前k列(Uₖ)、Σ的前k个奇异值(Σₖ)、V的前k行(Vₖᵀ),得到近似矩阵Xₖ ≈ Uₖ Σₖ Vₖᵀ。 降维去除了噪声和次要变异,保留了核心语义结构。 文档相似度计算 降维后,文档在潜在空间中的表示为Uₖ Σₖ(每行对应一篇文档的k维向量)。 计算两篇文档的相似度:使用余弦相似度,即向量点积除以模长乘积:sim(dᵢ, dⱼ) = (dᵢ · dⱼ) / (||dᵢ|| × ||dⱼ||)。值越接近1,语义越相似。 示例 假设3篇文档:d1(猫 宠物)、d2(犬 动物)、d3(苹果 水果)。 TF-IDF矩阵X(行:文档,列:猫,犬,苹果,宠物,动物,水果): d1: [ 0.8, 0, 0, 0.6, 0, 0 ] d2: [ 0, 0.7, 0, 0, 0.5, 0 ] d3: [ 0, 0, 0.9, 0, 0, 0.7 ] SVD降维到k=2后,d1和d2在"生物"维度上接近,与d3在"食物"维度分离,相似度计算显示d1与d2更相似,尽管无共享词语。