Gensim⼊门教程
What is Gensim?
是⼀款开源的第三⽅Python⼯具包,⽤于从原始的⾮结构化的⽂本中,⽆监督地学习到⽂本隐层的主题向量表达。它⽀持包括TF-
IDF,LSA,LDA,和word2vec在内的多种主题模型算法,⽀持流式训练,并提供了诸如相似度计算,信息检索等⼀些常⽤任务的API接⼝。
基本概念
语料(Corpus):⼀组原始⽂本的集合,⽤于⽆监督地训练⽂本主题的隐层结构。语料中不需要⼈⼯标注的附加信息。在Gensim 中,Corpus通常是⼀个可迭代的对象(⽐如列表)。每⼀次迭代返回⼀个可⽤于表达⽂本对象的稀疏向量。
向量(Vector):由⼀组⽂本特征构成的列表。是⼀段⽂本在Gensim中的内部表达。
稀疏向量(Sparse Vector):通常,我们可以略去向量中多余的0元素。此时,向量中的每⼀个元素是⼀个(key, value)的tuple。
servicedesk是什么意思模型(Model):是⼀个抽象的术语。定义了两个向量空间的变换(即从⽂本的⼀种向量表达变换为另⼀种向量表达)。
jquery插件的使用Step 1. 训练语料的预处理
训练语料的预处理指的是将⽂档中原始的字符⽂本转换成Gensim模型所能理解的稀疏向量的过程。
通常,我们要处理的原⽣语料是⼀堆⽂档的集合,每⼀篇⽂档⼜是⼀些原⽣字符的集合。在交给Gensim的模型训练之前,我们需要将这些原⽣字符解析成Gensim能处理的稀疏向量的格式。
由于语⾔和应⽤的多样性,Gensim没有对预处理的接⼝做出任何强制性的限定。通常,我们需要先对原始的⽂本进⾏分词、去除停⽤词等操作,得到每⼀篇⽂档的特征列表。例如,在词袋模型中,⽂档的特征就是其包含的word:
texts = [['human', 'interface', 'computer'],
['survey', 'user', 'computer', 'system', 'response', 'time'],
['eps', 'user', 'interface', 'system'],
['system', 'human', 'system', 'eps'],
['user', 'response', 'time'],python入门教程非常详细word
['trees'],
['graph', 'trees'],
['graph', 'minors', 'trees'],
['graph', 'minors', 'survey']]
其中,corpus的每⼀个元素对应⼀篇⽂档。
接下来,我们可以调⽤Gensim提供的API建⽴语料特征(此处即是word)的索引字典,并将⽂本特征的原始表达转化成词袋模型对应的稀疏向量的表达。依然以词袋模型为例:
from gensim import corpora
dictionary = corpora.Dictionary(texts)
corpus = [dictionary.doc2bow(text) for text in texts]
print corpus[0] # [(0, 1), (1, 1), (2, 1)]
到这⾥,训练语料的预处理⼯作就完成了。我们得到了语料中每⼀篇⽂档对应的稀疏向量(这⾥是bow向量);向量的每⼀个元素代表了⼀个word在这篇⽂档中出现的次数。值得注意的是,虽然词袋模型是很多主题模型的基本假设,这⾥介绍的doc2bow函数并不是将⽂本转化成稀疏向量的唯⼀途径。在下⼀⼩节⾥我们将介绍更多的向量变换函数。
最后,出于内存优化的考虑,Gensim⽀持⽂档的流式处理。我们需要做的,只是将上⾯的列表封装成⼀个Python迭代器;每⼀次迭代都返回⼀个稀疏向量即可。
class MyCorpus(object):
def __iter__(self):
for line in open(''):
# assume there's one document per line, tokens separated by whitespace
yield dictionary.doc2bow(line.lower().split())
Step 2. 主题向量的变换
对⽂本向量的变换是Gensim的核⼼。通过挖掘语料中隐藏的语义结构特征,我们最终可以变换出⼀个简洁⾼效的⽂本向量。
在Gensim中,每⼀个向量变换的操作都对应着⼀个主题模型,例如上⼀⼩节提到的对应着词袋模型的doc2bow变换。每⼀个模型⼜都是⼀个标准的Python对象。下⾯以TF-IDF模型为例,介绍Gensim模型的⼀般使⽤⽅法。
⾸先是模型对象的初始化。通常,Gensim模型都接受⼀段训练语料(注意在Gensim中,语料对应着⼀个稀疏向量的迭代器)作为初始化的参数。显然,越复杂的模型需要配置的参数越多。
from gensim import models
tfidf = models.TfidfModel(corpus)
其中,corpus是⼀个返回bow向量的迭代器。这两⾏代码将完成对corpus中出现的每⼀个特征的IDF值的统计⼯作。
接下来,我们可以调⽤这个模型将任意⼀段语料(依然是bow向量的迭代器)转化成TFIDF向量(的迭代器)。需要注意的是,这⾥的bow 向量必须与训练语料的bow向量共享同⼀个特征字典(即共享同⼀个向量空间)。
doc_bow = [(0, 1), (1, 1)]
print tfidf[doc_bow] # [(0, 0.70710678), (1, 0.70710678)]
注意,同样是出于内存的考虑,model[corpus]⽅法返回的是⼀个迭代器。如果要多次访问model[corpus]的返回结果,可以先讲结果向量序列化到磁盘上。
我们也可以将训练好的模型持久化到磁盘上,以便下⼀次使⽤:
tfidf.save("./model.tfidf")
电脑整人vbs代码大全
tfidf = models.TfidfModel.load("./model.tfidf")
Gensim内置了多种主题模型的向量变换,包括LDA,LSI,RP,HDP等。这些模型通常以bow向量或tfidf向量的语料为输⼊,⽣成相应的主题向量。所有的模型都⽀持流式计算。关于Gensim模型更多的介绍,可以参考这⾥:
Step 3. ⽂档相似度的计算
在得到每⼀篇⽂档对应的主题向量后,我们就可以计算⽂档之间的相似度,进⽽完成如⽂本聚类、信息检索之类的任务。在Gensim中,也提供了这⼀类任务的API接⼝。
以信息检索为例。对于⼀篇待检索的query,我们的⽬标是从⽂本集合中检索出主题相似度最⾼的⽂档。
⾸先,我们需要将待检索的query和⽂本放在同⼀个向量空间⾥进⾏表达(以LSI向量空间为例):
# 构造LSI模型并将待检索的query和⽂本转化为LSI主题向量
# 转换之前的corpus和query均是BOW向量
lsi_model = models.LsiModel(corpus, id2word=dictionary, num_topics=2)
documents = lsi_model[corpus]
query_vec = lsi_model[query]
接下来,我们⽤待检索的⽂档向量初始化⼀个相似度计算的对象:
index = similarities.MatrixSimilarity(documents)
我们也可以通过save()和load()⽅法持久化这个相似度矩阵:
excel2016没有合并加载功能
index.save('/tmp/deerwester.index')
index = similarities.MatrixSimilarity.load('/tmp/deerwester.index')
注意,如果待检索的⽬标⽂档过多,使⽤similarities.MatrixSimilarity类往往会带来内存不够⽤的问题。此时,可以改⽤similarities.Similarity类。⼆者的接⼝基本保持⼀致。
imgplay中文是什么
最后,我们借助index对象计算任意⼀段query和所有⽂档的(余弦)相似度:
sims = index[query_vec] # return: an iterator of tuple (idx, sim)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。