基于潜在语义索引(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因简单高效仍在小规模场景中使用。