我希望使用他们的主题表示来计算用户和文本文档之间的相似性。即每个文档和用户都由一个主题向量(例如神经科学,技术等)以及该主题与用户/文档的相关程度来表示。
我的目标是计算这些向量之间的相似性,以便找到类似的用户,文章和推荐文章。
我曾尝试使用Pearson Correlation但是一旦它达到~40k篇文章并且向量的长度大约为10k,它最终会占用太多的内存和时间。
我正在使用numpy。
你能想象一个更好的方法吗?或者它是不可避免的(在一台机器上)?
谢谢
答案 0 :(得分:3)
我建议您只使用gensim而不是滚动自己。
答案 1 :(得分:2)
不太明白为什么你最终只需要计算O(n^2)
项对的相关性就会占用太多内存。正如维基百科文章指出的那样,计算Pearson Correlation,
也就是说,要获得corr(X,Y)
,您一次只需要两个向量。如果您一次处理一对数据,内存应该不是问题。
如果要加载所有向量并进行矩阵分解,那就是另一个故事。
对于计算时间,我完全理解,因为您需要对O(n^2)
项对进行比较。
众所周知,Gensim能够在合理的时间范围内在单个CPU /台式计算机上运行适度的内存要求(<1 Gb)。使用MacBook Pro,Intel Core i7 2.3GHz,16GB DDR3 RAM,检查this关于他们在8.2GB数据集上所做的实验。我认为这是一个比你更大的数据集。
如果你有一个更大的数据集,你可能想尝试gensim的分布式版本甚至map / reduce。
另一种方法是尝试locality sensitive hashing。
答案 2 :(得分:0)
我的技巧是使用搜索引擎,例如ElasticSearch,它运行得很好,通过这种方式,我们统一了所有推荐系统的api。详情如下:
所有准备工作如上所述完成。如果您想获得类似文章或其他文章的列表,您只需执行搜索:
我们发现这种方式非常方便。