gpt4 book ai didi

node.js - 如何有效地计算文档流中文档之间的相似度

转载 作者:搜寻专家 更新时间:2023-10-31 22:35:51 24 4
gpt4 key购买 nike

我收集文本文档(在 Node.js 中),其中一个文档 i 表示为单词列表。考虑到新文档作为一种文档流出现,计算这些文档之间相似性的有效方法是什么?

我目前对每个文档中单词的归一化频率使用 cos-similarity。由于可扩展性问题,我不使用 TF-IDF(词频,逆向文档频率),因为我得到的文档越来越多。

最初

我的第一个版本是从当前可用的文档开始,计算一个大的 Term-Document 矩阵 A,然后计算 S = A^T x A 这样S(i, j) 是(通过 norm(doc(i))norm(doc(j)) 归一化后)词频分别为doc(i)doc(j)的文档ij之间的cos相似度.

对于新文件

当我得到一个新文档 doc(k) 时我该怎么做?好吧,我必须计算这个文档与之前所有文档的相似度,这不需要构建一个完整的矩阵。我可以对所有先前的 jdoc(k) dot doc(j) 的内积,结果是 S(k, j) ,太棒了。

烦恼

  1. 在 Node.js 中计算 S 真的很长。事实上太长了!所以我决定创建一个 C++ 模块,它可以更快地完成整个过程。确实如此!但我等不及了,我应该可以使用中间结果。而我所说的“不等待”的意思是两者都是

    一个。等待计算完成,还要
    b.等待构建矩阵 A(它很大)。

  2. 计算新的 S(k, j) 可以利用这样一个事实,即文档中的单词比所有给定单词的集合少得多(我用它来构建整个矩阵A)。因此,在 Node.js 中执行此操作看起来更快,避免了访问数据所占用的大量额外资源。

但是有更好的方法吗?

注意:我开始计算 S 的原因是我可以在 Node.js 中轻松构建 A,在那里我可以访问所有数据,然后在 C++ 中进行矩阵乘法,然后在 Node.js 中将其取回,这大大加快了整个过程。但现在计算 S 变得不切实际,它看起来毫无用处。

注意 2:是的,我不必计算整个 S,我可以只计算右上角的元素(或左下角的元素) ,但这不是问题。时间计算问题不是这个顺序。

最佳答案

如果今天必须解决它,只需使用来自 fasttext 或 word2vec 的预训练词向量

关于node.js - 如何有效地计算文档流中文档之间的相似度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13986518/

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