基于潜在语义索引(Latent Semantic Indexing, LSI)的文档相似度计算算法详解
字数 1923 2025-11-22 21:25:56
基于潜在语义索引(Latent Semantic Indexing, LSI)的文档相似度计算算法详解
1. 问题描述
潜在语义索引(LSI)是一种用于文档相似度计算和语义检索的自然语言处理算法。它的核心思想是通过矩阵分解技术(如奇异值分解,SVD)将高维的词-文档矩阵映射到低维的潜在语义空间,从而解决传统词袋模型(Bag-of-Words)中同义词和多义词带来的语义稀疏问题。例如,用户搜索“汽车”时,LSI能够同时返回包含“车辆”“轿车”等同义词的文档,即使这些文档并未直接包含“汽车”一词。
2. 算法步骤详解
步骤1:构建词-文档矩阵(Term-Document Matrix)
- 输入:文档集合 \(D = \{d_1, d_2, ..., d_m\}\),词汇表 \(V = \{w_1, w_2, ..., w_n\}\)。
- 构造一个 \(n \times m\) 矩阵 \(X\),其中元素 \(X_{ij}\) 表示词 \(w_i\) 在文档 \(d_j\) 中的权重。权重通常采用 TF-IDF 计算:
- 词频(TF):\(\text{tf}_{ij} = \frac{\text{词 } w_i \text{ 在文档 } d_j \text{ 中的出现次数}}{\text{文档 } d_j \text{ 的总词数}}\)
- 逆文档频率(IDF):\(\text{idf}_i = \log \frac{m}{\text{包含 } w_i \text{ 的文档数}}\)
- TF-IDF:\(X_{ij} = \text{tf}_{ij} \times \text{idf}_i\)
- 示例:假设有3个文档:
- \(d_1\):“猫 吃 鱼”
- \(d_2\):“狗 吃 肉”
- \(d_3\):“猫 和 狗 是 宠物”
则词-文档矩阵 \(X\) 的维度为 \(6 \times 3\)(6个词,3个文档),矩阵元素为对应词的TF-IDF值。
步骤2:对矩阵进行奇异值分解(SVD)
- 对矩阵 \(X\) 进行SVD分解:
\[ X = U \Sigma V^T \]
- \(U\):\(n \times n\) 的左奇异矩阵,列向量表示词在潜在空间中的坐标。
- \(\Sigma\):\(n \times m\) 的对角矩阵,对角线元素为奇异值,按降序排列,表示潜在语义维度的重要性。
- \(V^T\):\(m \times m\) 的右奇异矩阵,行向量表示文档在潜在空间中的坐标。
- 降维处理:保留前 \(k\) 个最大的奇异值(\(k \ll n, m\)),截取 \(U_k\)(前 \(k\) 列)、\(\Sigma_k\)(前 \(k \times k\) 子矩阵)、\(V_k^T\)(前 \(k\) 行)。此时近似矩阵为:
\[ X_k = U_k \Sigma_k V_k^T \]
降维后的矩阵 \(X_k\) 去除了噪声和次要语义关联,保留了核心语义信息。
步骤3:文档相似度计算
- 降维后,文档 \(d_i\) 和 \(d_j\) 在潜在空间中的向量分别为 \(V_k[i]\) 和 \(V_k[j]\)(即 \(V_k^T\) 的第 \(i\) 列和第 \(j\) 列)。
- 计算余弦相似度:
\[ \text{sim}(d_i, d_j) = \frac{V_k[i] \cdot V_k[j]}{\|V_k[i]\| \cdot \|V_k[j]\|} \]
- 关键优势:即使两个文档没有共享任何共同词,只要它们的潜在语义向量方向接近,仍可判定为相似。
例如,文档A包含“猫”“宠物”,文档B包含“犬”“动物”,尽管用词不同,但潜在语义均指向“宠物”,因此相似度较高。
3. 算法应用与局限性
- 应用场景:
- 文档检索(如搜索引擎)
- 文档聚类(如新闻分类)
- 推荐系统(基于内容相似度)
- 局限性:
- SVD计算复杂度高,难以适用于超大规模动态语料。
- 需预先设定降维维度 \(k\),选择不当会影响效果。
- 无法捕捉词序信息(与词袋模型共有限制)。
4. 总结
LSI通过矩阵分解将文档映射到低维语义空间,显著提升了语义检索的鲁棒性。尽管当前部分应用被神经网络模型(如BERT)取代,但其核心思想(潜在语义建模)仍影响深远,是理解现代语义表示模型的重要基础。