基于潜在语义索引(LSI)的文档相似度计算算法
字数 1015 2025-11-04 20:47:20
基于潜在语义索引(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更相似,尽管无共享词语。