首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gensim.Similarity添加文档或现场培训

Gensim.Similarity添加文档或现场培训
EN

Stack Overflow用户
提问于 2018-01-23 22:19:37
回答 1查看 790关注 0票数 4

关于这个项目的一些背景。我有带有标识符和文本的副本,例如{name: "sports-football", text: "Content related to football sports"}

我需要在这个语料库中为给定的文本输入找到正确的匹配。然而,我能够在某种程度上实现使用Gensim。与LDA和LSI模型相似。

如何用新文档更新Genism.Similarity索引。这里的想法是在现场继续训练模特。

这是我遵循的步骤。

QueryText =“瓜迪奥拉将莱昂内尔·梅西转移到了9号位置,这样他就不用再深入,我认为阿圭罗经常会回到更深的位置。”

注意:有些代码只是外行。

索引是使用

代码语言:javascript
复制
`similarities.Similarity(indexpath, model,topics)`
  1. 创建一本字典 dictionary = Dictionary(QueryText )
  2. 创建一个corpus = Corpus(QueryText, dictionary)语料库
  3. 创建LDA模型 LDAModel = ldaModel(corpus,dictionary)

更新现有字典、模型和索引

更新现有字典

代码语言:javascript
复制
existing_dictionary.add_document(dictionary)

更新现有的LDA模型

代码语言:javascript
复制
existing_lda_model.update(corpus)

更新现有的相似指数

代码语言:javascript
复制
existing_index.add_dcoument(LDAModel[corpus])

除了以下警告之外,更新似乎是有效的。

代码语言:javascript
复制
gensim\models\ldamodel.py:535: RuntimeWarning: overflow encountered in exp2 perwordbound, np.exp2(-perwordbound), len(chunk), corpus_words

让我们运行查询文本的相似性

代码语言:javascript
复制
vec_bow = dictionary.doc2bow(QueryText) 
vec_model = existing_lda_model[vec_bow] 
sims = existing_index[vec_model]

但是,由于以下错误,它失败了。

代码语言:javascript
复制
Similarity index with 723 documents in 1 shards (stored under \Files\models\lda_model)
Similarity index with 725 documents in 0 shards (stored under \Files\models\lda_model)
\lib\site-packages\gensim\models\ldamodel.py:535: RuntimeWarning: overflow encountered in exp2
  perwordbound, np.exp2(-perwordbound), len(chunk), corpus_words
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-3-8fe711724367> in <module>()
     45 trigram = Trigram.apply_trigram_model(queryText, bigram, trigram)
     46 vec_bow = dictionry.doc2bow(trigram)
---> 47 vec_model =  lda_model[vec_bow]
     48 print(vec_model)
     49 

~\Anaconda3\envs\lf\lib\site-packages\gensim\models\ldamodel.py in __getitem__(self, bow, eps)
   1103             `(topic_id, topic_probability)` 2-tuples.
   1104         """
-> 1105         return self.get_document_topics(bow, eps, self.minimum_phi_value, self.per_word_topics)
   1106 
   1107     def save(self, fname, ignore=('state', 'dispatcher'), separately=None, *args, **kwargs):

~\Anaconda3\envs\lf\lib\site-packages\gensim\models\ldamodel.py in get_document_topics(self, bow, minimum_probability, minimum_phi_value, per_word_topics)
    944             return self._apply(corpus, **kwargs)
    945 
--> 946         gamma, phis = self.inference([bow], collect_sstats=per_word_topics)
    947         topic_dist = gamma[0] / sum(gamma[0])  # normalize distribution
    948 

~\Anaconda3\envs\lf\lib\site-packages\gensim\models\ldamodel.py in inference(self, chunk, collect_sstats)
    442             Elogthetad = Elogtheta[d, :]
    443             expElogthetad = expElogtheta[d, :]
--> 444             expElogbetad = self.expElogbeta[:, ids]
    445 
    446             # The optimal phi_{dwk} is proportional to expElogthetad_k * expElogbetad_w.

IndexError: index 718 is out of bounds for axis 1 with size 713

我真的很感激,帮了我这个忙。期待着精彩的回复。

EN

回答 1

Stack Overflow用户

发布于 2018-01-23 22:29:09

后面的错误(稀疏矩阵中的AssertionError: mismatch between supplied and computed number of non-zeros)很可能来自警告- perwordbound溢出所提出的问题,使用其未定义的值计算的矩阵将导致更新失败。

我建议用更大的批(而不是一个查询)更新模型。可能会有不成比例的单词数量,你试图用相对较少的单词更新的模型中的单词数。对于浮点数,这可能会导致细微误差

同样,请尝试用与模型源数据成比例的批次更新模型(例如,其大小的1/10和1/20)。

基于这条线的修订

Melissa Roemmele写道: FYI,我也得到了这个错误,当我试图创建一个LSI索引的语料库上的一个包-词语料库,而没有首先将它转换成tf-以色列国防军。我可以在单词袋上建立LSI模型,但是为它建立索引给了我错误。

在将QueryText传递给模型之前,您可能需要先尝试tf-国防军。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48411780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档