【发布时间】:2018-01-23 14:47:23
【问题描述】:
我有一个类包装了计算 LSI 相似度所需的各种对象:
class SimilarityFiles:
def __init__(self, file_name, tokenized_corpus, stoplist=None):
if stoplist is None:
self.filtered_corpus = tokenized_corpus
else:
self.filtered_corpus = []
for convo in tokenized_corpus:
self.filtered_corpus.append([token for token in convo if token not in stoplist])
self.dictionary = corpora.Dictionary(self.filtered_corpus)
self.corpus = [self.dictionary.doc2bow(text) for text in self.filtered_corpus]
self.lsi = models.LsiModel(self.corpus, id2word=self.dictionary, num_topics=100)
self.index = similarities.MatrixSimilarity(self.lsi[self.corpus])
我现在想向类添加一个函数,以允许将文档添加到语料库并相应地更新模型。
我找到了dictionary.add_documents 和model.add_documents,但有两件事我不清楚:
- 最初创建 LSI 模型时,函数接收的参数之一是
id2word=dictionary。更新模型时,如何告诉它使用更新后的字典?它实际上是不必要的,还是会有所作为? - 如何更新索引?从documentation 看来,如果我使用
Similarity类而不是MatrixSimilarity类,我可以将文档添加到索引中,但我看不到MatrixSimilarity的这种功能。如果我理解正确,如果我的输入语料库包含密集向量,MatrixSimilarity会更好(确实如此,因为我使用的是 LSI 模型)。我是否必须将其更改为Similarity才能更新索引?或者,相反,创建这个索引的复杂性是什么?如果它无关紧要,我是否应该使用更新的语料库创建一个新索引,如下所示:
代码:
self.dictionary.add_documents(new_docs) # new_docs is already after filtering stop words
new_corpus = [self.dictionary.doc2bow(text) for text in new_docs]
self.lsi.add_documents(new_corpus)
self.index = similarities.MatrixSimilarity(self.lsi[self.corpus])
谢谢。 :)
【问题讨论】:
标签: python-3.x gensim lsa