基于gensim的Doc2Vec简析,以及用python 实现简要代码

2023-11-08

Doc2Vec 原理:

Doc2Vec 或者叫做 paragraph2vec, sentence embeddings,是一种非监督式算法,可以获得sentences/paragraphs/documents 的向量表达,是 word2vec 的拓展。学出来的向量可以通过计算距离来找 sentences/paragraphs/documents 之间的相似性, 或者进一步可以给文档打标签。

例如首先是找到一个向量可以代表文档的意思, 
然后可以将向量投入到监督式机器学习算法中得到文档的标签, 例如在**情感分析 **sentiment analysis 任务中,标签可以是 “negative”, “neutral”,”positive”

两种实现方法

2013 年 Mikolov 提出了 word2vec 来学习单词的向量表示, 
主要有两种方法,cbow ( continuous bag of words) 和 skip-gram , 一个是用语境来预测目标单词,另一个是用中心单词来预测语境。

既然可以将 word 表示成向量形式,那么句子/段落/文档是否也可以只用一个向量表示?

一种方式是可以先得到 word 的向量表示,然后用一个简单的平均来代表文档。 另外就是 Mikolov 在 2014 提出的 Doc2Vec。

Doc2Vec 也有两种方法来实现。

dbow (distributed bag of words)

这里写图片描述 
python gensim 实现:

model = gensim.models.Doc2Vec(documents,dm = 0, alpha=0.1, size= 20, min_alpha=0.025)
  • 1

dm (distributed memory) 
这里写图片描述 
gensim 实现:

model = gensim.models.Doc2Vec(documents,dm = 1, alpha=0.1, size= 20, min_alpha=0.025)
  • 1

二者在 gensim 实现时的区别是 dm = 0 还是 1.

Doc2Vec 的目的是获得文档的一个固定长度的向量表达。

数据:多个文档,以及它们的标签,可以用标题作为标签。 
影响模型准确率的因素:语料的大小,文档的数量,越多越高;文档的相似性,越相似越好。

这里要用到 Gensim 的 Doc2Vec:

import gensim
LabeledSentence = gensim.models.doc2vec.LabeledSentence
先把所有文档的路径存进一个 array 中,docLabels:
from os import listdir
from os.path import isfile, join
docLabels = []
docLabels = [f for f in listdir("myDirPath") if f.endswith('.txt')]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

把所有文档的内容存入到 data 中:

data = []
for doc in docLabels:
    data.append(open(“myDirPath/” + doc, ‘r’)
  • 1
  • 2
  • 3

接下来准备数据, 
如果是用句子集合来训练模型,则可以用:

class LabeledLineSentence(object):
    def __init__(self, filename):
        self.filename = filename
    def __iter__(self):
        for uid, line in enumerate(open(filename)):
            yield LabeledSentence(words=line.split(), labels=[‘SENT_%s’ % uid])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

如果是用文档集合来训练模型,则用:

class LabeledLineSentence(object):
    def __init__(self, doc_list, labels_list):
       self.labels_list = labels_list
       self.doc_list = doc_list
    def __iter__(self):
        for idx, doc in enumerate(self.doc_list):
            yield LabeledSentence(words=doc.split(),labels=[self.labels_list[idx]])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在 gensim 中模型是以单词为单位训练的,所以不管是句子还是文档都分解成单词。

训练模型: 
将 data, docLabels 传入到 LabeledLineSentence 中, 
训练 Doc2Vec,并保存模型:

it = LabeledLineSentence(data, docLabels)

model = gensim.models.Doc2Vec(size=300, window=10, min_count=5, workers=11,alpha=0.025, min_alpha=0.025)

model.build_vocab(it)

for epoch in range(10):
    model.train(it)
    model.alpha -= 0.002            # decrease the learning rate
    model.min_alpha = model.alpha       # fix the learning rate, no deca
    model.train(it)

model.save(“doc2vec.model”)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

测试模型: 
Gensim 中有内置的 most_similar:

print model.most_similar(“documentFileNameInYourDataFolder”)
  • 1

输出向量:

model[“documentFileNameInYourDataFolder”]
  • 1

得到向量后,可以计算相似性,输入给机器学习算法做情感分类等任务了。

附相关名词解释: 
训练集:学习样本数据集,通过匹配一些参数来建立一个分类器。建立一种分类的方式,主要是用来训练模型的。

验证集:对学习出来的模型,微调分类器的参数,如在神经网络中选择隐藏单元数。验证集还用来确定网络结构或者控制模型复杂程度的参数。

测试集:主要用于测试训练好的模型的分类能力(识别率等)

显然,training set是用来训练模型或确定模型参数的,如ANN中权值等; validation set是用来做模型选择(model selection),即做模型的最终优化及确定的,如ANN的结构;而 test set则纯粹是为了测试已经训练好的模型的推广能力。

但实际应用中,一般只将数据集分成两类,即training set 和test set,大多数文章并不涉及validation set。



转载自:http://blog.csdn.net/hhtnan/article/details/78626696


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于gensim的Doc2Vec简析,以及用python 实现简要代码 的相关文章

随机推荐

  • 华为鸿蒙os系统服务器炸了,华为鸿蒙OS短时间内威胁不到麒麟操作系统和统信UOS系统...

    麒麟操作系统和统信UOS系统是当前国产Linux操作系统的两座大山 它们鼎足而立 麒麟操作系统多用于高端部署 而统信UOS有更强大的Deepin社区支撑 比如麒麟操作系统可用于大型计算机 各类政企终端 而统信UOS受到华为笔记本的青睐 被预
  • 【教程】DGL中的子图分区函数partition_graph讲解

    转载请注明出处 小锋学长生活大爆炸 xfxuezhang cn 目录 函数形式 函数作用 函数内容 函数入参 函数返参 使用示例 实际上官方的函数解释中就已经非常详细了 函数形式 def partition graph g graph na
  • uniapp---- 微信小程序中获取当前地理位置(高德地图)

    uniapp 微信小程序中获取当前地理位置 高德地图 1 在manifest json中选择微信小程序配置 勾选上位置接口 2 在manifest json中选择源码视图 添加permission和requiredPrivateInfos
  • 《effective c++》总结

    文章目录 前言 条款02 尽量以const enum inline替换 define 条款03 尽可能使用const 条款04 确定对象被使用前已先被初始化 条款05 了解c 默默编写并调用哪些函数 条款06 若不想使用编译器自动生成的函数
  • Android开发下遇到的一些奇葩问题处理

    环境 MAC Android Studio Q1 Gradle Home not found 网上查到的解决方案比较少一些 如 gradle wrapper properties 配置错误等等 Solution 我的解决是 无意中点了Run
  • 希沃展台如何使用_视频展台的操作步骤

    键盘控制 1 开启展示台及外围设备 按select键选择信号源 当body指示灯亮时 输出信号为摄像头 当external指示灯亮时 输出信号为外部信号源 开机时默认为摄像头 2 将被演示物放置在展台上 调整摄像头对准被摄物体 3 根据镜头
  • K8S单master部署四:Kubelet+kube-proxy

    服务器角色分配 角色 地址 安装组件 master 192 168 142 220 kube apiserver kube controller manager kube scheduler etcd node1 192 168 142 1
  • 创新实训(21)——推荐算法的评估

    前言 昨天使用Mohout推荐引擎实现了用户的协同过滤算法 今天使用昨天实现的算法计算一下推荐的准确率以及查全率 查准率 算法评判标准 召回率 recall 与查准率 precision A 检索到的 相关的 搜到的也想要的 B 未检索到的
  • uni-app onBackPress 小程序 解决方案 uni-app返回

    onBackPress 只支持APP和H5 但不支持小程序 可以用onUnload生命周期解决 页面销毁的时候执行方法
  • 史上最简单的 SpringCloud 教程

    转载请标明出处 原文首发于 https www fangzhipeng com springcloud 2018 08 30 sc f1 eureka 本文出自方志朋的博客 一 spring cloud简介 鉴于 史上最简单的Spring
  • 2PC算法

    概述 2PC 是Two Phase Commit的缩写 即二阶段提交 主要解决的问题是让基于分布式架构下的所有节点在进行事务处理过程中能够保证原子性和一致性 它的核心思想是 一票否决 提交过程 正如它的名字 它的提交分为两个阶段 第一阶段
  • 测试操作xml文件

    先查出所有的时间 并转换为时间戳 time SELECT ROW NUMBER OVER ORDER BY a SERIAL AS row num a SERIAL a COMMANDID a CELLID a USERID a LIBTI
  • Redis 数据类型 (完整版)

    Redis 数据类型 Redis支持五种数据类型 string 字符串 hash 哈希 list 列表 set 无序集合 zset 有序集合 1 String 字符串 set key value 赋值 get key 取值 127 0 0
  • 十大经典排序算法最强总结

    点击上方 我要学编程 选择 置顶 星标公众号 福利干货 第一时间送达 排序算法属于经典基础算法基本功 笔试面试基本都会涉及和考察的 有原题也有变化 不过基础的几大排序算法还是得尽可能熟悉 能在思路熟悉的前提下手写出代码就更好了 为了防止不提
  • 开源中国 2018 年度榜单之国产新秀榜

    回看 2018 年 无论是国内外 科技公司对 开源 投入的巨大资本不仅令人咋舌 更重要的是 伴随着资本的强势注入 有理由相信 开源 将会有更光明且清晰可见的未来 而开源软件作为其中最重要的一环 除了充分展示 开源 的生态丰富之外 还在某种程
  • Java并发编程学习4-线程封闭和安全发布

    Java并发编程学习系列 线程封闭和安全发布 1 线程封闭 1 1 Ad hoc 线程封闭 1 2 栈封闭 1 3 ThreadLocal 类 2 不变性 2 1 Final 域 2 2 不可变对象的简单示例 3 安全发布 3 1 不正确的
  • 全方位解读Web3域名:DID基石、NFT新增长点

    1 Web3域名在NFT市场整体低迷的背景下表现出色 2 Web3域名有庞大的用户群体和巨大的上升空间 3 Web3域名是用户重要的Web3身份凭证 可使用域名访问全链应用 4 Web3域名长期来看使用大于炒作 今年下半年 Web3域名在N
  • gitlab配置https方式访问

    1 mkdir etc gitlab ssl 创建ssl证书目录 2 上传证书 3 配置gitlab vim etc gitlab gitlab rb external url https cloud cn nginx enable tru
  • hisi Camera 开发--HiMPP媒体处理软件开发基本概念

    1 HIMPP平台架构简介 海思提供的媒体处理软件平台 Media Process Platform 简称 MPP 可支持应用软件快速开发 该平台对应用软件屏蔽了芯片相关的复杂的底层处理 并对应用软件直接提供 MPI MPP Program
  • 基于gensim的Doc2Vec简析,以及用python 实现简要代码

    Doc2Vec 原理 Doc2Vec 或者叫做 paragraph2vec sentence embeddings 是一种非监督式算法 可以获得sentences paragraphs documents 的向量表达 是 word2vec