提问人:la_lo_ca 提问时间:8/7/2023 更新时间:8/7/2023 访问量:25
将 ppmi 矩阵传递给 LsiModel 时除以 0 错误
division by 0 error when passing my ppmi matrix to LsiModels
问:
我使用 gensim 的 pmi_scorer 和一个巨大的语料库构建了一个 ppmi 矩阵。每一行都作为单个文档读入和处理。为了避免内存过载,我使用 dtype=int16 创建所有矩阵。
我使用 sparse2corpus 将我的 ppmi 矩阵输入到 LsiModel 中。当我使用 LsiModel 运行 svd 时,出现以下错误。
lsimodel.py:102:RuntimeWarning:除法
rel_spectrum遇到无效值 = np.abs(1.0 - np.cumsum(s / np.sum(s)))
错误消息出现在较大的模型上,但不会出现在(系数 1000)较小的模型上,所以我认为这与语料库大小无关。
我的代码如下。首先,我通过计算共现矩阵来创建一个共现矩阵,然后将其转换为稀疏矩阵。 然后,我使用 gensim (p)pmi 评分器计算稀疏共生矩阵的 PPMI 分数:
ppmi_matrix = sp.lil_matrix(cooc_matrix.shape, dtype=np.int16)
for i, j, v in zip(cooc_matrix.row, cooc_matrix.col, cooc_matrix.data):
worda_count = vocab_df.iloc[i, 0]
wordb_count = vocab_df.iloc[j, 0]
ppmi_score = ppmi_scorer(worda_count, wordb_count, v, len_vocab, min_count, corpus_word_count)
ppmi_matrix[i, j] = ppmi_score
ppmi_matrix[j, i] = ppmi_score
del cooc_matrix
# Convert the sparse matrix to a Gensim-compatible corpus
corpus_sparse = Sparse2Corpus(ppmi_matrix)
del ppmi_matrix
# FINAL STEP: SVD
id2word = dict(enumerate(vocab_df.index.tolist()))
model = LsiModel(corpus_sparse, id2word=id2word, num_topics=vector_size)
del corpus_sparse
尝试使用其他软件包/方法执行 svd 是否有意义? 如果数据集太小,似乎 LsiModel 有时会引发此错误(但我得到了较大语料库而不是较小语料库的错误)。也许有人遇到过类似的问题,并找到了解决这个问题的方法?
答: 暂无答案
评论