doc2vec使用说明(二)gensim工具包 LabeledSentence

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

本文介绍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))

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

参考:

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

时间: 2024-10-03 18:52:19

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

nginx使用说明(二)新手指南

本节介绍如何启动和停止nginx,重新加载配置,配置文件的结构,如何配置nginx分配静态内容,如何配置nginx为代理服务器,如何与FastCGI程序相联. Nginx包含一个主进程和多个工作进程.主进程读取并处理配置,维护工作进程.工作进程负责实际的请求处理.Nginx使用事件驱动和操作系统相关的机制,可以有效的在工作进程间分配请求.工作进程的数量可以在配置文件里设定,可以配置为固定的个数,也可以根据CPU的核心数进行动态适应. 默认情况下,配置文件为nginx.conf,一般路径为/usr

json.net使用说明二

1.使用JSON.NET序列化对象 public class Account { public string Email { get; set; } public bool Active { get; set; } public DateTime CreatedDate { get; set; } public IList<string> Roles { get; set; } } Account account = new Account { Email = "[email pro

gensim与numpy array 互转

目的 将gensim输出的格式转化为numpy array格式,支持作为scikit-learn,tensorflow的输入 实施 使用nltk库的停用词和网上收集的资料整合成一份新的停用词表,用来过滤文档中的停用词,也去除了数字和特殊的标点符号,最后将所有字母转化为小写形式. 以下是原文: Subject: Re: Candida(yeast) Bloom, Fact or Fiction From: [email protected] (Pat Churchill) Organization

Doc2Vec,Word2Vec文本相似度 初体验。

参考资料 : https://radimrehurek.com/gensim/models/word2vec.html 接上篇 : import jieba all_list = jieba.cut(xl['工作内容'][0:6],cut_all=True) print(all_list) every_one = xl['工作内容'].apply(lambda x:jieba.cut(x)) import traceback def filtered_punctuations(token_lis

工欲善其事,必先利其器——DevOps中如何管理工具包

一.背景 作为DevOps交付流水线的开发者,为支持CI/CD中各项任务的自动化,都需要依赖多种包管理工具来下载各种相关的工具,比如针对产生最终交付件的构建过程,就需要在构建流程的第一步,自动地把相关工具,如Curl.wget.Maven.Gradle.npm等等,下载到CI服务器.这些工具的下载,通常都需要依靠对应的公网服务器和包管理工具来支持.而这样通过公网来下载工具,有时会遇到稳定性的问题,也就是所谓的环境问题,导致工具下载失败,进而导致构建任务的失败.因此,我们需要引入新的技术来克服这些

游戏开发中,图片资源的精简

在游戏开发中,包的大小总是与图片资源的大小密切相关,而图片资源中,大多为带有透明度信息的png图像. 那么,如何精简png图片资源呢? 1.图像压缩是一种方法,然而随着压缩率的增大.图片品质也越来越差.(舍弃) 2.我们另辟蹊径,采用png图像拆分.(近乎无损,资源精简) 一.原理:将png图像转化为两张jpeg图像进行存储 pngSplit下载 pngSplit使用说明 二.使用方法: 1.LibGdx中,通过Pixmap使用 // 如工程目录assets/texture/0_1.jpeg下:

linux系统监控常用工具

linux系统监控常用工具 一.系统核心工具包(coreutils) 1./bin/df 报告系统的磁盘空间用量 df -h  显示磁盘分区fdisk -l 2./bin/uname 显示系统信息 uname -srvmo 二.系统进程工具包(procps) 1./bin/ps 显示系统进程 ps -ef      ps aux 2./usr/bin/pgrep 过滤显示系统进程 3./usr/bin/free 显示系统内存的使用 4./usr/bin/vmstat 报告虚拟内存的统计信息 5.

Git使用文档

友情提示.git的基本原理:点击这里 大纲 一.安装客户端 \Git客户端Git Extensions安装及使用说明 二.连接服务 三.代码管理的基本使用 一.     安装客户端 1.安装: 01GitExtensions246SetupComplete.msi (如果git已经安装,运行过程中,提示安装git时,点取消即可) 第二步如图,无截屏的默认选择即可,中间会弹出下面选择的组件安装程序,一路默认 2.      设置: GitExtensions 打开工具 配置git路径 开始菜单打开

doc2vec 利用gensim 生成文档向量

利用gensim 直接生成文档向量 def gen_d2v_corpus(self, lines): with open("./data/ques2_result.txt", "wb") as fw: for line in lines: fw.write(" ".join(jieba.lcut(line)) + "\n") sents = doc2vec.TaggedLineDocument("./data/que