我开始处理稀疏矩阵,所以我对这个主题并不是很精通。我的问题是,我有一个来自单词列表的简单共现矩阵,只是一个二维共现矩阵,逐字计算一个单词在同一上下文中出现的次数。由于语料库不是那么大,因此矩阵非常稀疏。我想将其转换为稀疏矩阵以便能够更好地处理它,最终进行一些矩阵乘法。这是我到目前为止所做的(只有第一部分,剩下的只是输出格式和清理数据):
def matrix(from_corpus):
d = defaultdict(lambda : defaultdict(int))
heads = set()
trans = set()
for text in corpus:
d[text[0]][text[1]] += 1
heads.add(text[0])
trans.add(text[1])
return d,heads,trans
我的想法是创建一个新函数:
def matrix_to_sparse(d):
A = sparse.lil_matrix(d)
这有意义吗?然而,这不起作用,不知何故我不知道如何获得稀疏矩阵。我应该更好地使用 numpy 数组吗?最好的方法是什么?我想比较处理矩阵的多种方法。
如果有人能给我指明方向,那就太好了。
以下是构建文档术语矩阵的方法A
来自 SciPy 的 COO 格式的一组文档,这是易用性和效率之间的良好权衡(*):
vocabulary = {} # map terms to column indices
data = [] # values (maybe weights)
row = [] # row (document) indices
col = [] # column (term) indices
for i, doc in enumerate(documents):
for term in doc:
# get column index, adding the term to the vocabulary if needed
j = vocabulary.setdefault(term, len(vocabulary))
data.append(1) # uniform weights
row.append(i)
col.append(j)
A = scipy.sparse.coo_matrix((data, (row, col)))
现在,要获得共现矩阵:
A.T * A
(忽略对角线,它包含术语与其自身的共现,即平方频率)。
或者,使用一些可以为您完成此类操作的包,例如Gensim http://radimrehurek.com/gensim/ or scikit学习 http://scikit-learn.org。 (我是这两个项目的贡献者,所以这可能不是公正的建议。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)