【发布时间】:2021-04-02 14:32:07
【问题描述】:
我正在做一个 NLP 项目,我必须比较许多句子之间的相似性 例如。来自这个数据框:
我尝试的第一件事是将数据框与其自身进行连接以获得以下格式并逐行比较:
对于大中型/大型数据集,我很快就会耗尽内存, 例如对于 10k 行加入,我将获得 100MM 行,我无法放入 ram
我目前的方法是遍历数据框:
final = pd.DataFrame()
### for each row
for i in range(len(df_sample)):
### select the corresponding vector to compare with
v = df_sample[df_sample.index.isin([i])]["use_vector"].values
### compare all cases agains the selected vector
df_sample.apply(lambda x: cosine_similarity_numba(x.use_vector,v[0]) ,axis=1)
### kept the cases with a similarity over a given th, in this case 0.6
temp = df_sample[df_sample.apply(lambda x: cosine_similarity_numba(x.use_vector,v[0]) ,axis=1) > 0.6]
### filter out the base case
temp = temp[~temp.index.isin([i])]
temp["original_question"] = copy.copy(df_sample[df_sample.index.isin([i])]["questions"].values[0])
### append the result
final = pd.concat([final,temp])
但是这种方法也不是很快。 如何提高此流程的性能?
【问题讨论】:
标签: python pandas numpy nlp linear-algebra