Gensim02

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())

  

步骤二:主题向量的变换

对文本向量的变换是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")
tfidf = models.TfidfModel.load("./model.tfidf")

Gensim内置了多种主题模型的向量变换,包括LDA,LSI,RP,HDP等。这些模型通常以bow向量或tfidf向量的语料为输入,生成相应的主题向量。所有的模型都支持流式计算。关于Gensim模型更多的介绍,可以参考这里:API Reference

posted @ 2022-03-27 08:00  青竹之下  阅读(20)  评论(0编辑  收藏  举报