Gensim介绍
Gensim是一个免费的 Python库
潜在语义分析: LSI,LSA,LDA
向量空间算法: Word2Vec,Doc2Vec,FastText,TF-IDF
安装
pip install –upgrade gensim
主要流程
语料库
1.分词
2.清洗
3.向量
4.保存语料库
转换模型
1.加载语料库
2.定义模型
3.转换
4.保存模型
相似性查询
1.加载语料库
2.加载模型
3.转换
4.查询
5.保存索引文档
语料库
# 提前准备的语料文本转换为向量
texts = [[]]
dictionary = corpora.Dictionary(texts)
# 保存到磁盘中
dictionary.save(‘/tmp/deerwester.dict’)
# 新的一段文本根据语料库转换为向量
new_doc = “Human computer interaction”
new_vec = dictionary.doc2bow(new_doc.lower().split())
# 将向量保存磁盘
corpora.MmCorpus.serialize(‘/tmp/deerwester.mm’, new_vec)
corpus = [dictionary.doc2bow(text) for text in texts]
语料库流
>>> class MyCorpus(object):
>>> def __iter__(self):
>>> for line in open(‘mycorpus.txt’):
>>> # assume there’s one document per line, tokens separated by whitespace
>>> yield dictionary.doc2bow(line.lower().split())
语料库格式
corpora.MmCorpus.serialize(‘/tmp/deerwester.mm’, new_vec)
corpora.SvmLightCorpus.serialize(‘/tmp/corpus.svmlight’, corpus)
corpora.BleiCorpus.serialize(‘/tmp/corpus.lda-c’, corpus)
corpora.LowCorpus.serialize(‘/tmp/corpus.low’, corpus)
加载语料库
corpus = corpora.MmCorpus(‘/tmp/corpus.mm’)
转换
dictionary = corpora.Dictionary.load(‘/tmp/deerwester.dict’)
corpus = corpora.MmCorpus(‘/tmp/deerwester.mm’)
doc_bow = [[]]
tfidf = models.TfidfModel(corpus)
print(tfidf[doc_bow])
lsi = models.LsiModel(corpus_tfidf, id2word=dictionary, num_topics=2)
corpus_lsi = lsi[corpus_tfidf]
# 保存模型文件
lsi.save(‘/tmp/model.lsi’)
# 加载模型文件
lsi = models.LsiModel.load(‘/tmp/model.lsi’)
可用的转换模型
# 术语频率*反向文档频率,Tf-Idf
model = models.TfidfModel(corpus, normalize=True)
# 潜在语义索引,LSI(或有时LSA)
model = models.LsiModel(tfidf_corpus, id2word=dictionary, num_topics=300)
# 随机投影,RP
model = models.RpModel(tfidf_corpus, num_topics=500)
# Latent Dirichlet Allocation,LDA
model = models.LdaModel(corpus, id2word=dictionary, num_topics=100)
# 分层Dirichlet过程,HDP
model = models.HdpModel(corpus, id2word=dictionary)
相似性查询
index = similarities.MatrixSimilarity(lsi[corpus])
index.save(‘/tmp/deerwester.index’)
# similarities.Similarity
# similarities.MatrixSimilarity
# similarities.SparseMatrixSimilarity
index = similarities.MatrixSimilarity.load(‘/tmp/deerwester.index’)
print(list(enumerate(index[vec_lsi])))
发表回复