Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python “错误”;“值太多,无法解包”;当尝试使用LDA模型在Gensim中获得相似性时_Python_Gensim_Similarity_Recommendation Engine_Lda - Fatal编程技术网

Python “错误”;“值太多,无法解包”;当尝试使用LDA模型在Gensim中获得相似性时

Python “错误”;“值太多,无法解包”;当尝试使用LDA模型在Gensim中获得相似性时,python,gensim,similarity,recommendation-engine,lda,Python,Gensim,Similarity,Recommendation Engine,Lda,基本上,我使用的是anaconda环境python 3.7、gensim 3.8.0。我将我的数据作为一个数据帧,在测试和训练集中分开,它们都具有以下结构: X_测试和Xtrain数据帧格式: id alltext 1710 3264537 [exmodelo, karen, mcdougal, asegura, mantuvo, ... 8211 3272079 [grupo

基本上,我使用的是anaconda环境python 3.7、gensim 3.8.0。我将我的数据作为一个数据帧,在测试和训练集中分开,它们都具有以下结构:

X_测试和Xtrain数据帧格式:

        id                                            alltext  
1710  3264537  [exmodelo, karen, mcdougal, asegura, mantuvo, ...   
8211  3272079  [grupo, socialista, pionero, supone, apoyar, n...   
1885  3263933  [parte, entrenador, zaragoza, javier, aguirre,...   
2481  3263744  [fans, hielo, fuego, saga, literaria, dio, pie...   
2975  3265302  [actividad, busca, repetir, tres, ediciones, a... 
已经过预处理

这是我用来创建模型的代码

id2word = corpora.Dictionary(X_train["alltext"])   
texts = X_train["alltext"]
corpus = [id2word.doc2bow(text) for text in texts]

lda_model = gensim.models.ldamodel.LdaModel(corpus=corpus,
                                       id2word=id2word,
                                       num_topics=20,
                                       random_state=100, 
                                       update_every=1, 
                                       chunksize=400, 
                                       passes=10, 
                                       alpha='auto',
                                       per_word_topics=True)enter code here
在这里之前,一切都很顺利。我可以有效地使用

pprint(lda_model.print_topics())
doc_lda = lda_model[corpus]
获取我的主题

当我试图比较新文档和语料库之间的相似性时,问题来了。这是我正在使用的代码

newddoc = X_test["alltext"][2730] #I get a particular instance of the test_set
new_doc_freq_vector = id2word.doc2bow(newddoc)  #vectorize its list of words
model_vec= lda_model[new_doc_freq_vector] #run the trained model on it
index = similarities.MatrixSimilarity(lda_model[corpus]) # error
sims = index[model_vec] #error
在最后两行中,我得到了以下错误:

-------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-110-352248c464f8> in <module>
      4 
      5 #index = Similarity('model/indexes/similarity_index_01', lda_model[corpus], num_features=len(id2word)) #the first argument, the place where the
----> 6 index = similarities.MatrixSimilarity(lda_model[corpus]) # funciona si en vez de lda_model[corpus] usamos solo corpus
      7 index = similarities.MatrixSimilarity(model_vec)
      8 #sims = index[model_vec] #funciona si usamos index[new_doc_freq_vector] en vez de model_vec

~\AppData\Local\Continuum\anaconda3\envs\lda_henneo_01\lib\site-packages\gensim\similarities\docsim.py in __init__(self, corpus, num_best, dtype, num_features, chunksize, corpus_len)
    776                 "scanning corpus to determine the number of features (consider setting `num_features` explicitly)"
    777             )
--> 778             num_features = 1 + utils.get_max_id(corpus)
    779 
    780         self.num_features = num_features

~\AppData\Local\Continuum\anaconda3\envs\lda_henneo_01\lib\site-packages\gensim\utils.py in get_max_id(corpus)
    734     for document in corpus:
    735         if document:
--> 736             maxid = max(maxid, max(fieldid for fieldid, _ in document))
    737     return maxid
    738 

~\AppData\Local\Continuum\anaconda3\envs\lda_henneo_01\lib\site-packages\gensim\utils.py in <genexpr>(.0)
    734     for document in corpus:
    735         if document:
--> 736             maxid = max(maxid, max(fieldid for fieldid, _ in document))
    737     return maxid
    738 

ValueError: too many values to unpack (expected 2
不知道这意味着什么

从这里开始:

矩阵相似性
采用两个参数:

# num_features (int) – Size of the dictionary (number of features).
MatrixSimilarity(common_corpus, num_features=len(common_dictionary))

希望这有帮助。祝您好运。

如果您将lda更改为
lda\u model=gensim.models.ldamodel.ldamodel(语料库=矢量化的语料库,id2word=id2word,num\u topics=20,random\u state=100,update\u every=1,chunksize=400,passes=10,alpha='auto'


相似性起作用,原因是最初发布的per_word_topic=true参数,导致
model_vec=lda_model[new_doc_freq_vector]
的输出是文档中每个主题的每个单词的分布(每个单词对应每个主题的概率)如果参数为“True”,则格式上的差异会导致相似度函数给出错误,而不是一个列表,其中该文档可能是每个主题的一部分。如果您将其取下,则效果良好。此处的更多详细信息

是的,在阅读文档后,您不能从一开始就将矩阵相似性与LDA输出一起使用,因为输出不是具有相似系数的矩阵(就像lsi函数一样,这就是为什么在文档中总是建议lsi用于该函数的原因)。为了与LDA相似,我需要首先将输出转换为保留lsi输出的内容,例如,然后使用MatrixSimilarity()函数。这里详细介绍了这一点的理论依据
# num_features (int) – Size of the dictionary (number of features).
MatrixSimilarity(common_corpus, num_features=len(common_dictionary))