Doc2Vec的简介及应用(gensim)

article/2025/8/23 19:53:39

作者:Gidi Shperber

在本文中,你将学习什么是doc2vec,它是如何构建的,它与word2vec有什么关系,你能用它做什么,并且没有复杂的数学公式。

介绍 

文本文档的量化表示在机器学习中是一项具有挑战性的任务。很多应用都需要将文档量化处理,例如:文档检索,web搜索,垃圾邮件过滤,主题建模等。

但是,要做到这一点好的方法不多。很多方法使用众所周知但简单化的词袋方法(BOW),但结果将大多是很一般,因为BOW在很多方面没有考虑周全,例如没有考虑单词排序。

潜在Dirichlet分配(LDA)也就是主题建模(从文本中提取主题/关键字)的常用技术,但它很难调整,结果很难评估。

在这篇文章中,我将回顾doc2vec方法,这是一个由Mikilov和Le在2014年提出的概念,我们会在本文中多次提及。值得一提的是,Mikilov也是word2vec的作者之一。

Doc2vec是一个非常好的技术。它易于使用,效果很好,而且从名称上可以理解,很大程度上基于word2vec。所以我们首先简单介绍一下word2vec。

word2vec

word2vec是一个众所周知的概念,用于将单词转换成用户向量来表示。

关于word2vec有很多关于word2vec的好教程,比如这个和还有这个,但是如果描述doc2vec时不涉word2vec的话会忽视很多东西,所以在这里我会给word2vec做个简介。

一般来说,当你想用单词构建一些模型时,只需对单词进行标记或做独热编码,这是一种合理的方法。然而,当使用这种编码时,词语的意义将会失去。例如,如果我们将“巴黎”编码为id_4,将“法国”编码为id_6,将“权力”编码为id_8,则“法国”将与“巴黎”具有“法国”和“权利”相同的关系。但事实上我们更希望在词义上“法国”和“巴黎”比“法国”和“权力”更接近。

word2vec,在本文中于2013年提出,旨在为您提供:每个单词的向量化表示,能够捕获上述关系。这是机器学习中更广泛概念的一部分 - 特征向量。

这种表示形式包含了单词之间的不同关系,如同义词,反义词或类比,如下所示:

                                               

                 图1.国外与王后就像于男人与女人,如果创建word2vec时不考虑这种关系,那是错误的 。

 

Word2vec 算法

word2vec有2种算法:连续词袋模型(CBOW)和Skip-Gram模型。

连续词袋模型(CBOW)

连续词袋模型会在当前单词的周围创建一个滑动窗口,从“上下文” -也就是用它周围的单词预测当前词。 每个单词都表示为一个特征向量。 经过训练以后后,这些向量就成为单词向量。

                                           

                           图2.CBOW算法草图:用用周围的(上下文)单词“the”“cat”“sat”来预测当前的单词“on” 

正如前面所说的,相似单词的向量以不同的距离相互靠近,而且它们还包含了数值上的关系,例如来自上方的king-queen = man。

Skip gram

第二种算法(在同一篇论文中描述,并且在这里很好地解释)实际上与CBOW相反:我们不是每次都预测一个单词,而是使用1个单词来预测周围的单词。 Skip gram比CBOW慢得多,但是对于不经常使用的单词,它被认为更准确。

                                               

                                                图2.Skip-gram模型,用一个词来预测它周围的词   

Doc2vec

在了解word2vec之后,将更容易理解doc2vec的工作原理。

如上所述,doc2vec的目标是创建文档的向量化表示,而不管其长度如何。 但与单词不同的是,文档并没有单词之间的逻辑结构,因此必须找到另一种方法。

Mikilov和Le使用的概念很简单但很聪明:他们使用了word2vec模型,并添加了另一个向量(下面的段落ID),如下所示:

                                               

                                                                               图3. PV-DM 模型

如果您对上面的草图感到熟悉,那是因为它是CBOW模型的一个小扩展。 它不是仅是使用一些单词来预测下一个单词,我们还添加了另一个特征向量,即文档Id。

因此,当训练单词向量W时,也训练文档向量D,并且在训练结束时,它包含了文档的向量化表示。

上面的模型称为段落向量的分布式记忆的版本(PV-DM)。 它充当记忆器,它能记住当前上下文中缺少的内容 - 或者段落的主题。 虽然单词向量表示单词的概念,但文档向量旨在表示文档的概念。

如在doc2vec中,另一种类似于skip-gram的算法,段落向量的分布式词袋版本(PV-DBOW)

                                            

                                                                            图4.PV-DBOW模型 

 

该算法实际上更快(与word2vec相反)并且消耗更少的内存,因为不需要保存词向量。

在论文中,作者建议使用两种算法的组合,尽管PV-DM模型是优越的,并且通常会自己达到最优的结果。

doc2vec模型的使用方式:对于训练,它需要一组文档。 为每个单词生成词向量W,并为每个文档生成文档向量D. 该模型还训练softmax隐藏层的权重。 在推理阶段,可以呈现新文档,并且固定所有权重以计算文档向量。

评估模型和一些想法

这种无监督模型的问题在于,他们没有接受过训练来完成他们想要的任务(因为没有标签)。 例如,训练word2vec以完成语料库中的周围单词记忆,但它常用于估计单词之间的相似性或相互关系。 因此,测量这些算法的性能可能具有挑战性。 我们已经看到了“国王与王后就像男人和女人”的例子,但我们想要形成一种严格的方式来评估机器学习模型。

因此,在训练这些算法时,我们应该注意相关的指标。 word2vec的一个可能的度量标准是对上述示例的概括,并且被称为类比推理。 它包含许多类比组合,这里有一些:

  • happy happily — furious furiously
  • immediate immediately — infrequent infrequently
  • slowing slowed — sleeping slept
  • spending spent — striking struck

我们要做的就是在计算这些可类比的单词时要让这些单词对之间的距离非常接近。

数据集可在http://download.tensorflow.org/data/questions-words.txt 获得。

论文中描述在2个任务中测试了Doc2vec:第一个是情感分析任务,第二个类似于上面的类比推理任务。

这是文章中的3段。 这些段落的数据集用于比较模型。 很容易看出哪两段内容应该更接近:

                             

这个数据集(据我所知没有共享)它用于比较一些模型,而doc2vec的效果是最好的: 

                                        

现实生活中的应用 - ScaleAbout

我的一个客户ScaleAbout使用机器学习方法将YouTube视频“影响者”与文章内容进行匹配。 Doc2vec似乎是这种匹配的比较好方法。 

以下是ScaleAbout所做的一个示例,它根据文章的内容来推荐视频,如在一篇文章描述如何制作树桩灯,那么你便可以在文章在底部看到4个关于木工工作的相关视频:

                     

 ScaleAbout的模型使用打标机制来为视频和文章(“主题建模”)打上标签然后测量标签之间的距离。

ScaleAbout有一些文本语料库,与其客户的主题相关。 例如,对于诸如文章的发布者,存在关于“DIY”的100K左右的手动打标的文档。 每篇文章有17种可能的标签(例如,“家居装饰”,“园艺”,“重塑和翻新”等)。 对于这个实验,我们决定尝试使用doc2vec和其他一些模型来预测标签。

ScaleAbout目前的最佳模型是一个卷积神经网络,在word2vec之上,在预测文档的标签时达到了大约70%的准确率。

Doc2vec模型本身是一种无监督的方法,所以应该稍微调整一下“参与”这个比赛。 幸运的是,在大多数情况下,我们可以使用一些技巧:如果你还记得,在图3中我们添加了另一个文档向量,它对每个文档都是唯一的。 如果你考虑一下,可以添加更多的向量,这些向量不必是唯一的:例如,如果我们有文档的标签(就像我们实际拥有的那样),我们可以添加它们,并将它们表示为向量。

此外,它们不必是唯一的。 这样,我们可以将17个标签中的一个添加到唯一文档标签中,并为它们创建doc2vec表示! 如:

                                      

                                                                         图5.使用tag向量的doc2vec 模型

我们将使用doc2vec的gensim实现。 这是gensim TaggedDocument对象的样子: 

 使用gensim doc2vec非常简单。 与往常一样,模型应该初始化,训练几个周期:

然后我们可以检查每个唯一文档与每个标签的相似度,就像这样: 

          

 

它将预测与文档具有最高相似度的标签。

使用这种方法,我们只训练了100K文章中的10K文档,我们达到了74%的准确率,比以前更好。

总结

我们已经看到,通过一些调整,我们可以从已经非常有用的word2vec模型中获得更多。 这很好,因为如前所述,在我看来,标记和匹配文档的表示还有很长的路要走。

此外,这表明这是一个很好的例子,说明机器学习模型如何在他们训练的特定任务之外封装更多的能力。 这可以在深度CNN中看到,其被训练用于对象分类,但是也可以用于语义分割或聚类图像。

总而言之,如果您有一些与文档相关的任务 - 这对您来说可能是一个很好的模型!

原文链接

 


http://chatgpt.dhexx.cn/article/M6gbsOIL.shtml

相关文章

Doc2Vec模型介绍及使用

Doc2Vec模型 Doc2Vec模型 摘要背景段落向量 PV-DM模型PV-DBOW模型gensim实现Doc2Vec说明参考文献摘要 通过本文,你将了解到: Doc2Vec模型是如何产生的Doc2Vec模型细节Doc2Vec模型的特点Doc2Vec的使用及代码(gensim)背景 Doc2Vec模型的产生要从词向量表示(论文word2vec模型)开…

Doc2Vec - 计算文档之间的相似性

本文旨在向您介绍 Doc2Vec 模型,以及它在计算文档之间的相似性时如何提供帮助。 目录 前言 一、Word2Vec 1.Skip-Gram 2.Continuous Bag-of-Words (CBOW) 二、Doc2Vec 1.Distributed Memory version of Paragraph Vector (PV-DM) 2.Words version of Paragra…

Doc2Vec模型的介绍与gensim中Doc2Vec的使用

文章目录 一、Doc2Vec模型1 、PV-DM2 、PV-DBOW 二、gensim实现1、gensim实现Doc2Vec(IMDB数据集)2、gensim实现Doc2Vec(中文数据集) 三、总结四、程序编写时遇到的错误:gensim包中相关函数说明: 参考资料&…

如何自学游戏引擎的开发?

PS:题猪分得清游戏和游戏引擎的区别,所以各位答主不需要劳神解释两者的区别关系什么的了 PS:这里的游戏引擎暂时指图形模块,其他的声音,物理,网络,UI等等模块暂时不考虑 题猪一直自学编程&#…

游戏开发完整学习路线(各个版本都有)

来自:微浪科技 作者:若朝若曦 在软件开发中,游戏开发这个方向看起来目标很明确,但其实是个领域很广的方向,入门的时候如果得不到指点一二,很容易误入歧途,相反,如果走这条路之前能…

智力开发小游戏集含游戏过程中数据存取-C#入门教学程序

对于初学C#程序开发的学员,一般进行采取开发小游戏程序,这样做首先不会让学员失去学习的兴趣,其次可以将C#中基本的控件与类的写法整合到这些游戏程序中,再次将对数据库的操作也教给学员。通过几年的观察这样的教学有它的好处。所…

游戏开发所需要的知识

从放弃求职回家已经一个半月了,一直都在备考事业编。发现这玩意比游戏开发简单太多了,没有人刁难,没有人催促,几个月举办一次,一天只需要学习3-4个小时,其余时间都是自由安排,太舒服了。考上编后…

零基础游戏开发笔记1——游戏开发流程

万事开头难,多学多练习,熟悉游戏开发的主要流程,莫要强行记忆。 首先,我们来了解一下游戏的开发流程。 第一就是立案,建立策划案。 策划案包含很多东西,包括游戏介绍、游戏内容、游戏模型介绍、游戏数值、…

游戏开发流程之完整指南

“现在,是时候改进您的游戏开发流程了。在这里,无论您是在独立的初创公司亦或大型游戏工作室中,我们都可以调度资源,使您的工作室的开发和设计工作晋升一个层次。” 您可以把本指引当做游戏开发流程改进的参考 我们将覆盖所有您…

游戏开发笔记(二)——开发流程和项目管理

前一篇说到分工,这里再说说流程和开发管理。 组织形式 从公司角度来看一个游戏工作室是一个业务比较独立的研发部门,研发方面的大小事务(除了立项)拥有高度自治权。而从一个工作室角度来看,通常内部又由多个项目组组成…

游戏开发 - 开发流程 - 收集

1.应用场景 主要用于了解,掌握游戏开发的整个流程。 2.学习/操作 1.文档阅读 复习课 | 带你梳理客户端开发的三个重点-极客时间 2.整理输出 2.1 游戏开发流程 -- 参考 按照游戏开发中的三大模块策划、程序、美术,画了一个图。 开发游戏的时候&#xf…

游戏开发完整流程

1. 立项 一个项目立项的原因可能性非常多,有可能是公司拿到一个好的IP,也有可能是几个负责人有个很棒的idea,亦或是老板的梦想是做一个XX类型的游戏,这边不做过多的讨论。 立项过程中应该包含市场调查和产品定位&#xff0c…

如何开发一款游戏?【游戏开发所需技能和开发流程】

开发一款游戏需要的技能包括:编程、设计、音效和项目管理。每个角色都需要掌握其特定领域的知识和技能,并与其他团队成员合作。在本文中,我们将深入探讨如何开发一款游戏。 1. 游戏开发流程 游戏开发流程可以分为以下几个阶段: …

如何开发一款游戏:游戏开发流程及所需工具

本文来自作者 goto先生 在 GitChat 上分享 「如何开发一款游戏:游戏开发流程及所需工具」 编辑 | 哈比 游戏作为娱乐生活的一个方面,参与其中的人越来越多,而大部分参与其中的人都是以玩家的身份。 他们热爱一款游戏,或是被游戏的…

文本识别CRNN模型介绍以及pytorch代码实现

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、CRNN模型介绍1.模型结构2.CTCLossbeam search 二、使用pytorch实现crnn数据集 前言 文本识别是图像领域的一个常见任务,场景文字识别OCR任务中…

crnn 学习笔记

常用文本识别算法有两种: CNNRNNCTC(CRNNCTC)CNNSeq2SeqAttention 其中CTC与Attention相当于是一种对齐方式,具体算法原理比较复杂,就不做详细的探讨。其中CTC可参考这篇博文,关于Attention机制的介绍&am…

智能驾驶 车牌检测和识别(三)《CRNN和LPRNet实现车牌识别(含车牌识别数据集和训练代码)》

智能驾驶 车牌检测和识别(三)《CRNN和LPRNet实现车牌识别(含车牌识别数据集和训练代码)》 目录 智能驾驶 车牌检测和识别(三)《CRNN和LPRNet实现车牌识别(含车牌识别数据集和训练代码&#xf…

pytorch(11)-- crnn 车牌端到端识别

车牌图片端到端识别 一、前言二、数据集处理三、crnn模型文件四、训练验证代码五、测试代码六、代码搬自 一、前言 本文主要记录了使用crnn 对车牌图片做端到端识别,即不用对车牌字符做逐个字符分割识别,车牌第一个字符为汉字,共有31个&#…

CRNN 论文翻译

《An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition》论文翻译 摘要 基于图像的序列识别一直是计算机视觉中长期存在的研究课题。在本文中,我们研究了场景文本识别的问题,…

CRNN算法详解

《An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition》,是比较老的一篇文章了,在2015年6月发表在arxiv上,但是该方法还是被广泛运用。 文章思想:文章…