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