Doc2Vec简单例子
来源:互联网 发布:删了windows.old就崩溃 编辑:程序博客网 时间:2024/05/19 16:32
Doc2Vec基于Word2Vec,作用是把一个段落,或者一个句子,一篇文档转化为一个向量,下面是简单的例子:
#!/usr/bin/env python# -*- coding: utf-8 -*-# created by fhqplzj on 2017/06/30 上午11:34"""Doc2Vec简单例子"""import osimport randomimport timefrom collections import Counterimport gensimimport gensim.models.doc2vecimport gensim.utilsimport smart_openfrom six.moves import xrangetest_data_dir = os.path.join(gensim.__path__[0], 'test', 'test_data')lee_train_file = os.path.join(test_data_dir, 'lee_background.cor')lee_test_file = os.path.join(test_data_dir, 'lee.cor')def read_corpus(fname, tokens_only=False): with smart_open.smart_open(fname, encoding='iso-8859-1') as f: for i, line in enumerate(f): if tokens_only: yield gensim.utils.simple_preprocess(line) else: yield gensim.models.doc2vec.TaggedDocument(gensim.utils.simple_preprocess(line), [i])# 带标签的训练集train_corpus = list(read_corpus(lee_train_file))# 不带标签的测试集test_corpus = list(read_corpus(lee_test_file, tokens_only=True))model = gensim.models.doc2vec.Doc2Vec(size=100, min_count=2, iter=55)model.build_vocab(train_corpus)# 使用BLAS,训练时间3秒内,不使用BLAS,训练时间2分钟内。start_time = time.time()model.train(train_corpus, total_examples=model.corpus_count, epochs=model.iter)elasped_time = time.time() - start_timeprint elasped_time# 预测print model.infer_vector('only you can prevent forrest fires'.split())# ranks存储的是与文档最相似的文档的id号,包括自身# second_ranks存储的是除文档自身外,与之最相似的文档(默认相似度排名第二的文档),包括文档号和相似度ranks, second_ranks = [], []for doc_id in xrange(len(train_corpus)): inferred_vector = model.infer_vector(train_corpus[doc_id].words) sims = model.docvecs.most_similar([inferred_vector], topn=len(model.docvecs)) # 最相似的文档的序号 rank = [docid for docid, sim in sims].index(doc_id) ranks.append(rank) # 第二相似的文档的信息 second_ranks.append(sims[1])# 打印出统计信息,0代表自己与自己最相似(正确的case),1代表自己与其他的最相似(错误的case)print Counter(ranks)# 从训练集中随机选择一篇文档doc_id = random.randint(0, len(train_corpus))# 打印出文档内容print u'Document ({}): «{}»\n'.format(doc_id, ' '.join(train_corpus[doc_id].words))# Doc2Vec模型参数print u'SIMILAR/DISSIMILAR DOCS PER MODEL %s:\n' % model# 文档向量化inferred_vector = model.infer_vector(train_corpus[doc_id].words)# 对于所有文档,按照相似度从大到小排序sims = model.docvecs.most_similar([inferred_vector], topn=len(model.docvecs))# 打印出最相似的、中间的、最不相似的文档for label, index in [('MOST', 0), ('MEDIAN', len(sims) // 2), ('LEAST', len(sims) - 1)]: print u'%s %s: «%s»\n' % (label, sims[index], ' '.join(train_corpus[sims[index][0]].words))# 从训练集中随机选择一篇文档doc_id = random.randint(0, len(train_corpus))# 打印出文档内容print u'Train Document ({}): «{}»\n'.format(doc_id, ' '.join(train_corpus[doc_id].words))# 除文档自身外,与之最相似的文档的参数,包括文档号和相似度sim_id = second_ranks[doc_id]# 打印出除文档自身外,最相似的文档的内容print u'Similar Document {}: «{}»\n'.format(sim_id, ' '.join(train_corpus[sim_id[0]].words))# 从测试集中随机选择一篇文档,在训练集中找出最相似的文档doc_id = random.randint(0, len(test_corpus))inferred_vector = model.infer_vector(test_corpus[doc_id])sims = model.docvecs.most_similar([inferred_vector], topn=len(model.docvecs))print 'Test Document ({}): «{}»\n'.format(doc_id, ' '.join(test_corpus[doc_id]))print u'SIMILAR/DISSIMILAR DOCS PER MODEL %s:\n' % modelfor label, index in [('MOST', 0), ('MEDIAN', len(sims) // 2), ('LEAST', len(sims) - 1)]: print u'%s %s: «%s»\n' % (label, sims[index], ' '.join(train_corpus[sims[index][0]].words))
阅读全文
0 0
- Doc2Vec简单例子
- Doc2Vec
- doc2vec 简介
- word2vec&doc2vec
- 简单例子
- 简单例子
- 简单例子
- Sentiment Analysis Using Doc2Vec
- gensim doc2vec选译
- word2vec 和doc2vec
- gensim中doc2vec调参
- 翻译:Doc2vec指导
- 基于gensim的Doc2Vec简析
- doc2vec计算文档相似度
- 基于gensim的Doc2Vec简析
- Python训练Word2Vec和Doc2Vec
- doc2vec用于分类 deeplearning4j实现
- 情感分类 doc2vec vs. word2vec
- hdu-Area2 多边形面积的并
- FFmpeg源代码简单分析:常见结构体的初始化和销毁(AVFormatContext,AVFrame等)
- 第九章 形态学图像处理
- jsp通过js按钮导出word小结
- WebPack是什么?
- Doc2Vec简单例子
- HiAR Glasses六月底预售,第三季度发货(用AR看世界,世界大有不同)
- 通过HIDDEV编程接口读取易方数码笔的坐标数据
- gradle加速下载jar包 标签: gradle
- springmvc + mybatis程序中出现的配置文件介绍以及配置
- 设计模式 之 准备开始之前(转载23种经典的jdk中设计模式)
- mapreduce读取文件内容输出到hbase
- 基础、柱标高
- XXE攻击指南