基于潜在语义索引(LSI)的文档相似度计算算法详解
字数 2346 2025-12-01 20:57:08

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

1. 问题描述
潜在语义索引(LSI)是一种用于信息检索和文本挖掘的算法,旨在解决传统向量空间模型(如TF-IDF)中的词汇鸿沟问题。词汇鸿沟指的是不同词语可能表达相同含义(同义词),或相同词语在不同语境下有不同含义(多义词),导致基于词项匹配的相似度计算不准确。LSI通过奇异值分解(SVD)对词-文档矩阵进行降维,捕获词项和文档背后的潜在语义主题,从而更鲁棒地计算文档相似度。

2. 核心思想
LSI假设词项和文档之间存在一层潜在的语义结构(即主题),该结构被词项的共现模式所隐藏。例如,若"汽车"和"车辆"经常出现在相似的文档中,LSI会将它们映射到同一个潜在语义空间,即使它们字面上不同。通过降维,LSI去除噪声和冗余,突出关键语义特征。

3. 算法步骤
步骤1:构建词-文档矩阵

  • 输入:文档集合 \(D = \{d_1, d_2, ..., d_m\}\),词表 \(V = \{w_1, w_2, ..., w_n\}\)
  • 构造一个 \(n \times m\) 矩阵 \(A\),其中元素 \(A_{ij}\) 表示词项 \(w_i\) 在文档 \(d_j\) 中的权重。常用TF-IDF作为权重:
    • TF(词频):词项在文档中的出现频率。
    • IDF(逆文档频率):衡量词项的普遍重要性,公式为 \(\log\frac{m}{\text{包含}w_i\text{的文档数}}\)
    • \(A_{ij} = \text{TF}(w_i, d_j) \times \text{IDF}(w_i)\)

步骤2:对矩阵A进行奇异值分解(SVD)

  • SVD将矩阵 \(A\) 分解为三个矩阵的乘积:

\[ A = U \Sigma V^T \]

  • \(U\):一个 \(n \times n\) 的正交矩阵,列向量为词项空间的奇异向量(左奇异向量),表示词项与潜在主题的关系。
  • \(\Sigma\):一个 \(n \times m\) 的对角矩阵,对角线元素为奇异值(按降序排列),表示潜在主题的重要性。
  • \(V^T\):一个 \(m \times m\) 的正交矩阵,行向量为文档空间的奇异向量(右奇异向量),表示文档与潜在主题的关系。

步骤3:选择降维维度k,进行截断SVD

  • 目标:保留主要语义,去除噪声。选择远小于原秩 \(r\)\(k\)(通常 \(k \in [100, 300]\))。
  • 截断矩阵:
    • \(U_k\):取 \(U\) 的前 \(k\) 列。
    • \(\Sigma_k\):取 \(\Sigma\) 的前 \(k\) 个奇异值构成 \(k \times k\) 对角矩阵。
    • \(V_k^T\):取 \(V^T\) 的前 \(k\) 行。
  • 得到降维后的近似矩阵:\(A_k = U_k \Sigma_k V_k^T\)

步骤4:将文档映射到潜在语义空间

  • 降维后,文档 \(d_j\) 在潜在空间中的表示是 \(V_k^T\) 的第 \(j\) 列向量,但需调整权重:
    • 文档坐标:\(D_{\text{LSI}} = \Sigma_k V_k^T\)。此时每个文档表示为 \(k\) 维向量。
  • 新文档处理:需先投影到潜在空间。若新文档向量为 \(d\)(基于原词袋权重),其投影为:

\[ d_{\text{LSI}} = d^T U_k \Sigma_k^{-1} \]

这里 \(\Sigma_k^{-1}\) 是奇异值的逆矩阵,用于归一化。

步骤5:计算文档相似度

  • \(k\) 维潜在空间中,文档相似度通过向量夹角余弦值计算:

\[ \text{sim}(d_i, d_j) = \frac{d_i \cdot d_j}{\|d_i\| \|d_j\|} \]

  • 值越接近1,文档语义越相似。

4. 举例说明
假设有3个文档:

  • \(d_1\):"我喜欢机器学习"
  • \(d_2\):"我爱人工智能"
  • \(d_3\):"今天天气很好"
  • 词表:{"我","喜欢","爱","机器","学习","人工","智能","今天","天气","很","好"}

步骤1:构建TF-IDF矩阵 \(A\)(略去具体数值计算)。
步骤2-3:对 \(A\) 进行SVD,选择 \(k=2\) 降维。潜在主题可能为"技术"(关联"机器","学习","人工","智能")和"日常"(关联"天气","好")。
步骤4:文档在2维空间的坐标可能为:

  • \(d_1\):(0.8, 0.1) # 靠近"技术"轴
  • \(d_2\):(0.7, 0.2) # 靠近"技术"轴
  • \(d_3\):(0.1, 0.9) # 靠近"日常"轴
    步骤5:计算 \(d_1\)\(d_2\) 的余弦相似度接近1(相似),而 \(d_1\)\(d_3\) 的相似度接近0(不相似)。

5. 优缺点分析

  • 优点:
    • 缓解词汇鸿沟问题,捕获语义关联。
    • 降维减少噪声,提升计算效率。
  • 缺点:
    • SVD计算复杂度高,适用于静态文档集。
    • 可解释性较差(潜在主题难以直接对应真实词汇)。

6. 扩展与应用
LSI是主题模型(如LDA)的前身,广泛应用于信息检索、文档聚类和分类。现代方法如BERT虽更强大,但LSI因简单高效仍在小规模场景中使用。

基于潜在语义索引(LSI)的文档相似度计算算法详解 1. 问题描述 潜在语义索引(LSI)是一种用于信息检索和文本挖掘的算法,旨在解决传统向量空间模型(如TF-IDF)中的词汇鸿沟问题。词汇鸿沟指的是不同词语可能表达相同含义(同义词),或相同词语在不同语境下有不同含义(多义词),导致基于词项匹配的相似度计算不准确。LSI通过奇异值分解(SVD)对词-文档矩阵进行降维,捕获词项和文档背后的潜在语义主题,从而更鲁棒地计算文档相似度。 2. 核心思想 LSI假设词项和文档之间存在一层潜在的语义结构(即主题),该结构被词项的共现模式所隐藏。例如,若"汽车"和"车辆"经常出现在相似的文档中,LSI会将它们映射到同一个潜在语义空间,即使它们字面上不同。通过降维,LSI去除噪声和冗余,突出关键语义特征。 3. 算法步骤 步骤1:构建词-文档矩阵 输入:文档集合 \( D = \{d_ 1, d_ 2, ..., d_ m\} \),词表 \( V = \{w_ 1, w_ 2, ..., w_ n\} \)。 构造一个 \( n \times m \) 矩阵 \( A \),其中元素 \( A_ {ij} \) 表示词项 \( w_ i \) 在文档 \( d_ j \) 中的权重。常用TF-IDF作为权重: TF(词频):词项在文档中的出现频率。 IDF(逆文档频率):衡量词项的普遍重要性,公式为 \( \log\frac{m}{\text{包含}w_ i\text{的文档数}} \)。 \( A_ {ij} = \text{TF}(w_ i, d_ j) \times \text{IDF}(w_ i) \)。 步骤2:对矩阵A进行奇异值分解(SVD) SVD将矩阵 \( A \) 分解为三个矩阵的乘积: \[ A = U \Sigma V^T \] \( U \):一个 \( n \times n \) 的正交矩阵,列向量为词项空间的奇异向量(左奇异向量),表示词项与潜在主题的关系。 \( \Sigma \):一个 \( n \times m \) 的对角矩阵,对角线元素为奇异值(按降序排列),表示潜在主题的重要性。 \( V^T \):一个 \( m \times m \) 的正交矩阵,行向量为文档空间的奇异向量(右奇异向量),表示文档与潜在主题的关系。 步骤3:选择降维维度k,进行截断SVD 目标:保留主要语义,去除噪声。选择远小于原秩 \( r \) 的 \( k \)(通常 \( k \in [ 100, 300 ] \))。 截断矩阵: \( U_ k \):取 \( U \) 的前 \( k \) 列。 \( \Sigma_ k \):取 \( \Sigma \) 的前 \( k \) 个奇异值构成 \( k \times k \) 对角矩阵。 \( V_ k^T \):取 \( V^T \) 的前 \( k \) 行。 得到降维后的近似矩阵:\( A_ k = U_ k \Sigma_ k V_ k^T \)。 步骤4:将文档映射到潜在语义空间 降维后,文档 \( d_ j \) 在潜在空间中的表示是 \( V_ k^T \) 的第 \( j \) 列向量,但需调整权重: 文档坐标:\( D_ {\text{LSI}} = \Sigma_ k V_ k^T \)。此时每个文档表示为 \( k \) 维向量。 新文档处理:需先投影到潜在空间。若新文档向量为 \( d \)(基于原词袋权重),其投影为: \[ d_ {\text{LSI}} = d^T U_ k \Sigma_ k^{-1} \] 这里 \( \Sigma_ k^{-1} \) 是奇异值的逆矩阵,用于归一化。 步骤5:计算文档相似度 在 \( k \) 维潜在空间中,文档相似度通过向量夹角余弦值计算: \[ \text{sim}(d_ i, d_ j) = \frac{d_ i \cdot d_ j}{\|d_ i\| \|d_ j\|} \] 值越接近1,文档语义越相似。 4. 举例说明 假设有3个文档: \( d_ 1 \):"我喜欢机器学习" \( d_ 2 \):"我爱人工智能" \( d_ 3 \):"今天天气很好" 词表:{"我","喜欢","爱","机器","学习","人工","智能","今天","天气","很","好"} 步骤1 :构建TF-IDF矩阵 \( A \)(略去具体数值计算)。 步骤2-3 :对 \( A \) 进行SVD,选择 \( k=2 \) 降维。潜在主题可能为"技术"(关联"机器","学习","人工","智能")和"日常"(关联"天气","好")。 步骤4 :文档在2维空间的坐标可能为: \( d_ 1 \):(0.8, 0.1) # 靠近"技术"轴 \( d_ 2 \):(0.7, 0.2) # 靠近"技术"轴 \( d_ 3 \):(0.1, 0.9) # 靠近"日常"轴 步骤5 :计算 \( d_ 1 \) 与 \( d_ 2 \) 的余弦相似度接近1(相似),而 \( d_ 1 \) 与 \( d_ 3 \) 的相似度接近0(不相似)。 5. 优缺点分析 优点: 缓解词汇鸿沟问题,捕获语义关联。 降维减少噪声,提升计算效率。 缺点: SVD计算复杂度高,适用于静态文档集。 可解释性较差(潜在主题难以直接对应真实词汇)。 6. 扩展与应用 LSI是主题模型(如LDA)的前身,广泛应用于信息检索、文档聚类和分类。现代方法如BERT虽更强大,但LSI因简单高效仍在小规模场景中使用。