gpt4 book ai didi

python - 使用 Gensim 对每个文档中的特征进行评分。也是一个 Python 内存问题

转载 作者:太空宇宙 更新时间:2023-11-03 11:30:01 25 4
gpt4 key购买 nike

我在一个包含 50000 个文档的语料库以及一个包含大约 4000 个特征的字典上使用 GENSIM。我还准备了一个 LSI 模型。

现在我想为每个添加的文档找到匹配度最高的特征。为了找到特定文档中的最佳特征,我正在为所有文档的每个特征运行 gensim 的相似性模块。这为我们稍后要使用的每个功能提供了一个分数。但您可以想象,这是一个代价高昂的过程,因为我们必须迭代 50000 多个索引并对每个索引运行 4000 次相似性迭代。

我需要一种更好的方法来执行此操作,因为我在大约 1000 次迭代时耗尽了系统上的 8 GB 内存。实际上没有理由让内存继续增加,因为我只是在迭代期间重新分配它。令人惊讶的是,内存仅在大约 200 次迭代后才开始上升。

  1. 为什么会出现内存问题?如何解决?
  2. 是否有更好的方法来查找特定文档(而非主题)中得分最高的特征?

这是内存不足的代码片段:

dictionary = corpora.Dictionary.load('features-dict.dict')
corpus = corpora.MmCorpus('corpus.mm')
lsi = models.LsiModel.load('model.lsi')
corpus_lsi = lsi[corpus]
index = similarities.MatrixSimilarity(list(corpus_lsi))
newDict = dict()

for feature in dictionary.token2id.keys():
vec_bow = dictionary.doc2bow([feature])
vec_lsi = lsi[vec_bow]
sims = index[vec_lsi]
li = sorted(enumerate(sims * 100), key=lambda item: -item[1])

for data in li:
dict[data[0]] = (feature,data[1]) # Store feature and score for each document


# Do something with the dict created above

编辑:

使用内存分析器解决了内存问题。该循环中还有其他因素导致它急剧上升。

让我详细解释一下目的。想象一下我们正在处理各种食谱(每个食谱都是文档)并且我们字典中的每个项目都是一种成分。在下面找到六个这样的食谱。

语料库 = [[橄榄油、番茄、Brocolli、牛至]、[大蒜、橄榄油、面包、奶酪、牛至]、[鳄梨、 bean 类、奶酪、酸橙]、[Jalepeneo、酸橙、番茄、 Jade 米饼、酸奶油]、[辣椒酱、醋、蘑菇、米饭]、[酱油、面条、西兰花、姜、醋]]

有成千上万种这样的食谱。我想要实现的是为每种成分分配 0 到 100 之间的权重(其中较高权重的成分是最重要或最独特的)。实现这一目标的最佳方法是什么。

最佳答案

让我们分解一下:

  1. 除非我误解了你的目的,否则你可以简单地使用 lsi.projection.u 中的左奇异向量来获得你的权重:

    # create #features x #corpus 2D matrix of weights
    doc_feature_matrix = numpy.dot(lsi.projection.u, index.index.T)

    此矩阵的行应该是您要查找的“文档权重”,一行代表一项功能。

  2. list(lsi[corpus]) 中调用 list() 会使您的代码非常低效。它基本上将整个文档主题矩阵序列化到 RAM 中。删除 list() 并直接使用流版本,它的内存效率更高:index = MatrixSimilarity(lsi[corpus], num_features=lsi.num_topics).

  3. LSI 通常比正则化输入效果更好。考虑通过例如转换普通词袋向量(=整数) TF-IDFlog entropy在将其传递给 LSI 之前进行转换。

关于python - 使用 Gensim 对每个文档中的特征进行评分。也是一个 Python 内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23270933/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com