python利用余弦相似度聚类_如何使用python高效地利用余弦相似度检索顶级Ksimilar文档?...

面对100000个文档,通过余弦相似度找出每个文档的前k个最相似文档。目前使用TF矩阵和1-pairwise_distances计算导致耗时过长。考虑优化方案包括:特征选择、预聚类、避免全对计算,以及探索Python GPU编程或并行计算。更新指出,将清理后的字典添加到DataFrame中是瓶颈。
摘要由CSDN通过智能技术生成

我正在处理十万(100000)个文档(平均文档长度约为500个术语)。对于每个文档,我希望通过余弦相似度得到前k(例如k=5)个相似文档。那么如何通过Python来高效地实现这一点呢。在

以下是我所做的:对每个文档,进行文本分割,删除停止字,计算词频(tf)

所以我们得到了tf矩阵,大约100000个文档*600000个术语

do 1-pairwise_distances(tf_矩阵,metric=“余弦”)

对于每个文档,获取前k个相似文档。在

我用i5-2.5GHz运行我的代码,12小时过去了,但它仍在工作。所以我想知道如何优化我的代码或过程。在

我的想法是:对于每个文档,进行功能选择,只保留tf>1的术语

首先进行聚类,然后计算每个聚类内的余弦相似度

既然我只需要top k个相似文档,我是否需要计算所有成对余弦相似度?在

PythonGPU编程还是并行编程?在

那么,你有什么好主意吗?在

非常感谢。在

我知道有一个similar question,但那不是我想要的。在

更新1

感谢@orange,在分析之后,我发现第2步是瓶颈!下面是示例代码:def construct_dt_matrix():

dt_matrix = pd.DataFrame(columns=['docid'])

docid = 0

for f in files:

# text segmentation for f

# remove stop words

# word count store in cleaned_dict = {'word': tf}

dt_matrix.loc[docid] = [0] * dt_matrix.shape[1] # add one row, init all 0

dt_matrix.set_value(docid, 'docid', docid)

for key, value in cleaned_dict.items():

if key not in dt_matrix.columns.values:

dt_matrix[key] = 0 # add one column, init all 0

dt_matrix.set_value(docid, key, value) # bottleneck

docid += 1

所以,瓶颈是向pandas添加新的行和列。有什么想法吗?在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>