如何有效地计算/估计非spars矩阵中数十亿对的余弦相似性?

8ljdwjyq  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(391)

假设我有1000万个条目,每个条目都有一个100维的实数向量(实际上它们是word2vec嵌入)。对于每个项目,我想得到(大约)前200个最相似的项目,使用余弦相似性。我目前在hadoop(hive)中作为udf函数的余弦相似性标准实现需要大约1s来计算1个项目的余弦相似性,而其他项目只有1000万个。这使得运行整个矩阵是不可行的。我的下一步是在spark上运行它,进行更多的并行化,但它仍然不能完全解决问题。
我知道有一些方法可以减少spars矩阵的计算。但我的矩阵不是稀疏的。
如何有效地为每个项目获取最相似的项目?是否有一个余弦相似性的近似值可以更有效地计算?

rkttyhzu

rkttyhzu1#

可以压缩向量以简化分数计算。通过新的距离方法,如汉明距离。
有一个关键字叫做 vector quantization 矢量压缩算法有很多种。
这里是一个例子,使其可与余弦相似性。
https://github.com/tdebatty/java-lsh/blob/master/src/main/java/info/debatty/java/lsh/superbit.java#l208

相关问题