doc2vec原理及实践

Word2Vec demo,语料库处理以及word2vec训练 (Win10环境) 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结 参考链接 word2vec实战:获取和预处理中文维基百科(Wikipedia)语料库,并训练成word2vec模型 nlp语料库相关资源:A curated list of resources for NLP (Natural Language Processing) for Chinese windows使用o.. 阅读详情

1.“句向量”简介

word2vec提供了高质量的词向量,并在一些任务中表现良好。
关于word2vec的原理可以参考这几篇论文:

关于如何使用第三方库gensim训练word2vec可以参考这篇博客:

尽管word2vec提供了高质量的词汇向量,仍然没有有效的方法将它们结合成一个高质量的文档向量。对于一个句子、文档或者说一个段落,怎么把这些数据投影到向量空间中,并具有丰富的语义表达呢?过去人们常常使用以下几种方法:

  • bag of words
  • LDA
  • average word vectors
  • tfidf-weighting word vectors

就bag of words而言,有如下缺点:1.没有考虑到单词的顺序,2.忽略了单词的语义信息。因此这种方法对于短文本效果很差,对于长文本效果一般,通常在科研中用来做baseline。

average word vectors就是简单的对句子中的所有词向量取平均。是一种简单有效的方法,但缺点也是没有考虑到单词的顺序

tfidf-weighting word vectors是指对句子中的所有词向量根据tfidf权重加权求和,是常用的一种计算sentence embedding的方法,在某些问题上表现很好,相比于简单的对所有词向量求平均,考虑到了tfidf权重,因此句子中更重要的词占得比重就更大。但缺点也是没有考虑到单词的顺序

LDA模型当然就是计算出一片文档或者句子的主题分布。也常常用于文本分类任务,后面会专门写一篇文章介绍LDA模型和doc2vec的本质不同

2. doc2vec原理

doc2vec是google的两位大牛Quoc Le和Tomas Mikolov在2014年提出的,原始论文地址如下:https://cs.stanford.edu/~quocle/paragraph_vector.pdf

Doc2Vec 或者叫做 paragraph2vec, sentence embeddings,是一种非监督式算法,可以获得 sentences/paragraphs/documents 的向量表达,是 word2vec 的拓展。学出来的向量可以通过计算距离来找 sentences/paragraphs/documents 之间的相似性,可以用于文本聚类,对于有标签的数据,还可以用监督学习的方法进行文本分类,例如经典的情感分析问题。

在介绍doc2vec原理之前,先简单回顾下word2vec的原理

word2vec基本原理

熟悉word2vec的同学都知道,下图是学习词向量表达最经典的一幅图。在下图中,任务就是给定上下文,预测上下文的其他单词。

这里写图片描述

其中,每个单词都被映射到向量空间中,将上下文的词向量级联或者求和作为特征,预测句子中的下一个单词。一般地:给定如下训练单词序列 w1,w2,w3,...,wT w 1 , w 2 , w 3 , . . . , w T , 目标函数是

1T∑T−kt=klogp(wt|wt−k,...,wt+k) 1 T ∑ t = k T − k l o g p ( w t | w t − k , . . . , w t + k )

当然,预测的任务是一个多分类问题,分类器最后一层使用softmax,计算公式如下:
p(wt|wt−k,...,wt+k)=eywt∑ieyi p ( w t | w t − k , . . . , w t + k ) = e y w t ∑ i e y i

这里的每一个 yi y i 可以理解为预测出每个 word w o r d 的概率。因为在该任务中,每个词就可以看成一个类别。计算 yi y i 的公式如下:

y=b+Uh(wt−k,...,wt+k;W) y = b + U h ( w t − k , . . . , w t + k ; W )

这里 U U 和b都是参数,h是将 wt−k,...,wt+k w t − k , . . . , w t + k 级联或者求平均。
因为每个单词都是一类,所以类别众多,在计算softmax归一化的时候,效率很低。因此使用hierarical softmax加快计算速度,其实就是huffman树,这个不再赘述,有兴趣的同学可以看word2vec的paper。

doc2vec基本原理

1. A distributed memory model

训练句向量的方法和词向量的方法非常类似。训练词向量的核心思想就是说可以根据每个单词 wi w i 的上下文预测 wi w i ,也就是说上下文的单词对 wi w i 是有影响的。那么同理,可以用同样的方法训练doc2vec。例如对于一个句子 s: s : i want to drink water,如果要去预测句子中的单词want,那么不仅可以根据其他单词生成feature, 也可以根据其他单词和句子 s s 来生成feature进行预测。因此doc2vec的框架如下所示:

这里写图片描述

每个段落/句子都被映射到向量空间中,可以用矩阵D的一列来表示。每个单词同样被映射到向量空间,可以用矩阵 W W 的一列来表示。然后将段落向量和词向量级联或者求平均得到特征,预测句子中的下一个单词。

这个段落向量/句向量也可以认为是一个单词,它的作用相当于是上下文的记忆单元或者是这个段落的主题,所以我们一般叫这种训练方法为Distributed Memory Model of Paragraph Vectors(PV-DM)

在训练的时候我们固定上下文的长度,用滑动窗口的方法产生训练集。段落向量/句向量 在该上下文中共享。

总结doc2vec的过程, 主要有两步:

  • 训练模型,在已知的训练数据中得到词向量W, softmax的参数 U U 和b,以及段落向量/句向量 D D
  • 推断过程(inference stage),对于新的段落,得到其向量表达。具体地,在矩阵D中添加更多的列,在固定 W W ,U, b b 的情况下,利用上述方法进行训练,使用梯度下降的方法得到新的D,从而得到新段落的向量表达

    2. Paragraph Vector without word ordering: Distributed bag of words

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

    这里写图片描述

    我们称这种模型为 Distributed Bag of Words version of Paragraph Vector(PV-DBOW)

    在上述两种方法中,我们可以使用PV-DM或者PV-DBOW得到段落向量/句向量。对于大多数任务,PV-DM的方法表现很好,但我们也强烈推荐两种方法相结合。

    3. 基于gensim的doc2vec实践

    我们使用第三方库gensim进行doc2vec模型的训练

    # -*- coding: utf-8 -*-
    import sys
    import logging
    import os
    import gensim
    # 引入doc2vec
    from gensim.models import Doc2Vec
    curPath = os.path.abspath(os.path.dirname(__file__))
    rootPath = os.path.split(curPath)[0]
    sys.path.append(rootPath)
    from utilties import ko_title2words
    
    # 引入日志配置
    logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)
    
    # 加载数据
    documents = []
    # 使用count当做每个句子的“标签”,标签和每个句子是一一对应的
    count = 0
    with open('../data/titles/ko.video.corpus','r') as f:
        for line in f:
            title = unicode(line, 'utf-8')
            # 切词,返回的结果是列表类型
            words = ko_title2words(title)
            # 这里documents里的每个元素是二元组,具体可以查看函数文档
            documents.append(gensim.models.doc2vec.TaggedDocument(words, [str(count)]))
            count += 1
            if count % 10000 == 0:
                logging.info('{} has loaded...'.format(count))
    
    # 模型训练
    model = Doc2Vec(documents, dm=1, size=100, window=8, min_count=5, workers=4)
    # 保存模型
    model.save('models/ko_d2v.model')

    接下来看看训练好的模型可以做什么

    def test_doc2vec():
        # 加载模型
        model = doc2vec.Doc2Vec.load('models/ko_d2v.model')
        # 与标签‘0’最相似的
        print(model.docvecs.most_similar('0'))
        # 进行相关性比较
        print(model.docvecs.similarity('0','1'))
        # 输出标签为‘10’句子的向量
        print(model.docvecs['10'])
        # 也可以推断一个句向量(未出现在语料中)
        words = u"여기 나오는 팀 다 가슴"
        print(model.infer_vector(words.split()))
        # 也可以输出词向量
        print(model[u'가슴'])

    以上都是一些比较常见的用法,更多的用法请参https://radimrehurek.com/gensim/models/doc2vec.html

关于命名实体识别的方法对比总结与原理初探 主要作用 优点 缺点 BERT BILSTM BIGRU BERT中demo:如图两个句子的分类任务(MNLI\QQP\QNLI\STS-B\MRPC\RTE\SWAG),单句的分类任务(SST-2\CoLA);问答任务(SQuAD v1.1);单句序列标注任务(CoNLL-2003 NER) 一、BERT 原理初探 原文下载地址:https://arxiv.org... 阅读详情

相关推荐

word2vec、doc2vec的使用

word2vec

静心净气的博客 6173

NLP基础--word2vec的使用Demo

文章目录1.python自带word2vec包的使用1.1 中文分词1.2 word2vec2. gensim之word2vec的使用参考 在网上搜到有直接使用python自带word2vec包,也有使用gensim中的word2vec包。下面就介绍这两种方法。 首先说明我的环境:使用Ubuntu16,python2. 1.python自带word2vec包的使用 数据:来源于搜狗实验室的搜狐新闻数据。下载的是完整版,如下图。 下载下来的文件名为news_sohusite_xml.full.tar.gz。

maqian5的博客 1191

Doc2Vec实战指南:从文档向量化到业务落地

文档向量化是文本语义理解的基础能力,其核心在于将非结构化文本映射为稠密、可计算的向量表示。原理上,它超越词袋模型与平均词向量,通过联合学习文档ID与词汇的分布式表示,捕获上下文、主题及隐式逻辑关系。技术价值体现在语义鲁棒性高、支持无监督聚类与跨文档检索,显著缓解同义词不同形、否定转折等NLP痛点。典型应用场景包括电商评论聚类、法律文书比对、客服对话归因和医疗报告编码。本文聚焦Doc2Vec——这一成熟稳定、轻量可部署的文档向量技术,结合PV-DM与PV-DBOW双路径设计、Gensim工业级实现及中文预处理

weixin_33924220的博客 431

关于doc2vec

原文地址:https://blog.youkuaiyun.com/john_xyz/article/details/79208564   1.“句向量”简介 word2vec提供了高质量的词向量,并在一些任务中表现良好。  关于word2vec的原理可以参考这几篇论文: https://arxiv.org/pdf/1310.4546.pdf https://arxiv.org/pdf/1301.37...

大脸猫的博客 1112

【LangChain编程:从入门到实践】文本嵌入

1. 背景介绍 文本嵌入(Text Embedding)是自然语言处理(NLP)的一个核心技术,用于将文本转换为连续的向量表示,以便在计算机上进行处理。文本嵌入可以帮助我们理解和分析文本数据,进行各种自然语言处理任务,如文本分类、文本聚类、文本搜索等。 LangChain是一个开源的Python框架,提供了许多用于构建自然语言处理应用程

AI天才研究院 548

Word2Vec和Doc2Vec模型:原理、应用及代码示例

Word2Vec和Doc2Vec是两种常用的词向量模型,它们可以将文本中的词语表示为连续向量,从而实现文本的语义建模和相似度计算。Doc2Vec模型是在Word2Vec的基础上扩展而来的,它可以学习到文档的向量表示。在Doc2Vec模型中,每个文档对应一个特定的向量,而每个单词也有自己的向量。在Word2Vec模型中,词向量的训练目标是使得具有相似上下文的词在向量空间中距离较近。句子匹配:将句子表示为向量后,可以通过计算向量之间的相似度来衡量句子之间的语义相似度,从而实现句子匹配和语义匹配等任务。

KdpdCode的博客 488

doc2vec原理

doc2vec和word2vec类似,Doc2vec也有两种训练方式,分别是Distributed Memory(DM) 和 Distributed Bag of Words(DBOW)。 DM 试图在给定上下文和段落向量的情况下预测单词的概率,与word2vec中CBOW类似,在一个句子或者文档的训练过程中,段落 ID 保持不变,共享着同一个段落向量; DBOW 则在仅给定段落向量的情况下预测段落中一组随机单词的概率,与word2vec中skip-gram类似。 1.DM模型 训练过程中新增了paragr

orangerfun的博客 1414

38、深入理解词嵌入:从理论到实践

本文深入探讨了词嵌入技术的核心模型与实践应用,涵盖Word2vec的CBOW和Skip-Gram架构、GloVE与Doc2vec模型原理,并详细解析了负采样、分层softmax等优化方法。通过SEC文件分析和Yelp评论情感分类等实际案例,展示了词向量在金融算法交易和文本分类中的价值。文章还介绍了使用gensim和Keras进行模型训练、TensorBoard可视化以及参数调优策略,最后展望了词嵌入在Transformer架构、多模态融合与领域自适应方面的未来趋势,为自然语言处理任务提供了全面的技术参考。

sky77的博客 53

【NLP】doc2vec原理及实践

点击上方,选择星标或置顶,每天给你送干货!阅读大概需要7分钟跟随小博主,每天进步一丢丢作者:Johnson0722链接:https://blog.youkuaiyun.com/John_xyz/a...

zenRRan的博客 668

精通DC-DC变换器:Boost升压电路全解析

Boost升压变换器是一种将低直流电压转换为高直流电压的常用电路。其核心工作原理是通过电感储能:开关导通时电感充电,关断时电感与电源串联向负载供电。关键公式表明输出电压Vo=Vi/(1-D),占空比D越大,升压比越高。变换器工作时会产生电感电流纹波和输出电压纹波,需合理选择电感和电容参数。开关管和二极管需承受完整的输出电压,对元器件选型要求较高。理解这些原理是设计高效升压电源的基础。

2511_92918351的博客 3709

AS7262六通道可见光传感器:从光谱原理到物联网色彩检测实战

光谱检测是嵌入式感知领域的关键技术,其核心原理是通过特定波长的滤光片分离光线并转换为电信号,从而实现对环境光或物体反射光的成分分析。这项技术的价值在于将复杂的光学分析简化为可编程读取的数字信号,极大降低了色彩检测在物联网和智能设备中的应用门槛。在智能农业、工业分拣、环境监测等场景中,精确的光谱数据能够驱动自动化决策,例如评估植物光照条件或识别物料颜色。本文以Adafruit AS7262传感器为例,深入解析其基于硅干涉滤光片的六通道设计,并通过Arduino与Python实战,演示如何快速构建从数据采集到可

weixin_28738173的博客 596

Doc2vec原理解析及代码实践

本文概览:1. 句子向量简介Word2Vec提供了高质量的词向量,并在一些任务中表现良好。虽然Word2Vec提供了高质量的词汇向量,但是仍然没有有效的方法将它们结合成一个高质量的文档向...

abcdefg90876的博客 1378

麒麟V10桌面操作系统安装Qt5.12.3

在虚拟机中如何安装麒麟V10桌面系统,以及在麒麟系统中安装Qt框架,并正常编译运行Qt程序

阿龙的思考 3599

【NLP】Doc2vec原理解析及代码实践

本文概览:1. 句子向量简介Word2Vec提供了高质量的词向量,并在一些任务中表现良好。虽然Word2Vec提供了高质量的词汇向量,但是仍然没有有效的方法将它们结合成一个高质量的文档向...

fengdu78的博客 2221

【强化学习】常用算法之一 “A3C”

A3C(Asynchronous Advantage Actor-Critic)算法是一种在强化学习领域中应用广泛的算法,它结合了策略梯度方法和价值函数的学习,用于近似解决马尔可夫决策过程(Markov Decision Process)问题。A3C算法在近年来备受关注,因为它在处理大规模连续动作空间和高维状态空间方面具有出色的性能。A3C算法是一种基于策略梯度的强化学习算法,通过多个并行的智能体异步地与环境交互,并利用Actor和Critic网络实现策略和价值的近似,从而实现快速而稳定的强化学习训练。

Code_and516的博客 6757

cadence capture CIS 之使用access创建数据库(.mdb)

cadence capture CIS 之使用access创建数据库(.mdb)准备工作新建数据库 准备工作 1、一台电脑; 2、安装 Microsoft access database; 新建数据库 打开你准备创建数据库的位置,右键单击——》新建——》 Microsoft access database(注意:文件格式要选*.mdb) 打开数据库文件,创建——》表; 对数据表进行编辑,编辑表头、编辑表的内容、增加表的数量; 编辑表头:选中要编辑的表——》表设计 编辑内容:类似于excel添

weixin_42256550的博客 3148

Gensim Doc2Vec 教程:把文档变成向量,轻松实现文档相似度搜索与分类

Gensim 是 Python 中最流行的自然语言处理库,而它的 **Doc2Vec(段落向量)** 模块可以把任意文档转换成一串数字组成的向量,从而实现**文档相似度搜索**与**文档分类**。本文面向新手,用最少代码带你走完「训练模型 → 搜相似文档 → 做分类」完整流程,并给出关键参数速查表和官方示例入口。 ## Doc2Vec 是什么:30秒看懂文档向量原理 想象每篇文档都有一把「语义

gitblog_01195的博客 316

告别“盲开”:手把手教你用MCU内置比较器搞定BLDC无感方波启动(附代码片段)

本文详细介绍了如何利用MCU内置比较器实现BLDC无感方波启动,解决传统无传感器控制中的'盲开'问题。通过虚拟中性点电路设计和三段式启动流程,结合反电动势检测和过零检测技术,提供了一套经济高效的解决方案,并附有可直接移植的代码片段,助力工程师快速实现可靠的无感控制。

weixin_33694172的博客 503

Doc2vec

Doc2vec是Mikolov2014年提出的论文,也被成为Paragraph Vector,下面的内容分为三方面进行介绍,分别为: Doc2vec的原理 Doc2vec在推荐系统中的应用启发 Doc2vec的算法实现 1、Doc2vec的算法原理 如何学习得到Word的Vector表示 一个非常流行的学习Word Vector的方法如下图所示: Doc2vec的两种算法 Doc2vec其实包含了两种算法: PV-DM(Distributed Mem...

mudan97的博客 1075

Vue3 - 详解实现网站接入钉钉扫码登录功能,钉钉授权生成登录二维码用户用手机扫描二维码登陆,支持弹框式、浏览器单独新开页显示,钉钉扫描二维码登录详细流程及示例代码,最新vue集成钉钉扫码授权登录!

vue3,nuxt3,钉钉,扫码登录,vue3钉钉扫码登陆,钉钉授权第三方WEB网站扫码登录功能,钉钉扫码登录第三方网站,单点登录,二维码不显示,报错,扫了没反应,出错,vue3钉钉扫码登录,内嵌,获取个人信息,pc网页钉钉登录,钉钉扫码登录怎么新开一页,跳页显示二维码,内嵌登录二维码,iframe新页面弹出,弹出一个小窗口显示登录二维码,登录报错,扫码没反应,解决手机点登录报错没反应,官方文档,手机扫描钉钉二维码登录网站,页面弹出一个小窗口而不是打开一个页面,vue3中使用iframe实现另开小窗口扫码登

🏆 前端领域优质创作者 3695

YOLO车辆测距、车辆识别与单目测距

YOLO(You Only Look Once)是一种实时物体检测系统,能够识别视频或图像中的多个对象,并确定其位置。结合车辆识别与单目测距技术,YOLO可以用于交通监控、自动驾驶等应用场景,通过单个摄像头实现车辆的识别与距离测量。YOLO结合单目测距技术,在多个应用领域展现出巨大的潜力与灵活性。其实时性和准确性为智能交通、自动驾驶等领域提供了强有力的技术支持。

走向CTO的路上... 1691

Doc2Vec实战指南:从文档向量化到业务决策落地

文档向量化是处理非结构化文本的核心技术,其原理在于为整篇文档学习一个可训练的语义ID向量,而非简单平均词向量。相比TF-IDF或词向量拼接,Doc2Vec能建模词序、上下文共现与文档级语义结构,具备天然的相似性度量能力。该技术在用户反馈聚类、知识库语义检索、客服工单路由等场景中展现出显著工程价值,尤其适用于中短文本密集型任务。本文聚焦PV-DM与PV-DBOW两种主流实现的选型逻辑、预处理关键细节(如专业词保留、长度归一化)、模型参数调优经验(vector_size=200、dbow_words=1),并结

weixin_29051811的博客 337

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

doc2vec 简介

1.简介word2vec 是词汇级别的, 那么如何延伸下去, 得到句子, 段落, 文档级别的分布式向量表示呢? Sentences vector, Paragraph Vector, Documents vector 几个概念差不多, 很多时候可以混用. Quoc Le 和 Tomas Mikolov(搞出Word2vec的家伙)两位大牛在2014年的《Distributed Represent

yichudu 2977

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

视频教程-NLP——实战文本向量-NLP

NLP——实战文本向量 从事软件开发行业二十余年,创业公司做过,上市公司也干...

weixin_33530096的博客 137

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

上一篇: thrift实战教程
下一篇: TextCnn原理及实践
Johnson0722
博客等级 码龄10年 459粉丝 108原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值