向量化算法 doc2vec

第1关:认识 Doc2vec

Doc2vec 算法简介

Doc2vec 又叫做 Paragraph2vec, Sentence embeddings,是一种非监督式算法,可以获得句子、段落、文档的向量表达,是 Word2vec 的拓展。学出来的向量可以通过计算距离来找句子、段落、文档之间的相似性,可以用于文本聚类,对于有标签的数据,还可以用监督学习的方法进行文本分类,例如经典的情感分析问题。

与 Word2vec 一样,Doc2Vec 有两种模型,分别为:Distributed Memory(DM)和 Distributed Bag of Words(DBOW)。DM 模型在给定上下文和文档向量的情况下预测单词的概率,DBOW 模型在给定文档向量的情况下预测文档中一组随机单词的概率。其中,在一个文档的训练过程中,文档向量共享,也就意味着在预测单词的概率时,都利用了整个文档的语义。

Doc2vec 算法模型

1、DM 模型 DM 模型在训练时,首先将每个文档的 ID 和语料库中的所有词初始化一个 K 维的向量,然后将文档向量和上下文词的向量输入模型,隐藏层将这些向量累加(或取均值、或直接拼接起来)得到中间向量,作为输出层 softmax 的输入。在一个文档的训练过程中,文档 ID 保持不变,共享着同一个文档向量,相当于在预测单词的概率时,都利用了整个句子的语义。DM 模型的结构如图1所示。

图 1 DM 模型

使用 gensim 实现 DM 模型: model = gensim.models.Doc2Vec(documents,dm = 1, alpha=0.1, size= 20, min_alpha=0.025)

函数的各个参数的具体含义为:

  • sentences 指代供训练的句子,可以使用简单的列表,但是对于大语料库,建议直接从磁盘/网络流迭代传输句子;

  • alpha 代表初始学习率;

  • size 表示向量的维度;

  • min_alpha 表示随着训练的进行,学习率线性下降到 min_alpha。

2、DBOW 模型 DBOW 模型的输入是文档的向量,预测的是该文档中随机抽样的词。这种模型的训练方法是忽略输入的上下文,让模型去预测段落中的随机一个单词,在每次迭代的时候,从文本中采样得到一个窗口,再从这个窗口中随机采样一个单词作为预测任务,让模型去预测,输入就是段落向量。

图 2 DBOW 模型

使用 gensim 实现 DBOW 模型: model = gensim.models.Doc2Vec(documents,dm = 0, alpha=0.1, size= 20, min_alpha=0.025)

第2关:Doc2vec 实战

Doc2vec 步骤简介

Doc2Vec 的目的是获得文档的一个固定长度的向量表达。在我们获得 Doc2Vec 模型之前,我们首先需要准备好数据,即多个文档,以及它们的标签(可以用标题作为标签)。

Doc2vec 算法的过程,主要有两步:

  1. 训练模型:在已知的训练数据中得到词向量 W ,softmax,以及段落向量/句向量;

  2. 推断过程:对于新的段落,得到其向量表达。在这个阶段中,可以呈现新文档,并且固定所有权重以计算文档向量。

其中,影响模型准确率的因素主要有:语料的大小,文档的数量,越多越高;文档的相似性,越相似越好。

Doc2vec 具体步骤

1、创建 Doc2vec

首先,我们使用 Gensim 的 Doc2Vec 创建一个模型,以备后面的训练。

 
  1. import gensim
  2. LabeledSentence = gensim.models.doc2vec.LabeledSentence

我们需要先把所有文档的路径存进一个 array 中,以便后面读取文档数据。

 
  1. from os import listdir
  2. from os.path import isfile, join
  3. docLabels = []
  4. docLabels = [f for f in listdir("myDirPath") if f.endswith('.txt')] # 将文件路径存入array

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

 
  1. data = []
  2. for doc in docLabels: # 将数据存入到data
  3. data.append(open(“myDirPath/” + doc, 'r')

2、准备数据

如果是用句子集合来训练模型,我们可以:

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

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

3、训练模型,并保存以便使用

 
  1. it = LabeledLineSentence(data, docLabels)
  2. model = gensim.models.Doc2Vec(size=300, window=10, min_count=5, workers=11,alpha=0.025, min_alpha=0.025) # 创建模型
  3. model.build_vocab(it)
  4. for epoch in range(10):
  5. model.train(it)
  6. model.alpha -= 0.002 # 降低学习率
  7. model.min_alpha = model.alpha # 调整学习率
  8. model.train(it)
  9. model.save("doc2vec.model") # 保存模型作为后续使用
编程要求

在右侧编辑器中的 Begin-End 之间补充 Python 代码,完成 Doc2vec 的模型训练过程,并保存模型。其中,训练集已由系统给出,文本内容通过 input 从后台获取。

测试说明

平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。

测试输入: 自己

预期输出: [('可以', 0.999948263168335)] Congratulate!

from gensim.models.doc2vec import Doc2Vec,TaggedDocument
import pandas as pd
def D2V():
    article = pd.read_excel('data.xlsx') #data为训练集,繁体
    sentences = article['内容'].tolist()
    split_sentences = []
    
    for i in sentences:
        split_sentences.append(i.split(' '))
    documents = [TaggedDocument(doc, [i]) for i, doc in enumerate(split_sentences)]
# 任务:基于 gensim 构建 doc2vec 模型并命名为doc2vec_stock进行保存
# ********** Begin *********#
   
    model = Doc2Vec(documents, size=500, window=5, min_count=5, workers=4, epoch=5000)
    model.save("doc2vec_stock.model") 
# ********** End **********#

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/751244.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

华为笔记本电脑d盘数据丢失:原因、恢复方案与防范建议

华为笔记本电脑以其高性能和稳定的品质赢得了众多用户的青睐,但即使是如此优质的设备,也难免遭遇数据丢失的困境。本文将围绕华为笔记本电脑D盘数据丢失这一问题,探讨其常见原因、恢复方案,并提出未来防范的建议,以帮助…

Go 延迟调用 defer

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

Transformer教程之循环神经网络(RNN)和长短期记忆网络(LSTM)

在当今人工智能和深度学习的世界中,Transformer模型已经成为了主流。然而,回顾过去,循环神经网络(RNN)和长短期记忆网络(LSTM)在序列数据处理上也曾风靡一时。本文将详细讲解RNN和LSTM的原理、应…

FPC板设计

在板框属性里面选择FPC软板: FPC补强为什么要比焊盘单边大1mm:补强区域需比焊盘大1.0mm以上,才能有效保护焊盘与线路交接处不断裂 补强板放在功能面的背面: 、金手指厚度计算工具:https://tools.jlc.com/jlcTools/#/ca…

Apollo9.0 PNC源码学习之Planning模块(一)—— 规划概览

0 前言 规划本质就是搜索问题,数学角度来看就是寻找函数最优解 规划模块复杂的就是相关的逻辑处理和过程计算 对于规划的三维问题,目前解决方案:降维+迭代 将SLT问题分解为ST和SL二维优化问题:在一个维度优化之后,再另一个维度再进行优化,最后整合成三维的轨迹。 虽然降…

2毛钱的SOT23-5封装28V、1.5A、1.2MHz DCDC转换器用于LCD偏置电源和白光LED驱动等MT3540升压芯片

前言 之前发了一个TI的BOOST升压芯片,用于LCD偏置电压或LED驱动,请访问以下链接。 6毛钱SOT-23封装28V、400mA 开关升压转换器,LCD偏置电源和白光LED应用芯片TPS61040 国产半导体厂家发展迅猛,今天推荐一个公司带“航天”的升压…

Vue.js中的虚拟DOM

一.节点和状态 在我们平常对DOM操作的时候,之前在vue没有诞生之前,以命令式的方式对DOM进行操作,页面上的每一个元素都可以看做成一个节点状态。 二.剔除和渲染 框架都有自己渲染的方式,假设一个页面的状态,随着Ajax请求的放松,状态发生改变,有以下的两种方式供你选择&#…

【linux】使用vnc连接远程桌面,需要安装tigervnc,并在服务端期待,然后在客户端使用tigervnc-viewer进行连接即可

vnc 远程设置方法 需要服务端安装软件: sudo apt install -y tigervnc-standalone-server# 先配置密码使用: tightvncpasswd启动服务,禁用本机 vncserver -localhost no -geometry 1924x1080 :1客户端安装软件: sudo apt insta…

环境安装-Redis

目录 下载 解压 启动测试 配置服务 平时开发中,redis也必不可少,需要在本机安装设置开机自启动,最好是设置redis到系统services.msc,方便操纵和查看。 下载 到github下载zip,加压缩即可使用,方便快捷。…

湖北大学2024年成人高考函授报名专升本法学专业介绍

湖北大学,这所承载着深厚文化底蕴和学术积淀的高等学府,始终致力于为广大有志之士提供多元化的学习机会。在时代的浪潮中,为了满足社会对于高层次法律人才的需求,湖北大学特别推出了成人高等继续教育项目,为广大在职人…

Go语言学习:每日一练2

Go语言学习:每日一练2 目录 Go语言学习:每日一练2结构体零值数组切片映射指针 各个类型的零值一览 结构体 //定义 type Vertex struct {X, Y int } //使用 func main() { v1 : Vertex{1, 2} fmt.Println(v.X) //别的实例化方式 var v2 Vertex v2 : *new…

express+vue 在线五子棋(一)

示例 在线体验地址五子棋,记得一定要再拉个人才能对战 本期难点 1、完成了五子棋的布局,判断游戏结束 2、基本的在线对战,掉线暂停对局,重连继续对局 3、游戏配套im(这个im的实现,请移步在线im) 后续安排 1、黑白棋…

网络物理隔离后 可以用保密U盘进行数据安全交换吗?

企业用的保密U盘通常被设计用于存储和传输敏感信息,以确保数据的安全和保密性。 在网络之间实现了物理隔离后,使用保密U盘进行数据安全交换是一种常见的做法。物理隔离确保了两个网络之间的完全分离,因此使用保密U盘可以作为一种安全的手段来…

format()函数

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 语法介绍 format()可以对数据进行格式化处理操作,语法如下: format(value, format_spec) format_spec为格式化解释。当参数…

ZSWatch 开源项目介绍

前言 因为时不时逛 GitHub 会发现一些比较不错的开源项目,突发奇想想做一个专题,专门记录开源项目,内容不限于组件、框架以及 DIY 作品,希望能坚持下去,与此同时,也会选取其中的开源项目做专题分析。希望这…

MySQL高级-索引-设计原则小结

文章目录 1、设计原则2、索引小结2.1、索引概述2.2、索引结构2.3、索引分类2.4、索引语法2.5、SQL性能分析2.6、索引使用2.7、索引设计原则 1、设计原则 针对于数据量较大,且查询比较频繁的表建立索引。针对于常作为查询条件(where)、排序&am…

SpringCloud Alibaba Sentinel规则持久化实践总结

默认情况下&#xff0c;一旦我们重启应用&#xff0c;sentinel规则将消失&#xff0c;生产环境需要将配置规则进行持久化。这里我们实践将Sentinel持久化到Nacos中。 ① pom依赖 我们引入sentinel-datasource-nacos&#xff1a; <dependency><groupId>com.aliba…

【机器学习300问】134、什么是主成分分析(PCA)?

假设你的房间堆满了各种各样的物品&#xff0c;书籍、衣服、玩具等等&#xff0c;它们杂乱无章地散落各处。现在&#xff0c;你想要清理房间&#xff0c;但又不想扔掉任何东西&#xff0c;只是希望让房间看起来更整洁&#xff0c;更容易管理。 你开始思考&#xff0c;能否将物品…

十三、Maven(1)

&#x1f33b;&#x1f33b;目录 一、maven价绍二、maven的功能1、项目自动化构建2、管理jar、war包3、实现项目结构设计 三、maven安装1、maven的安装环境需要jdk2、Maven的安装路径中不能出现中文和空格3、压缩包解压即可4、配置环境变量 四、maven的仓库1. Maven仓库配置2. …

矩阵新玩法,云微客AI矩阵系统开启新营销大门

在激烈的市场竞争中&#xff0c;商家企业们都在追求更加高效的营销方式&#xff0c;在如今流量至上的时代&#xff0c;短视频凭借其魅力&#xff0c;成为了众多企业吸引流量、获客引流的核心营销途径。而想要挤进短视频流量圈的你&#xff0c;是否经常听到矩阵这个词呢&#xf…