Python/gensim主题模型库

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ae5555/article/details/49488287

每个py文件称之为模块,每个具有init.py文件的目录被称为包。只要模块或者包所在的目录在sys.path中,就可以使用import 模块或import 包来使用。

  1. 如果要使用的模块和当前文件在同一目录,只要import相应的文件名就可以。
  2. 如果使用的模块不在同一目录下,使用sys.path.append方法将模块所在目录加入到搜素目录中。然后进行import即可。这种方法是暂时的。
  3. 使用PYTHONPATH变量,不同的路径之间用分号隔开。设置的路径会自动加入到sys.path中,加入模块时使用import即可。

查看python已经安装的模块
help(‘modules’)

安装模块
1.直接添加到路径下。

import sys
sys.path.append(“path”)

2.单文件模块
直接把文件拷贝到$python_dir/lib。

gensim库

主题模型是对文字隐含主题进行建模的方法。主题表现为词语的条件概率分布,与主题关系越密切的词语,条件概率就越大。
主题模型
对于每一篇文档,左边的矩阵C是已知的,右边两个矩阵未知,主题模型通过大量已知的”词语-文档”矩阵C,通过训练,推导出右边的两个矩阵。主题模型训练的方法有两种,pLSA和LDA。
使用模型将文档vector转换成另一个vector,这样可以修正vector的含义,减少噪音,期望达到更好的效果。
from gensim import corpora, models, similarities
//从texts中得到distinct
dictionary=corpora.Dictionary(texts)
dictionary.save(‘data.dict’)
//将得到的主题word赋予相应的数字id
dictionary.token2id
//加载dict数据文件
dictionary=corpora.Dictionary.load(‘data.dict’)

//将一个文档转换为vector
new_doc=”Human computer interaction”
//计算文档中主题词的个数,(distinctid,appears)
new_vec=dictionary.doc2bow(new_doc.lower().split())
corpus=[dictionary.doc2bow(text) for text in texts]
corpora.MmCorpus.serialize(‘vector.mm’,corpus)
//加载mm文件
corpus=corpora.MmCorpus(‘vector.mm’)

//使用TF-IDF模型
tfidf=models.TfidfModel(corpus)
//使用tfidf模型,将词袋计数vector转换为TF-IDF权重vector
vec=[(0,1),(4,1)]
print(tfidf[vec])
//转换整个corpus
corpus_tfidf=tfidf[corpus]
//计算给定文档和corpus中文档的相似度,num_features指定得到的distinct个数
index=similarities.SparseMatrixSimilarity(tfidf[corpus],num_features=12)
//vec是给定的文档的vector
sims=index[tfidf[vec]]
print(list(enumerate(sims)))

Topics&Transformations
LSI(LSA)模型

模型可以将词袋模型或TF-IDF模型向量空间转换为低纬度(Topic)的空间。LSI模型训练过程中可以增加语料,增加训练语料时可以继续使用模型,不影响模型的训练。
corpus_tfidf=tfidf[corpus]
//两个Topic
lsi=models.LsiModel(corpus_tfidf,id2word=dictionary,num_topics=2)
//transform to lsi
corpus_lsi=lsi[corpus_tfidf]
lsi.print_topics(2)
//查看corpus中的文档分类
for doc in corpus_lsi:
print(doc)
//增加训练文档
lsi.add_documents(another_tfidf_corpus)
lsi.save(‘model.lsi’)
lsi=models.LsiModel.load(‘model.lsi’)
//对生成的向量空间建立索引
index=similarities.MatrixSimilarity(lsi[corpus])
similarities.MatrixSimilarity只有在所有的向量都存在内存中时才能够运行。similarities.Similarity可以将索引分成多个文件存储在磁盘,不占用大量的内存。
index.save(‘xxx.index’)
index=similarities.MatrixSimilarity.load(‘xxx.index’)
//比较新文档和索引文档的相似度,返回的余弦相似度范围(-1,1)
sims=index[vec_lsi]
print(list(enumerate(sims)))

Random Projections,RP模型
RP模型减少向量空间维数,和TF-IDF的文档距离类似。RP模型推荐的维度为(100,1000),依赖于数据集。
model=rpmodel.RpModel(tfidf_corpus,num_topics=200)

LDA(latent dirchlet allocation)模型

LDA模型将词袋模型计数向量空间转换为低纬度的主题空间。LDA以PLSA为基础,加上贝叶斯先验的一种非监督机器学习算法。LDA的主题就是单词的概率分布(每个主题由多个词的概率表示),LDA假设每个词都由一个潜在隐藏的主题中抽取出来,每个文档由多个主题混合而成。
LDA算法的输入:
分词后的文档集合,通常一篇文章一行;主题数K和参数αβ

gamma函数
gamma函数就是阶乘的函数形式。
gamma
因此,gamma函数有性质:
性质1
性质2

beta分布
随机变量X服从参数为αβ的beta分布通常写作:beta
beta
B函数和Gamma函数有关系:
b

model=ldamodel.LdaModel(bow_corpus,id2word=dictionary,num_topics=100)

Hierarchical Dirichlet Process,HDP
HDP模型是一个无参数的贝叶斯方法,可能会有部分主题丢失。
model=hdpmodel.HdpModel(bow_corpus,id2word=dictionary)

没有更多推荐了,返回首页