向量化算法 doc2vec

news2024/11/15 22:34:06

第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 **********#

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

别人工作8小时,我只需1小时!这些宝藏网站我都替你收集好了!

关注公众号【程序员世杰】,回复【宝藏网站】即可获得跳转链接 软件 mac应用下载 很多破解版应该都可以找到 snipaste: 截图工具,快捷截图,贴图等功能。 幕布: 快速编辑思维导图。 sublime text: 文档编辑器&…

吴恩达2022机器学习专项课程C2W3:2.27 选修_数据倾斜

目录 处理不平衡数据集1.分类需求描述2.计算精确率和召回率 权衡精确率和召唤率1.手动调整阈值2.F1分数 总结 处理不平衡数据集 1.分类需求描述 如果你在处理一个机器学习应用,其中正例和负例的比例(用于解决分类问题)非常不平衡&#xff0…

【b站-湖科大教书匠】3 数据链路层-计算机网络微课堂

课程地址:【计算机网络微课堂(有字幕无背景音乐版)】 https://www.bilibili.com/video/BV1c4411d7jb/?share_sourcecopy_web&vd_sourceb1cb921b73fe3808550eaf2224d1c155 3 数据链路层 3.1 数据链路层概述 3.1.1 数据链路层在网络体系结…

深度学习 --- stanford cs231学习笔记五(训练神经网络之数据的预处理)

数据的预处理(Data Preprocessing) 2 Data Preprocessing数据的预处理 数据预处理的几种方法 2,1 数据的零点中心化 数据的零点中心化的目的就是为了把数据的整体分布拉回到原点附近,也就是让数据的整体均值变为0。 ​ 2,2 数据的标准化 数据…

介绍ES6中的class类:(一) 类的基本语法

一、类的由来与简介 1. 简介 很早很早之前,在JavaScript的世界里,生成实例对象的传统方法是通过构造函数。 嗯哼? function Point(x, y) {this.x x;this.y y; }Point.prototype.toString function () {return ( this.x , this.y )…

MATLAB2024a下的BP神经网络回归工具箱预测

1 打开BP神经网络回归工具箱GUI界面 图1-1 如图1-1所示,虽然叫神经网络拟合但确实是BP神经网络回归工具箱,如果想要使用其他神经网络模型,可以打开左边的深度网络网络设计器,如图1-2、图1-3所示: 图1-2 图1-3 2 导入训…

Java操作Word文档

文章目录 Java操作Word文档引言1、技术选型结论 2、基础文本填充2.1 引入依赖2.1.1. poi2.1.2. poi-ooxml2.1.3. poi-ooxml-schemas 总结2.2 业务思路2.3 业务层 OfficeService2.4 通用工具类 OfficeUtils2.5 控制层 OfficeController 3、表格3.1 准备模板3.2 业务层 OfficeSer…

NVIDIA控制面板3D设置一栏中不能通过预览更改图形设置的解决办法

今天因为GeForce Experience弹窗让我更新之后,手欠直接删掉了 然后图中标出的两个选项就没了 解决方法很简单,就是下回来,hhh https://www.nvidia.cn/geforce/drivers/ 直接下载就行,不用管版本,但是这种驱动千万不要…

本地项目上传到GitHub上(李豆)

本地项目上传到GitHub上(李豆) 准备工作: 本地需要有 git 也需要有一个 GitHub 账号 首先需要在 GitHub 新建一个空仓库 在想要上传项目的文件夹中使用 Git 命令操作 初始化: git init与 github 仓库进行链接 :git remote add origin …

妙手ERP正式接入Lazada 3PF,支持批量设置产品库存,管理多仓发货

Lazada平台近期又有大动作,上线了3PF一店多运模式! 一、Lazada 3PF一店多运模式 在介绍3PF一店多运模式前,要先说明一下原有的Lazada履约模式,此前,Lazada为跨境商家提供两大类物流履约方案: 一类&#x…

谷歌网络营销中SEO的策略有哪些?

在网络营销中,SEO(搜索引擎优化)是一种关键策略,旨在提高网站在搜索引擎结果中的排名。首先,要进行关键词研究,找出潜在客户使用的搜索词。接下来,优化网站内容,使其包含这些关键词&…

Android高级面试_8_热修补插件化等

Android 高级面试:插件化和热修复相关 1、dex 和 class 文件结构 class 是 JVM 可以执行的文件类型,由 javac 编译生成;dex 是 DVM 执行的文件类型,由 dx 编译生成。 class 文件结构的特点: 是一种 8 位二进制字节…

“必答题”-中小制造企业如何做好数字化转型

实现数字化转型是当前中小制造企业生存下去的重要保障。通过数字化转型,中小企业可以充分利用数字技术对其生产、运营、管理等环节进行全链路的改造和应用,提升企业的竞争力。 那么,中小制造企业的数字化要如何做? 中小制造企业数…

LLM在软件测试中的革新应用

一、引言 随着人工智能技术的蓬勃发展,大语言模型(Large Language Model,简称LLM)如GPT系列,在自然语言处理领域取得了显著进展。LLM不仅能够处理复杂的自然语言任务,还在多个领域展现出广泛的应用潜力。在…

项目分层--简单图书管理系统

分层情况 实体类Book代码 //实体类 public class Book {private int id;private String name;private int bsum;public Book() {}public Book(int id, String name, int bsum) {this.id id;this.name name;this.bsum bsum;}public int getId() {return id;}public void set…

目标检测算法之YOLO(YOLOv10)

yolo算法理解 BackgroundConsistent Dual Assignments for NMS-free TrainingHolistic Efficiency-Accuracy Driven Model DesignEfficiency driven model designLightweight classification headSpatial-channel decoupled downsamplingRank-guided block design Accuracy dri…

适用于智慧城市、智慧文旅等在线场景的轻量级3D数字人引擎MyAvatar简介

本人研发的国内首个纯面向web应用和小程序的轻量级3D虚拟人引擎MyAvatar。 功能简述 支持3D模型定制(写实或卡通风格均可,人物模型需实现绑定和变形)动画可以内置于模型中,也可以单独以glb或fbx格式导出并动态加载支持readyplay…

【区间动态规划】1771. 由子序列构造的最长回文串的长度

本文涉及知识点 动态规划汇总 LeetCode1771. 由子序列构造的最长回文串的长度 给你两个字符串 word1 和 word2 ,请你按下述方法构造一个字符串: 从 word1 中选出某个 非空 子序列 subsequence1 。 从 word2 中选出某个 非空 子序列 subsequence2 。 连…

图像、色彩波和抗混叠

阮一峰的博文图像与滤波中分析了图像和波的关系,主要结论如下: 图像本质上就是各种色彩波的叠加。图像就是色彩的波动:波动大,就是色彩急剧变化;波动小,就是色彩平滑过渡。色彩剧烈变化的地方,…

Android 简单的so层逆向

前言 最近搞了一下安卓。简单学习记录一下。 目标程序: xiao shui mian 也就是某个参数的逆向 准备环境 安卓机scrcpyadbfrida解包软件(不列举了) 这种环境安装这里就不多说了。教程也很多。 参数逆向分析 先抓包看看参数 这里我使用…