基于大约5,000到100,000个字嵌入(GloVe,300维)的子样本,我需要构建一个邻接矩阵,即1和0的矩阵,表示两个单词之间的欧几里德(或余弦)距离是小于x
。
目前,我正在使用scipy.spatial.distance.pdist
:
distances = pdist(common_model, 'euclidean')
adjacency = (distances <= 0.4)
adjacency = csr_matrix(squareform(adjacency), dtype=np.uint8)
随着词汇量的增加,我的记忆力会很快填满,而pdist
会因MemoryError
而失败(当common_model
的形状为(91938, 300)
且包含float64
时)。
手动迭代模型并直接创建邻接,而中间没有距离矩阵将是一种方式,但这非常慢。
是否有另一种方法以时间和内存最优的方式构造邻接矩阵?