基于潜在语义索引(Latent Semantic Indexing, LSI)的文档相似度计算算法详解
字数 1655 2025-11-10 21:39:39
基于潜在语义索引(Latent Semantic Indexing, LSI)的文档相似度计算算法详解
题目描述
潜在语义索引(LSI)是一种用于信息检索和自然语言处理的经典算法,旨在解决传统词袋模型中的词汇稀疏性和同义词/多义词问题。LSI通过奇异值分解(SVD)对词-文档矩阵进行降维,捕捉词语背后的潜在语义结构,从而更准确地计算文档之间的相似度。例如,即使两篇文档没有共享任何词语,但若它们语义相关,LSI仍能识别其相似性。
解题过程循序渐进讲解
-
问题背景与目标
- 传统方法(如TF-IDF)直接基于词语匹配计算文档相似度,但面临两个问题:
- 同义词问题:例如“电脑”和“计算机”虽语义相同,但被视作不同特征。
- 多义词问题:例如“苹果”可能指水果或公司,导致相似度计算偏差。
- LSI的目标:通过数学建模发现词语背后的潜在语义维度,提升相似度计算的鲁棒性。
- 传统方法(如TF-IDF)直接基于词语匹配计算文档相似度,但面临两个问题:
-
构建词-文档矩阵
- 第一步:将文档集合表示为矩阵 \(A\),其中每行对应一个词,每列对应一篇文档。
- 矩阵元素通常采用TF-IDF值:
- TF(词频)反映词语在文档中的重要性。
- IDF(逆文档频率)降低常见词的权重。
- 示例:假设有3篇文档(D1, D2, D3)和4个词(W1, W2, W3, W4),矩阵 \(A\) 可能为:
D1 D2 D3 W1 0.5 0.0 0.8 W2 0.3 0.6 0.0 W3 0.0 0.7 0.2 W4 0.1 0.0 0.0
-
奇异值分解(SVD)降维
- 对矩阵 \(A\)(大小为 \(m \times n\),m为词数,n为文档数)进行SVD分解:
\[ A = U \Sigma V^T \]
- $ U $:大小为 $ m \times m $ 的左奇异向量矩阵,表示词语与潜在语义的关系。
- $ \Sigma $:大小为 $ m \times n $ 的对角矩阵,对角线元素为奇异值(按降序排列),代表潜在语义维度的重要性。
- $ V^T $:大小为 $ n \times n $ 的右奇异向量矩阵,表示文档与潜在语义的关系。
- 降维:保留前 \(k\) 个最大的奇异值(\(k \ll m, n\)),截取 \(U_k\)、\(\Sigma_k\)、\(V_k^T\),得到近似矩阵:
\[ A_k = U_k \Sigma_k V_k^T \]
- 意义:去除噪声和次要变异,保留最显著的语义结构。
- 文档在潜在空间中的表示
- 降维后,文档的潜在语义表示由 \(V_k^T\) 的列向量给出。更常用的是将文档投影到潜在空间:
\[ \text{Doc}_{LSI} = \Sigma_k V_k^T \]
- 此时,每篇文档表示为 \(k\) 维向量,原始的高维稀疏向量被压缩为低维稠密向量。
- 同理,词语的表示可通过 \(U_k \Sigma_k\) 获得。
- 计算文档相似度
- 在潜在空间中,两篇文档的相似度通过其向量夹角的余弦值计算:
\[ \text{Similarity}(D_i, D_j) = \cos(\theta) = \frac{D_i \cdot D_j}{\|D_i\| \|D_j\|} \]
- 由于向量维度低且包含语义信息,即使文档无共享词,只要其潜在语义相关,相似度仍会较高。
-
示例说明
- 假设两篇文档:
- D1:“我喜欢机器学习。”
- D2:“我热爱人工智能。”
- 传统方法:由于无共享词,相似度为0。
- LSI:通过SVD发现“机器学习”和“人工智能”在潜在空间中接近,从而计算出的相似度大于0。
- 假设两篇文档:
-
算法特点与局限性
- 优点:
- 缓解词汇稀疏性,提升鲁棒性。
- 适用于文档聚类、检索等任务。
- 局限性:
- SVD计算复杂度高,难以扩展至海量数据。
- 可解释性较差(潜在维度无明确语义标签)。
- 需预先指定降维维度 \(k\),选择不当会影响效果。
- 优点:
总结
LSI通过线性代数方法将文档映射到潜在语义空间,是传统NLP中解决语义鸿沟的重要工具。尽管当前已被BERT等深度模型取代,但其核心思想(降维捕捉语义)仍影响后续技术如LDA、词嵌入等。