gpt4 book ai didi

java - 在潜在语义索引方面需要帮助

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:08:01 25 4
gpt4 key购买 nike

对不起,如果我的问题听起来很愚蠢 :)你能给我推荐任何伪代码或在 java 中实现 LSI 的好算法吗?我不是数学专家。我试着阅读维基百科和其他网站上的一些文章LSI(潜在语义索引)他们充满了数学。我知道 LSI 充满了数学。但是如果我看到一些源代码或算法。我更懂事容易地。这就是我在这里问的原因,因为这里有很多 GURU!提前致谢

最佳答案

LSA 的想法基于一个假设:在同一文档中出现的两个词越多,它们就越相似。事实上,我们可以预期“编程”和“算法”这两个词在同一文档中的出现频率要远高于“编程”和“狗繁殖”。

同样适用于文档:两个文档的常用词/相似词越多,它们本身就越相似。因此,您可以通过单词的频率来表达文档的相似性,反之亦然。

知道了这一点,我们就可以构造一个共现矩阵,其中列名代表文档,行名代表单词,每个cells[i][j]代表频率文档 documents[j] 中的单词 words[i]。频率可以通过多种方式计算,IIRC,原始 LSA 使用 tf-idf指数。

有了这样的矩阵,你可以通过比较相应的列来找到两个文档的相似性。如何比较它们?同样,有几种方法。最流行的是余弦距离。你一定记得在学校数学中,矩阵可以被视为一堆 vector ,所以每一列只是某个多维空间中的一个 vector 。这就是为什么这个模型被称为“vector 空间模型”的原因。更多关于 VSM 和余弦距离的信息 here .

但是这样的矩阵有一个问题:它很大。非常非常大。使用它的计算成本太高,因此我们必须以某种方式减少。 LSA 使用 SVD保留最“重要” vector 的技术。还原矩阵准备好使用后。

所以,LSA 的算法看起来像这样:

  1. 从他们那里收集所有文件所有独特的词
  2. 提取频率信息并构建共现矩阵
  3. 使用 SVD 减少矩阵。

如果您要自己编写 LSA 库,开始的好点是 Lucene搜索引擎,这将使第 1 步和第 2 步变得更加容易,以及一些具有 SVD 功能的高维矩阵的实现,如 Parallel ColtUJMP .

还要注意从 LSA 发展而来的其他技术,例如 Random Indexing . RI 使用相同的想法并显示大致相同的结果,但不使用全矩阵阶段并且是完全增量的,这使得它的计算效率更高。

关于java - 在潜在语义索引方面需要帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2017732/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com