欢迎交流,转载请注明出处。

本文介绍gensim工具包中,带标签(一个或者多个)的文档的doc2vec 的向量表示。

应用场景: 当每个文档不仅可以由文本信息表示,还有别的其他标签信息时,比如,在商品推荐中,将每个商品看成是一个文档,我们想学习商品向量表示时,可以只使用商品的描述信息来学习商品的向量表示,但有时:商品类别等信息我们也想将其考虑进去, 最简单的方法是:当用文本信息学习到商品向量后,添加一维商品的类别信息,但只用一维来表示商品类别信息的有效性差。gensim 工具包的doc2vec提供了更加合理的方法,将商品标签(如类别)加入到商品向量的训练中,即gensim 中的LabeledSentence方法

LabeledSentence的输入文件格式:每一行为:<labels, words>, 其中labels 可以有多个,用tab 键分隔,words 用空格键分隔,eg:<id  category  I like my cat demon>.

输出为词典vocabuary 中每个词的向量表示,这样就可以将商品labels:id,类别的向量拼接用作商品的向量表示。

写了个例子,仅供参考(训练一定要加 min_count=1,否则词典不全,这个小问题卡了一天 Doc2Vec(sentences, size = 100, window = 5, min_count=1))

注意:下面的例子是gensim更新之前的用法,gensim更新之后,没有了labels 的属性,换为tags, 且目标向量的表示也由vacb转到docvecs 中。更新后gensim 的用法见例子2.

例子1:gensim 更新前。

 # -*- coding: UTF-8 -*-
import gensim, logging
import os
from gensim.models.doc2vec import Doc2Vec,LabeledSentence
from gensim.models import Doc2Vec
import gensim.models.doc2vec asin=set()
category=set()
class LabeledLineSentence(object):
def __init__(self, filename=object):
self.filename =filename
def __iter__(self):
with open(self.filename,'r') as infile:
data=infile.readlines();
# print "length: ", len(data)
for uid,line in enumerate(data):
asin.add(line.split("\t")[0])
category.add(line.split("\t")[1])
yield LabeledSentence(words=line.split("\t")[2].split(), labels=[line.split("\t")[0],line.split("\t")[1]])
print 'success' logging.basicConfig(format = '%(asctime)s : %(levelname)s : %(message)s', level = logging.INFO)
sentences =LabeledLineSentence('product_bpr_train.txt')
model = Doc2Vec(sentences, size = 100, window = 5, min_count=1)
model.save('product_bpr_model.txt')
print 'success1' #for uid,line in enumerate(model.vocab):
# print line
print len(model.vocab)
outid = file('product_bpr_id_vector.txt', 'w')
outcate = file('product_bpr_cate_vector.txt', 'w')
for idx, line in enumerate(model.vocab):
if line in asin :
outid.write(line +'\t')
for idx,lv in enumerate(model[line]):
outid.write(str(lv)+" ")
outid.write('\n')
if line in category:
outcate.write(line + '\t')
for idx,lv in enumerate(model[line]):
outcate.write(str(lv)+" ")
outcate.write('\n')
outid.close()
outcate.close()

 例子2:gensim 更新后

 # -*- coding: UTF-8 -*-
import gensim, logging
import os
from gensim.models.doc2vec import Doc2Vec,LabeledSentence
from gensim.models import Doc2Vec
import gensim.models.doc2vec asin=set()
category=set()
class LabeledLineSentence(object):
def __init__(self, filename=object):
self.filename =filename
def __iter__(self):
with open(self.filename,'r') as infile:
data=infile.readlines();
print "length: ", len(data)
for uid,line in enumerate(data):
print "line:",line
asin.add(line.split("\t")[0])
print "asin: ",asin
category.add(line.split("\t")[1])
yield LabeledSentence(words=line.split("\t")[2].split(" "), tags=[line.split("\t")[0], line.split("\t")[1]])
print 'success' logging.basicConfig(format = '%(asctime)s : %(levelname)s : %(message)s', level = logging.INFO)
sentences =LabeledLineSentence('product_bpr_test_train.txt')
model = Doc2Vec(sentences, size =50, window = 5, min_count=1)
model.save('product_bpr_model50.txt')
print 'success1' print "doc2vecs length:", len(model.docvecs)
outid = file('product_bpr_id_vector50.txt', 'w')
outcate = file('product_bpr_cate_vector50.txt', 'w')
for id in asin:
outid.write(id+"\t")
for idx,lv in enumerate(model.docvecs[id]):
outid.write(str(lv)+" ")
outid.write("\n")
for cate in category:
outcate.write(cate + '\t')
for idx,lv in enumerate(model.docvecs[cate]):
outcate.write(str(lv)+" ")
outcate.write('\n')
outid.close()
outcate.close()

参考:

http://rare-technologies.com/doc2vec-tutorial/

https://github.com/RaRe-Technologies/gensim/blob/develop/docs/notebooks/doc2vec-IMDB.ipynb

http://radimrehurek.com/gensim/models/doc2vec.html#blog

doc2vec使用说明(二)gensim工具包 LabeledSentence的更多相关文章

  1. doc2vec使用说明(一)gensim工具包TaggedLineDocument

    gensim 是处理文本的很强大的工具包,基于python环境下: 1.gensim可以做什么? 它可以完成的任务,参加gensim 主页API中给出的介绍,链接如下: http://radimreh ...

  2. word2vec使用说明(google工具包)

    word2vec使用说明   转自:http://jacoxu.com/?p=1084. Google的word2vec官网:https://code.google.com/p/word2vec/ 下 ...

  3. UE4.5.0的Kinect插件(Plugin)---插件使用说明<二>

    声明:所有权利保留. 转载必须说明出处:http://blog.csdn.net/cartzhang/article/details/43563959 一.起因: 写了个UE4的Kinect的插件,结 ...

  4. Neo4j 的使用说明(二)

    上一篇: https://www.cnblogs.com/infoo/p/9840965.html  阅读量挺多的,因此继续写一下(二) 在上一篇说到:(版本依然基于V3.4.9) 如果为了方便更改d ...

  5. Hawk 数据抓取工具 使用说明(二)

    1. 调试模式和执行模式 1.1.调试模式 系统能够通过拖拽构造工作流.在编辑流的过程中,处于调试模式,为了保证快速地计算和显示当前结果(只显示前20个数据,可在调试的采样量中修改),此时,所有执行器 ...

  6. Gensim进阶教程:训练word2vec与doc2vec模型

    本篇博客是Gensim的进阶教程,主要介绍用于词向量建模的word2vec模型和用于长文本向量建模的doc2vec模型在Gensim中的实现. Word2vec Word2vec并不是一个模型--它其 ...

  7. [Algorithm & NLP] 文本深度表示模型——word2vec&doc2vec词向量模型

    深度学习掀开了机器学习的新篇章,目前深度学习应用于图像和语音已经产生了突破性的研究进展.深度学习一直被人们推崇为一种类似于人脑结构的人工智能算法,那为什么深度学习在语义分析领域仍然没有实质性的进展呢? ...

  8. models.doc2vec – Deep learning with paragraph2vec

    参考: 用 Doc2Vec 得到文档/段落/句子的向量表达 https://radimrehurek.com/gensim/models/doc2vec.html Gensim Doc2vec Tut ...

  9. 基于Doc2vec训练句子向量

    目录 一.Doc2vec原理 二.代码实现 三.总结   一.Doc2vec原理 前文总结了Word2vec训练词向量的细节,讲解了一个词是如何通过word2vec模型训练出唯一的向量来表示的.那接着 ...

随机推荐

  1. 纯HTML5+CSS3制作生日蛋糕

    以一个前端开发的身份绘制一个简单的蛋糕庆祝一下今天这个好日子吧,程序员庆生的乐趣与哀愁啊.写的比较简陋,感兴趣的看一下吧. 先发个效果图吧 蛋糕分为三个部分,底部蛋糕,顶层蛋糕和蜡烛部分.HTML的布 ...

  2. sharepoint报HRESULT:0x80131904的错误的原因和解决方法

    在新建文件库的时候出现的.下上传文件和更改权限,都是在报这个HRESULT:0x80131904的错误,基本所有操作都报同一个错误,如下图: 错误原因 这个问题其实就是:sharepoint配置文件( ...

  3. Sharepoint学习笔记—习题系列--70-576习题解析 -(Q141-Q143)

    Question  141 You are planning an upgrade to a SharePoint 2010 application. You have the following r ...

  4. iOS之两个ImageView实现图片滚动

    原创作者:codingZero 导语 在不少项目中,都会有图片轮播这个功能,现在网上关于图片轮播的框架层出不穷,千奇百怪,笔者根据自己的思路,用两个imageView也实现了图片轮播,这里说说笔者的主 ...

  5. 谷歌电子市场1--BaseFragment

    1.BaseFragment 共性 加载中加载失败数据为空加载成功 2.loadData调用 3.网络封装 请求网络获取数据缓存机制(写缓存和读缓存)解析数据请求网络前,先判断是否有缓存, 有的话就加 ...

  6. iOS 10 :用 UIViewPropertyAnimator 编写动画

    英文:shinobicontrols 译文:戴仓薯 链接:http://www.jianshu.com/p/4244cf130478 [iOS 10 day by day] Day 1:开发 iMes ...

  7. @synchronized(self)的用法 小结

    @synchronized() 的作用是创建一个互斥锁,保证在同一时间内没有其它线程对self对象进行修改,起到线程的保护作用, 一般在公用变量的时候使用,如单例模式或者操作类的static变量中使用 ...

  8. ORACLE 9i 数据库体系结构图

    ORACLE 9i 的数据库体系结构图,非常的全面.系统.高屋建瓴的整体介绍了ORACLE 9i 的数据库体系结构.如果能全面了解.清晰梳理.深入掌握这些知识点,相信对你了解学习.深入研究ORACLE ...

  9. RMAN命令LIST操作总结

    在使用RMAN备份.还原的过程中,我们经常需要查看备份的一些详细信息,例如,RMAN提供了LIST命令.关于LIST命令的详细信息 可以参考Oracle Database Backup and Rec ...

  10. 【转】Hive 基础之:分区、桶、Sort Merge Bucket Join

    Hive 已是目前业界最为通用.廉价的构建大数据时代数据仓库的解决方案了,虽然也有 Impala 等后起之秀,但目前从功能.稳定性等方面来说,Hive 的地位尚不可撼动. 其实这篇博文主要是想聊聊 S ...