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

问题描述 投票:0回答:1

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

X_test和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

不知道如何解决这个问题,我已经尝试调试了3个小时。 ,我相信我会遵循许多其他人使用的相同代码,以获得相似性。

我尝试解决的问题:

1)使用

Similarity('model/indexes/similarity_index_01', lda_model[corpus], num_features=len(id2word))

但是它没有用。获得了相同的错误代码。

2)如果我将lda_model [corpus]替换为语料库,并将index [model_vec]替换为index [new_doc_freq_vector],则相似之处。MatrixSimilarity()有效。但是我相信它不会给出正确的结果,因为它里面没有模型信息。它起作用的事实告诉我,它与数据类型(?)有关,如果我打印lda_model [corpus]我得到

<gensim.interfaces.TransformedCorpus object at 0x00000221ECA8E148>

不知道这是什么意思。

python gensim similarity recommendation-engine lda
1个回答
1
投票

从这里:https://radimrehurek.com/gensim/similarities/docsim.html#gensim.similarities.docsim.MatrixSimilarity

MatrixSimilarity接受2个参数:

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

希望这会有所帮助。祝你好运。

© www.soinside.com 2019 - 2024. All rights reserved.