NLP神器Gensim库(一):入门操作

本文详细介绍Gensim工具包的使用,涵盖语料库预训练、主题向量变换及文档相似度计算。通过实例展示如何将文本转换为词袋模型,构建TF-IDF和LSI模型,以及实现信息检索。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Gensim是一款开源的第三方Python工具包,用于从原始的非结构化的文本中,无监督地学习到文本隐层的主题向量表达。
它支持包括TF-IDF,LSA,LDA,和word2vec在内的多种主题模型算法,
支持流式训练,并提供了诸如相似度计算,信息检索等一些常用任务的API接口


一:语料库的预训练

(将文档中原始的字符文本转换成Gensim模型所能理解的稀疏向量的过程。)

由于语言和应用的多样性,我们需要先对原始的文本进行分词、去除停用词等操作,得到每一篇文档的特征列表。例如,在词袋模型中,文档的特征就是其包含的word:

texts = [['human', 'interface', 'computer'],
['survey', 'user', 'computer', 'system', 'response', 'time'],
['eps', 'user', 'interface', 'system'],
['system', 'human', 'system', 'eps'],
['user', 'response', 'time'],
['trees'],
['graph', 'trees'],
['graph', 'minors', 'trees'],
['graph', 'minors', 'survey']]

texts的每一行代表一篇文档,调用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)]

出于内存优化的考虑,Gensim支持文档的流式处理。我们需要做的,只是将上面的列表封装成一个Python迭代器;每一次迭代都返回一个稀疏向量即可。

class MyCorpus(object):
    def iter(self):
        for line in open('mycorpus.txt'):
        yield dictionary.doc2bow(line.lower().split())

二:主题向量的变换

通过挖掘语料中隐藏的语义结构特征,我们最终可以变换出一个简洁高效的文本向量。

from gensim import models
tfidf = models.TfidfModel(iter) # iter是一个返回bow向量的迭代器

这两行代码将完成对iter中出现的每一个特征的IDF值的统计工作。

例如:

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模型更多的介绍,参考官网文档:API Reference(https://radimrehurek.com/gensim/apiref.html


三:文档相似度的计算:构造LSI模型并将待检索的query和文本转化为LSI主题向量

以信息检索为例。对于一篇待检索的query,我们的目标是从文本集合中检索出主题相似度最高的文档。

首先,我们需要将待检索的query和文本放在同一个向量空间里进行表达(以LSI向量空间为例):

转换之前的corpus和query均是BOW向量:

# 定义lsi空间向量模型
lsi_model = models.LsiModel(corpus, id2word=dictionary, num_topics=2)
# 将语料文本corpus变换为lsi主题向量
documents = lsi_model[corpus]
# 将待索引文本query变换为lsi主题向量
query_vec = lsi_model[query]

下一步用待检索的文档向量初始化一个相似度计算的对象:

index = similarities.MatrixSimilarity(documents)
## 待检索的目标文档过多,使用similarities.MatrixSimilarity类往往会带来内存不够用的问题。
## 此时,可以改用similarities.Similarity类
index = similarities.Similarity(documents)

我们也可以通过save()和load()方法持久化这个相似度矩阵:

index.save('/tmp/test.index')
index = similarities.MatrixSimilarity.load('/tmp/test.index')

本文参考https://www.jianshu.com/p/9ac0075cc4c0

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值