计算文本之间相似性的度量:内存错误

时间:2016-09-22 10:35:29

标签: python-2.7 text distance cosine-similarity

目前我正在处理文本。我的主要目标是计算3万个文本之间的相似度。我正在关注this tutorial

创建文档字词矩阵:

In [1]: import numpy as np  # a conventional alias
In [2]: from sklearn.feature_extraction.text import CountVectorizer
In [3]: filenames = ['data/austen-brontë/Austen_Emma.txt',
...:              'data/austen-brontë/Austen_Pride.txt',
...:              'data/austen-brontë/Austen_Sense.txt',
...:              'data/austen-brontë/CBronte_Jane.txt',
...:              'data/austen-brontë/CBronte_Professor.txt',
...:              'data/austen-brontë/CBronte_Villette.txt']
...: 

In [4]: vectorizer = CountVectorizer(input='filename')


In [5]: dtm = vectorizer.fit_transform(filenames)  # a sparse matrix

In [6]: vocab = vectorizer.get_feature_names()  # a list



In [7]: type(dtm)
Out[7]: scipy.sparse.csr.csr_matrix

In [8]: dtm = dtm.toarray()  # convert to a regular array

In [9]: vocab = np.array(vocab)

比较文字 我们想要使用考虑到小说长度的距离度量,我们可以计算余弦相似度。

In [24]: from sklearn.metrics.pairwise import cosine_similarity

In [25]: dist = 1 - cosine_similarity(dtm)

In [26]: np.round(dist, 2)
Out[26]: 
array([[-0.  ,  0.02,  0.03,  0.05,  0.06,  0.05],
       [ 0.02,  0.  ,  0.02,  0.05,  0.04,  0.04],
       [ 0.03,  0.02,  0.  ,  0.06,  0.05,  0.05],
       [ 0.05,  0.05,  0.06,  0.  ,  0.02,  0.01],
       [ 0.06,  0.04,  0.05,  0.02, -0.  ,  0.01],
       [ 0.05,  0.04,  0.05,  0.01,  0.01, -0.  ]])

最终结果:

enter image description here

如上所述,我的目标是计算3万个文本之间的相似度。在实现上述代码时,它花费了太多时间,最终给了我一个内存错误。 我的问题是---有没有更好的解决方案来计算大量文本之间的余弦相似度?你如何应对时间和内存错误问题?

0 个答案:

没有答案