基于潜在语义索引(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)取代,但其核心思想(潜在语义建模)仍影响深远,是理解现代语义表示模型的重要基础。

基于潜在语义索引(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)取代,但其核心思想(潜在语义建模)仍影响深远,是理解现代语义表示模型的重要基础。