Ale*_*par 6 nlp stream node.js cosine-similarity term-document-matrix
我收集Text文档(在Node.js中),其中一个文档i
表示为单词列表.考虑到新文档是作为一种文档流出现的,计算这些文档之间相似性的有效方法是什么?
我目前在每个文档中的单词的标准化频率上使用cos相似性.由于可扩展性问题,我不使用TF-IDF(术语频率,反向文档频率),因为我收到的文档越来越多.
我的第一个版本是当前可用的文件开始,计算一个大项-文档矩阵A
,再计算S = A^T x A
,这样S(i, j)
是后(通过归一化后norm(doc(i))
和norm(doc(j))
)文档之间的余弦相似性i
和j
词频率分别为doc(i)
和doc(j)
.
收到新文件后我该怎么办doc(k)
?好吧,我必须计算这个文档与之前所有文档的相似性,这不需要构建一个完整的矩阵.我可以把doc(k) dot doc(j)
所有以前的内在产品j
,结果S(k, j)
,这是伟大的.
S
在Node.js中计算真的很长.实际上太长了!所以我决定创建一个C++模块,它可以更快地完成整个过程.它确实如此!但我不能等待它,我应该能够使用中间结果.而我所说的"不等待它"就是两者
一个.等待计算完成,但也
b.等待矩阵A
建立(这是一个很大的矩阵).
计算new S(k, j)
可以利用文档比所有给定单词(我用来构建整个矩阵A
)的单词少得多的事实.因此,在Node.js中执行它看起来更快,避免了大量额外资源来访问数据.
但有没有更好的方法呢?
注意:我开始计算的原因S
是我可以轻松地A
在Node.js中构建我可以访问所有数据的地方,然后在C++中进行矩阵乘法并将其返回到Node.js中,这会加速整个事情的发展. .但是现在计算S
变得不切实际,它看起来毫无用处.
注2:是的,我不必计算整体S
,我可以计算右上角的元素(或左下角的元素),但这不是问题.时间计算问题不是那个顺序.
归档时间: |
|
查看次数: |
1166 次 |
最近记录: |