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

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

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


doc2vec论文方法解析及基于Gensim库的Python代码实现 文章目录一、全文概述二、word2vec三、doc2vec1. PV-DM2. PV-DBOW三、Python代码实现 本文主要讲解Mikolov在2014年发表的论文《Distributed Representations of Sentences and Documents》,论文主要是基于word2vec方法的一种改进,建议在理解word2vec的基础再来看这篇文章。 一、全文概述 基于wo... 阅读详情

相关推荐

利用英文wiki数据训练Doc2vec模型

1、语料库准备 从此处下载英文维基百科数据,是xml压缩包的形式,下载文件,以enwiki-latest-pages-articles1.xml-p10p30302.bz2为例: 由于是压缩包,所以需要进行预处理,变成文本的形式。在cmd下切换到这个压缩包文件存放的目录下,运行命令: python process_wiki.py enwiki-latest-pages-articles1.xml-...

开开_王子的博客 4609

Python中的Doc2Vec文本向量化技术

Doc2Vec是一种文本向量化技术,它可以将不定长的文本转换为定长的向量表示,方便于机器学习算法对文本进行处理和分析。Python中有现成的Doc2Vec实现,我们可以使用gensim库快速的实现Doc2Vec模型的训练和应用。这里我们简单的使用gensim自带的预处理函数进行处理。除了转换新文本外,我们还可以使用model.docvecs.most_similar方法查找与指定文本最相似的文本。至此,我们成功的使用Python中的Doc2Vec技术将文本转换为向量表示,并进行了简单的应用。

laugh666的博客 606

python根据关键词实现信息检索推荐(使用深度学习算法)

算法中最主要的是用到了gensim.models.doc2vec将信息存储成词典进行建模并将信息文件转存到数据库中供其他代码使用。因为注释写的比较清晰。所以逻辑不再赘述,直接上代码看看就知道啦~因为在前面的算法中已经对数据库操作类进行了描述,这里就不再黏贴出来,有需要的亲可以翻看以前的文章参考即可~算法代码如下: import tensorflow as tf import os impor...

忆浅曦 1万+

使用Python进行doc2vec文本向量化

在自然语言处理(NLP)中,文本向量化是一项重要的任务,它将文本转换为数值表示形式,以便机器学习算法可以对其进行处理。在这篇文章中,我们将介绍如何使用Python中的gensim库进行文本向量化,具体来说是使用doc2vec算法。通过文本向量化,我们可以将文本转换为数值表示形式,以便进行各种NLP任务的处理。通过文本向量化,我们可以将文本转换为数值表示形式,以便进行各种NLP任务的处理。训练完成后,我们可以使用训练好的模型来获取文本的向量表示。在这个例子中,我们找到了与给定文本最相似的5个文本。

CyberGenius的博客 557

word2vec和doc2vec模型详解及应用

词袋模型(Bag of Word Model) 将所有词语装进一个袋子里,不考虑其词法和语序的问题,即每个词语都是独立的。例如如下2个例句: Jane wants to go to Shenzhen. Bob wants to go to Shanghai. 就可以构成一个词袋,袋子里包括{ Jane,wants,to,go,Shenzhen,Bob,Shangh...

L 1686

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

如果我们将上下文数据转换为低维向量,并且当我们谈论将文本文档转换为其数字表示时,这就是doc2vec模型发挥作用的地方,自然语言处理领域有许多具有挑战性的任务可以完成。但是,我们可以使用doc2vec完成许多任务,但今天我们只专注于计算文档之间的相似性,以便您能够识别抄袭文档,获得相似文章的推荐等等。Doc2vec是一种无监督机器学习算法,用于将文档转换为向量。这个概念是由Mikilov和Le在本文中提出的。我们已经看到使用doc2vec模型可以获得很多帮助。httpshttps。............

qq_43483899的博客 7947

Doc2Vec模型的介绍与gensimDoc2Vec的使用

文章目录一、Doc2Vec模型1 、PV-DM2 、PV-DBOW二、gensim实现1、gensim实现Doc2Vec(IMDB数据集)2、gensim实现Doc2Vec(中文数据集)三、总结四、程序编写时遇到的错误:gensim包中相关函数说明: 一、Doc2Vec模型   许多机器学习算法需要的输入是一个固定长度的向量,当涉及到短文时,最常用的固定长度的向量方法是词袋模型(bag-of-wo...

潘多拉星系的专栏 1万+

基于gensimDoc2Vec\word2vec简析,以及用python 实现简要代码

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

IT届的小学生 9710

gensim doc2vec计算文本相似度,Python可以跑通的代码

Python3.7版本,转载自:https://blog.csdn.net/juanjuan1314/article/details/75124046 wangyi_title.txt文件下载地址:链接:https://pan.baidu.com/s/1uL75P13t98YHMqgv3Kx7TQ  密码:oqxt 对原文有修改,原文代码Python2,有很多问题。 # coding:u...

湾区人工智能 4698

Python学习笔记-gensim初识Word2Vec、Doc2Vec

安装依赖工具包: pip install -U gensim 安装过程中出现已经安装过的工具包冲突可以uninstall或删除Lib目录下相关包或使用: pip install -U gensim --ignore-installed scipy Word2Vec、Doc2Vec原理可以参考链接: https://blog.csdn.net/mpk_no1/article/details...

PURSUE ONE PIECE 896

doc2vec java_doc2vec

gensim 是处理文本的很强大的工具包,基于python环境下:1.gensim可以做什么?它可以完成的任务,参加gensim 主页API中给出的介绍,链接如下:http://radimrehurek.com/gensim/apiref.html2.word2vec的使用其中学习词向量的方法可利用,word2vec,具体使用我爱自然语言中介绍的很清楚,如下链接:http://ju.outofme...

weixin_39943383的博客 220

python 文本相似度_【机器学习】使用gensimdoc2vec 实现文本相似度检测

环境Python3,gensim,jieba,numpy ,pandas原理:文章转成向量,然后在计算两个向量的余弦值。Gensimgensim是一个python的自然语言处理库,能够将文档根据TF-IDF, LDA, LSI 等模型转化成向量模式,gensim实现了word2vec功能,以便进行进一步的处理。中文分词中文需要分词,英文就不需要了,分词用的 jieba 。def segment(...

weixin_39734048的博客 478

python3 doc2vec文本聚类实现

import sys #doc2vev import gensim import sklearn import numpy as np from gensim.models.doc2vec import Doc2Vec, LabeledSentence TaggededDocument = gensim.models.doc2vec.TaggedDocument ...

weixin_30834783的博客 666

大莽大哥的python NLP 库 Gensim 讲解与代码演示

pythongensim模块的使用,生成word2vec,doc2vec和doc2bow

gwgwg2000wzh的博客 987

doc2vec

doc2vec使用说明(一)gensim工具包TaggedLineDocument gensim 是处理文本的很强大的工具包,基于python环境下: 1.gensim可以做什么? 它可以完成的任务,参加gensim 主页API中给出的介绍,链接如下: http://radimrehurek.com/gensim/apiref.html 2.word2vec的使用...

a1346231的专栏 163

Word2Vec和Doc2Vec模型详解及应用

Doc2Vec模型是Word2Vec的扩展,用于学习文档(段落、句子)的向量表示。Word2Vec和Doc2Vec是基于神经网络的自然语言处理模型,用于将文本数据转换为向量表示。综上所述,Word2Vec和Doc2Vec模型是强大的自然语言处理工具,可以将文本数据转换为向量表示,从而应用于各种文本挖掘和信息检索任务中。通过使用相应的库和示例代码,我们可以轻松地构建和训练这些模型,并将它们应用于实际问题中。Skip-gram模型与CBOW相反,它的训练目标是根据当前目标词预测周围的上下文词。

PzBlockchain的博客 533

22.6.7成功使用doc2vec模型生成嵌入向量

1.解决问题2.代码 结果:其中依赖gensim为3.8.3。

HWP 632

doc2vct算法实现

本篇文章主要是实现Python 自然语言处理包 gensim 中用于长文本向量建模的 doc2vec算法。示例代码如下:#!/usr/bin/env python3 # -*- coding: utf-8 -*-import logging import multiprocessing import os.path import sysfrom gensim import utils from g

Lionel的博客 956
上一篇: 【译文】特征选择方法导论(如何选取合适的变量)
下一篇: R语言基础:因子和有序因子
banlucainiao
博客等级 码龄11年 318粉丝 31原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值