手把手教你学Word2Vec系列二之Topics and Transformations

Python下的Word2Vec的使用需要安装gensim,安装教程: gensim官网安装教程

本人水平有限,还是建议看官方教程: gensim官网使用教程
使用日志:

import logging

logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)

Transformation interface(转换接口)

前一篇教程,我们创建了用向量流表示文档的语料,接下来,我们来使用这个语料做一些更深入的事情。

import os
from gensim import corpora, models, similarities

'''加载之前生成的字典和语料'''
if (os.path.exists("/tmp/deerwester.dict")):
   dictionary = corpora.Dictionary.load('/tmp/deerwester.dict')
   corpus = corpora.MmCorpus('/tmp/deerwester.mm')
   print("Used files generated from first tutorial")
else:
   print("Please run first tutorial to generate data set")

如果这里输出的是“Please run first tutorial to generate data set”,请参照第一篇教程 手把手教你学Word2Vec系列一之Corpora and Vector Spaces获得生成的文件。

这一节我们要做的就是将上篇教程得到的向量转换为另一种向量。

创建transformation并转换为新的向量

'''第一步: 初始化一个model, 这里使用的是tf-idf模型'''
tfidf = models.TfidfModel(corpus)
'''假设, doc_bow 是一个新文档的向量表示'''
doc_bow = [(0, 1), (1, 1)]
'''第二步: 使用这个model来将 doc_bow 转换为另外一个向量'''
print(tfidf[doc_bow])
'''将整个语料都转换为新的向量'''
corpus_tfidf = tfidf[corpus]
for doc in corpus_tfidf:
    print(doc)

# Transformations 也是可以被串行话的,即可以在一个转换的基础上再进行一次转换。下列例子就是在tf-idf转换上再次转换为LSI
'''初始化一个LSI transformation, 设置topic数为2'''
lsi = models.LsiModel(corpus_tfidf, id2word=dictionary, num_topics=2)
'''在原始语料基础上再包装一层转换: bow->tfidf->fold-in-lsi'''
corpus_lsi = lsi[corpus_tfidf]
'''上述利用LSI将tf-idf语料转换为一个2维向量, 通过下列写入日志的方式可以查看这个二维向量'''
lsi.print_topics(2)
'''这里会执行bow->tfidf transformation和tfidf->lsi transformations'''
for doc in corpus_lsi:
    print(doc)
'''将lsi模型持久化到文件'''
lsi.save('model.lsi')
lsi = models.LsiModel.load('model.lsi')

这里需要注意的是,model[corpus]仅仅是在老的语料文档流中包装了一层,结果是在文档迭代中计算出来的,在调用corpus_transformed = model[corpus]方法时不能将整个语料转换,因为这违背了gensim内存独立的特性,如果你要转换多次,并且每次转换都很耗时,建议将结果语料存入磁盘,参考serialize the resulting corpus to disk first,然后再进行下一步转换。

可用的其它转换(transformations)

下面列出一些比较常见的transformation,至于每个模型的原理、目的等详细内容,请自行百度。

'''可用的其他转换'''
# Term Frequency * Inverse Document Frequency, Tf-Idf
model = models.TfidfModel(corpus, normalize=True)
# Latent Semantic Indexing, LSI (or sometimes LSA)
model = models.LsiModel(tfidf_corpus, id2word=dictionary, num_topics=300)
# Random Projections, RP
model = models.RpModel(tfidf_corpus, num_topics=500)
# Latent Dirichlet Allocation, LDA
model = models.LdaModel(corpus, id2word=dictionary, num_topics=100)
# Hierarchical Dirichlet Process, HDP
model = models.HdpModel(corpus, id2word=dictionary)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值