精华内容
下载资源
问答
  • doc2vec

    2021-04-08 11:10:41
    万物皆可Embedding系列会结合论文和实践经验进行介绍,前期主要集中在论文中,后期会加入实践经验和案例,目前已更新: 万物皆可Vector之语言模型:...Doc2vec是Mikolov2014年提出的论文,也被成为Paragraph Vecto.

    万物皆可Embedding系列会结合论文和实践经验进行介绍,前期主要集中在论文中,后期会加入实践经验和案例,目前已更新:

     

    Doc2vec是Mikolov2014年提出的论文,也被成为Paragraph Vector,下面的内容分为三方面进行介绍,分别为:

    • Doc2vec的原理

    • Doc2vec在推荐系统中的应用启发

    • Doc2vec的算法实现

    1、Doc2vec的算法原理

    如何学习得到Word的Vector表示

    一个非常流行的学习Word Vector的方法如下图所示:

    Doc2vec的两种算法

    Doc2vec其实包含了两种算法:

    • PV-DM(Distributed Memory Model of Paragraph Vector)

    • PV-DBOW(Distributed Bag of Words version of Paragraph Vector)

    PV-DM 」

    PV-DM类似于Word2vec中的CBOW模型,其结构图如下所示:

    图片

    PV-DM

    和上面的图中区别是,增加了段落的vector,即 函数  利用了矩阵 和中的向量,矩阵 表示的段落向量矩阵, 表示的是word的向量矩阵。

    Paragraph vector在这里扮演的是一个记忆的角色,因此为在词袋模型中,每次训练只会截取段落的一小部分进行训练,而忽略本次训练之外的单词,这样仅仅训练出来每个词的向量表达,段落只是每个词的向量累加在一起表达的,这里使用Paragraph vector可以在一定程度上弥补词袋模型的缺陷。

    PV-DM模型的输入是固定长度的,其从段落的上下文的滑动窗口中进行采样,这一点和Word2vec是一致的,在基于同一段落构造好的样本中, 段落的向量是共享的,但是在基于不同段落构造好的样本中,段落的向量是不共享的。在所有的样本中,word的向量是一致的(共享的)。

    在整个训练过程中,paragraph vector能够记忆整个句子的意义,word vector则能够基于全局部分学习到其具体的含义。

    PV-DBOW」

    PV-DBOW类似于Word2vec中的Skip-gram模型,其结构图如下所示:

    PV-DBOW

    和PV-DM不同的是,这里使用的是段落的向量来预测单词。

    如何预测新句子的vector」

    模型完成训练之后,可以得到段落的向量、word的向量和相关的参数,对于需要预测段落,会将paragram vecotr进行随机的初始化,放入模型中再重新根据随机梯度下降不断迭代求得最终稳定下来的段落向量。

    不过在预测过程中,模型里的词向量、投影层到输出层的softmax weights参数是不会变的,这样在不断迭代中只会更新Paragraph vector,其他参数均已固定,只需很少的时间就能计算出带预测的Paragraph vector。

    实验中注意的点

    • word vector之间的聚合使用的是连接

    • window size 设置值为8

    • vector size 设置的是400

    • 论文中进行实验使用的是PV-DM和PV-DBOW向量连接

    2、在推荐系统中的应用启发

    结合不同模型的vector

    之前在别的文章中也看到过说 使用不同模型产出的vector,比如针对word2vec中CBOW和Skip-gram模型,产出两套vector,在使用时,可以进行求平均或者进行连接

    同样在这篇论文中,作者也给出了拼接方式的效果验证,效果是要优于单独使用一种的。

    Doc2vec迁移到 User2vec

    将NLP相关的知识应用在推荐系统中本身已经司空见惯了,但是我们可以转变一种思路,将这种思想迁移到user-item上,比如针对用户的点击序列,可以理解为段落里边的一个个word,用户本身可以理解为段落,通过这种方式便可以构造出user和item的向量,因为其是在一个向量空间下的,可以直接通过余弦相似度进行user到items的召回

    vector表示用作他用

    针对产出的word或者doc vector,可以将其用户分类、聚类其中的特征,这一点可以参考Item2vec内容介绍中的相关内容。

    3、Doc2vec的算法实现

    这里使用gensim的中的Doc2vec,具体演示代码为:

    import gensim
    import os
    from collections import defaultdict, Counter
    
    print("gensim version is: {}".format(gensim.__version__))
    
    # 数据集介绍:使用数据为新闻广播数据,来自于澳大利亚新闻广播选择的314个文档
    test_data_dir = os.path.join(gensim.__path__[0], "test", "test_data")
    lee_train_file = os.path.join(test_data_dir, "lee_background.cor")
    lee_test_file = os.path.join(test_data_dir, "lee.cor")
    
    # 定义函数,读取数据
    import smart_open
    def read_corpus(fname, tokens_only=False):
        with smart_open.open(fname, encoding="iso-8859-1") as f:
            for i, line in enumerate(f):
                tokens = gensim.utils.simple_preprocess(line)
                if tokens_only:
                    yield tokens
                else:
                    yield gensim.models.doc2vec.TaggedDocument(tokens,[i])
    
    train_corpus = list(read_corpus(lee_train_file))
    # print("train_corpus: \n {}".format(train_corpus[:1]))
    test_corpus = list(read_corpus(lee_test_file, tokens_only=True))
    # print("test corpus: \n {}".format(test_corpus[:1]))
    
    # 创建模型并进行模型训练
    model = gensim.models.doc2vec.Doc2Vec(vector_size = 50, min_count = 2, epochs=40)
    model.build_vocab(train_corpus)
    model.train(documents=train_corpus, total_examples=model.corpus_count, epochs=model.epochs)
    
    # 输出每个文档的向量 model.docvecs[id]
    doc_vector_dict = defaultdict(list)
    for one in train_corpus:
        doc_vector_dict[one.tags[0]] = model.docvecs[one.tags[0]]
    # print(doc_vector_dict)
    
    # 计算每个文档最相似的文档 model.docvecs.most_similar
    for doc_id, doc_vector in doc_vector_dict.items():
        sim_docs = model.docvecs.most_similar([doc_vector], topn=10)
        # print(sim_docs)
    
    # 推断新文档的向量 model.infer_vector
    print(train_corpus[0].words)
    infer_vector = model.infer_vector(train_corpus[0].words)
    print(infer_vector)
    
    # 根据自相似性进行模型的效果评判,假设文档都是新文档,推断每个文档的向量,并计算其与所有文档的相似度,看本身的相似度排名
    ranks = list()
    for doc_id, doc_vector in doc_vector_dict.items():
        sim_docs = model.docvecs.most_similar([doc_vector], topn=len(model.docvecs))
        sim_docs_rank = [_id for _id, sim in sim_docs].index(doc_id)
        ranks.append(sim_docs_rank)
    
    print(ranks)
    counter = Counter(ranks)
    print(counter)
    
    # 模型保存
    model.save("files/doc2vec.model")
    # 模型加载
    gensim.models.doc2vec.Doc2Vec.load("files/doc2vec.model")
    

     

    展开全文
  • Doc2vec

    2021-02-23 15:15:38
    Doc2Vec 是基于Word2Vec的思想。 只是巧妙的加了一个paragraph id 以此来表示整个文档的向量分布。 假设一篇文章共有N个段落,M个词汇。然后 预测时采用 给定一个paragraph id 预测该paragraph 下的一些词。 ...

    Doc2Vec 是基于Word2Vec的思想。
    只是巧妙的加了一个paragraph id 以此来表示整个文档的向量分布。

    在这里插入图片描述
    假设一篇文章共有N个段落,每个段落都会有个一个paragraph_id,然后每个段落做PV-DM模型。
    和word2vec的主要不同点即为,paragraph_Id 由一个矩阵D构成,他和其他word vector 组成的W矩阵进行concate连接,用来预测中心词。

    还有另外一种形式的Doc2vec,即为给定一个paragraph_id,不加入任何单词文本信息,去预测该段落拥有的一些单词。(类似于word2vec 中的Skip-gram模型)称之为Distributed Bag of Words version of paragraph vectors.(PV-DBOW).
    在这里插入图片描述

    Doc2vec的优点:
    1.首先,它是一种无监督的算法,并不需要标注数据就可以进行一些训练。
    2.其次,他继承了word2vec的语义上的优点。即相似的词,向量距离相近。
    3.另外,他还在训练时,考虑了上下文的单词顺序关系。因此,会拥有一些单词顺序上的语义理解。但是又不会像n-gram那样生成很高维度的数据。

    展开全文
  • doc2vec word2vec / doc2vec 教程和复习
  • Doc2Vec

    千次阅读 2017-11-26 14:04:30
    应用的话,这个tutorial非常实用,直接可以用Python跑, 跑完后心里会明白不少:Sentiment Analysis Using Doc2VecDoc2Vec,可用用来做情感分析任务) Doc2Vec优点:1. Context层面保留词...

    原理的话,这篇讲解的特别好:
    Distributed representations of sentences and documents

    应用的话,这个tutorial非常实用,直接可以用Python跑, 跑完后心里会明白不少:
    Sentiment Analysis Using Doc2Vec

     

    (Doc2Vec,可用用来做情感分析任务)

    Doc2Vec优点:1. Context层面保留词语顺序关系(PV-DM);2. 具有语义

    2个步骤:

    1. 训练:把段落当成一个独立的词,和Context词语们一起作为输入,训练段落向量和词语向量和网络权重;

    2. 预测:固定词向量和网络权重,只更新新段落的向量,直至收敛;

    用这个新段落的向量,可以做分类等任务(单独训练传统神经网络或者LR;比如把段落Embedding当输入层,目标函数是MSE去回归拟合情感分数)

    PV-DM效果更好;

    分类等后续任务,使用PV-DM的段落向量和PV-DBOW的段落向量首尾相连,效果更好; (比RNN的效果还要好;远好于WordVector的Avg-Pooling; 远好于TF-IDF)

    向量首尾相连,比加和效果好;

    预测阶段可以并行计算来加速;

     

    展开全文
  • doc2vec 该存储库包含Python脚本,用于使用训练doc2vec模型。 有关doc2vec算法的详细信息,请参见论文。 创建一个DeWiki数据集 Doc2vec是一种无监督的学习算法,并且可以使用任何文档集来训练模型。 文档可以是...
  • doc2vec_java A Java implementation of doc2vec in ICML'14 based on https://github.com/NLPchina/Word2VEC_java demo src/test/Doc2VecTest.java Require Java 7 or above, I use Java 8 in this project. The ...
  • Doc2Vec文本分类 文本分类模型,该模型使用gensim Doc2Vec生成段落嵌入,并使用scikit-learn Logistic回归进行分类。 数据集 25,000个IMDB电影评论,特别选择用于情感分析。 评论的情绪是二进制的(1表示肯定,0...
  • Doc2vec用于scikit学习 该项目使您能够将gensim的Doc2vec实现用作sklearn变压器,并无缝集成到管道中。 正在安装 确保运行setup.sh脚本。 它将安装所有必需的依赖项。 运行样本 使用python sample.py查看它的运行...
  • Word2Vec-Doc2Vec-源码

    2021-04-29 20:07:32
    Word2Vec-Doc2Vec 这些脚本从输入文本生成word2vecdoc2vec模型,并使用T-SNE创建可视化图
  • doc2vec 使用Python 3,Keras和TensorFlow的doc2vec [1]的简单易读实现。 安装 pip install -r requirements.txt python setup.py install 假设条件 此实现假定您的文档都在同一目录中,并以单调递增的整数ID命名,...
  • 文章目录一、Doc2Vec模型1 、PV-DM2 、PV-DBOW二、gensim实现1、gensim实现Doc2Vec(IMDB数据集)2、gensim实现Doc2Vec(中文数据集)三、总结四、程序编写时遇到的错误:gensim包中相关函数说明: 一、Doc2Vec模型...

    一、Doc2Vec模型

      许多机器学习算法需要的输入是一个固定长度的向量,当涉及到短文时,最常用的固定长度的向量方法是词袋模型(bag-of-words)。尽管它很流行,但是词袋模型存在两个主要的缺点:一个是词袋模型忽略词序,如果两个不同的句子由相同的词但是顺序不同组成,词袋模型会将这两句话定义为同一个表达;另一个是词袋模型忽略了语义,这样训练出来的模型会造成类似’powerful’,'strong’和’Paris’的距离是相同的,而其实’powerful’应该相对于’Paris’距离’strong’更近才对。

      Doc2vec又叫Paragraph Vector是Tomas Mikolov基于word2vec模型提出的,其具有一些优点,比如不用固定句子长度,可以接受不同长度的句子做训练样本,Doc2vec是一个无监督学习算法,该算法用于向量来表示文档,该模型的结构潜在的克服了词袋模型的缺点。

      另外,word2vec预测词向量时,预测出来的词是含有词义的,比如上文提到的词向量’powerful’会相对于’Paris’离’strong’距离更近,在Doc2vec中也构建了相同的结构。所以Doc2vec克服了词袋模型中没有语义的去缺点。假设现在存在训练样本,每个句子是训练样本。


    1 、PV-DM

      Doc2vec有两种训练方式,一种是PV-DM(Distributed Memory Model of paragraphvectors)类似于word2vec中的CBOW模型,如下图

    在这里插入图片描述

    图:PV-DM模型

      PV-DM模型,每次从一句话中滑动采样固定长度的词,取其中一个词作预测词,其他的作输入词。输入词对应的词向量word vector和本句话对应的句子向量Paragraph vector作为输入层的输入,将本句话的向量和本次采样的词向量相加求平均或者累加构成一个新的向量X,进而使用这个向量X预测此次窗口内的预测词。

      Doc2vec相对于word2vec不同之处在于,在输入层,增添了一个新句子向量Paragraph vector,Paragraph vector可以被看作是另一个词向量,它扮演了一个记忆。词袋模型中,因为每次训练只会截取句子中一小部分词训练,而忽略了除了本次训练词以外该句子中的其他词,这样仅仅训练出来每个词的向量表达,句子只是每个词的向量累加在一起表达的。正如上文所说的词袋模型的缺点,忽略了文本的词序问题。而Doc2vec中的Paragraph vector则弥补了这方面的不足,它每次训练也是滑动截取句子中一小部分词来训练,Paragraph Vector在同一个句子的若干次训练中是共享的,所以同一句话会有多次训练,每次训练中输入都包含Paragraph vector。它可以被看作是句子的主旨,有了它,该句子的主旨每次都会被放入作为输入的一部分来训练。这样每次训练过程中,不光是训练了词,得到了词向量。同时随着一句话每次滑动取若干词训练的过程中,作为每次训练的输入层一部分的共享Paragraph vector,该向量表达的主旨会越来越准确。Doc2vec中PV-DM模型具体的训练过程和word2vec中的CBOW模型训练方式相同,都是采用随机梯度下降来进行优化模型的参数的。

      训练完,就会得到训练样本中所有的词向量和每句话对应的句子向量,那么Doc2vec是怎么预测新的句子Paragraph vector呢?其实在预测新的句子的时候,还是会将该Paragraph vector随机初始化,放入模型中再重新根据随机梯度下降不断迭代求得最终稳定下来的句子向量。不过在预测过程中,模型里的词向量还有投影层到输出层的softmax weights参数是不会变的,这样在不断迭代中只会更新Paragraph vector,其他参数均已固定,只需很少的时间就能计算出带预测的Paragraph vector。


    2 、PV-DBOW

      Paragraph Vector的另一种模型是PV-DBOW(Distributed Bag of Words of paragraph vector)类似于word2vec中的skip-gram模型,如下图:
    在这里插入图片描述

    图:PV-DBOW模型

      该模型原理和PV-DM模型相同,但是该模型的输入是paragraph id的句向量,在随机梯度下降的每一次迭代中采样一个文本窗口(text window),再从该文本窗口中随机采样一个词,从而形成一个给定段落向量进行词预测的多分类任务。该模型和Skip-gram模型相似。

    二、gensim实现

    1、gensim实现Doc2Vec(IMDB数据集)

      使用Doc2Vec进行分类任务,我们使用 IMDB电影评论数据集作为分类例子,测试gensim的Doc2Vec的有效性。数据集中包含25000条正向评价,25000条负面评价以及50000条未标注评价。

    2、gensim实现Doc2Vec(中文数据集)

      在python中gensim包就很好的实现了Doc2vec,我们调用使用方便快捷,在这简单演示下。
    1、数据集:从网上下载的“基于社交媒体的海南旅游景区评价数据集”。另外停用词表也是从网上下载的。
    下载地址为:http://www.sciencedb.cn/dataSet/handle/714
      因为数据集是分布在多个excel文件中的,所以我编写了函数get_file_data_to_a_file(),将美团文件夹下的前4个文件中的数据合并到一个excel文件train_excel.xlsx中。共7319条数据。代码如下:

    # -*- coding: utf-8 -*-
    
    import xlrd
    import xlsxwriter
    import os
    
    def get_file_data_to_a_file(path):
        '''
        读取文件路径下的所有文件到一个文件路径列表中,并依次读取每个文件中的数据
        最后将所有数据保存到一个文件中
        '''
        paths = os.listdir(path)
        file_paths = []
        for file_name in paths:
            if os.path.splitext(file_name)[1] == ".xlsx":
                file_paths.append(path+file_name)
        
        rvalues =[]
        for i, file in enumerate(file_paths): #遍历文件列表paths
                fh = xlrd.open_workbook(file) #打开一个excel文件
    #            sheet_name = os.path.splitext(file_name)[0]
                table = fh.sheets()[0] #获取excel文件的第一个sheet表
                num_rows = table.nrows #该表的的所有行数
                for row in range(num_rows):
                    rdata=table.row_values(row) #获取每一行的数据
                    rvalues.append(rdata)
        
        endfile='train_excel.xlsx'
        wb1=xlsxwriter.Workbook(endfile)
        ws=wb1.add_worksheet() #添加一个新的工作表
        for a in range(len(rvalues)):
            for b in range(len(rvalues[a])):
                c=rvalues[a][b]
                ws.write(a,b,c)
        wb1.close()
        print("文件合并完成")
    
    if __name__ == "__main__":
        get_file_data_to_a_file("./meituan/")
    

    2、具体的Doc2vec训练Paragraph vector步骤如下:

    步骤1:导入数据集,提取comment列(该列是用户评价的内容)。

    def getText(path):
        df_train = pd.read_excel('train_excel.xlsx')
        comment_train = list(df_train['comment'].astype(str))
        return comment_train
    
    text = getText("./")
    print(text[0:10]) #打印前10行数据
    

    运行结果如下:
    在这里插入图片描述
    步骤2:将提取好的comment列中的内容进行分词,并去除停用词。

    def cut_sentence(text):
        stop_list = [line[:-1] for line in open("中文停用词表.txt",encoding='gb18030', errors='ignore')]
        result = []
        for each in text:
            each_cut = jieba.cut(each)
            each_split = ' '.join(each_cut).split()
            each_result = [word for word in each_split if word not in stop_list] #去除停用词
            result.append(' '.join(each_result))
        return result
    
    b = cut_sentence(text)
    print(b[0:10])
    

    运行结果如下:
    在这里插入图片描述
    步骤3:改变成Doc2vec所需要的输入样本格式,由于gensim里Doc2vec模型需要的输入为固定格式,输入样本为:[句子,句子序号],这里需要用gensim中Doc2vec里的TaggedDocument来包装输入的句子。

    TaggededDocument=gensim.models.doc2vec.TaggedDocument
    
    def X_train(cut_sentence):
        x_train = []
        for i, text in enumerate(cut_sentence):
            word_list = text.split(' ')
            l = len(word_list)
            word_list[l-1] = word_list[l-1].strip()
            document = TaggededDocument(word_list,tags=[i])
            x_train.append(document)
        return x_train
    
    c = X_train(b)
    print(c[0:10])
    

    运行结果如下:
    在这里插入图片描述
    步骤4:加载Doc2vec模型,并开始训练。

    def train(x_train, size=300):
        model = Doc2Vec(x_train,min_count=1,window=3,size=size,sample=1e-3,negative=5,workers=4)
        model.train(x_train,total_examples=model.corpus_count,epochs=10)
        return model
    
    model_dm = train(c)
    

    步骤5:模型训练完毕以后,就可以预测新的句子的向量Paragraph vector了,这里用gensim里Doc2Vec.infer_vector()预测新的句子,这里根据经验,alpha(学习步长)设置小一些,迭代次数设置大一些。找到训练样本中与这个句子最相近的10个句子。可以看到训练出来的结果与测试的新句子是有关联的。

    #str1 = u'这里 的 演出 真的 很 棒 !'
    str1 = u'一点 都 不 好玩'
    test_text = str1.split(' ')
    inferred_vector = model_dm.infer_vector(doc_words=test_text,alpha=0.025,steps=300)
    
    sims = model_dm.docvecs.most_similar([inferred_vector],topn=10)
    for count,sim in sims:
        sentence = text[count]
        words = ''
        for word in sentence:
            words = words + word + ' '
        print(words, sim, len(sentence))
    

    运行结果如下:
    在这里插入图片描述
    从结果可以看出,预测的相似的句子还是有一定的可信度的。

    三、总结

      Doc2vec是基于Word2vec基础上构建的,相比于Word2vec,Doc2vec不仅能训练处词向量还能训练处句子向量并预测新的句子向量。Doc2vec模型结构相对于Word2vec,不同点在于在输入层上多增加了一个Paragraph vector句子向量,该向量在同一句下的不同的训练中是权值共享的,这样训练出来的Paragraph vector就会逐渐在每句子中的几次训练中不断稳定下来,形成该句子的主旨。这样就训练出来了我们需要的句子向量。在预测新的句子向量时,是需要重新训练的,此时该模型的词向量和投影层到输出层的soft weights参数固定,只剩下Paragraph vector用梯度下降法求得,所以预测新句子时虽然也要放入模型中不断迭代求出,相比于训练时,速度会快得多。本次使用的数据集为情感分析,且大多数样本偏向于好评,样本内容比较单一,所以训练出来的结果都是偏向于哪里好玩,好不好这类的意思,对于一些特定的问题之类的句子准确性还没有验证,目前用于情感分析还是可以的。下次会尝试使用新的数据集,调试参数看是否会取得更好的结果。

    四、程序编写时遇到的错误:

    1. 通过python读取停用词表文本内容时,出现如下错误:
      在这里插入图片描述
      解决方法:
      使用‘ignore’属性忽略非法字符,如:
      在这里插入图片描述
    2. jieba分词出现如下错误:AttributeError: ‘float’ object has no attribute ‘decode’
      解决方法:
      在这里插入图片描述

    gensim包中相关函数说明:

    gensim.models.doc2vec.Doc2Vec(
    documents=None, 
    size=300, 
    alpha=0.025, 
    window=8, 
    min_count=5, 
    max_vocab_size=None, 
    sample=0,
    seed=1, 
    workers=1, 
    min_alpha=0.0001, 
    dm=1, 
    hs=1, 
    negative=0, 
    dbow_words=0, 
    dm_mean=0, 
    dm_concat=0, 
    dm_tag_count=1, 
    docvecs=None,
    docvecs_mapfile=None, 
    comment=None, 
    trim_rule=None, 
    **kwargs)
    
    • size 是特征向量的纬度。

    • window 是要预测的词和文档中用来预测的上下文词之间的最大距离。

    • alpha 是初始化的学习速率,会随着训练过程线性下降。

    • seed 是随机数生成器。.需要注意的是,对于一个完全明确的重复运行(fully deterministically-reproducible run),你必须同时限制模型单线程工作以消除操作系统线程调度中的有序抖动。(在python3中,解释器启动的再现要求使用PYTHONHASHSEED环境变量来控制散列随机化)

    • min_count 忽略总频数小于此的所有的词。

    • max_vocab_size 在词汇累积的时候限制内存。如果有很多独特的词多于此,则将频率低的删去。每一千万词类大概需要1G的内存,设为None以不限制(默认)。

    • sample 高频词被随机地降低采样的阈值。默认为0(不降低采样),较为常用的事1e-5。

    • dm 定义了训练的算法。默认是dm=1,使用 ‘distributed memory’ (PV-DM),否则 distributed bag of words (PV-DBOW)。

    • workers 使用多少现成来训练模型(越快的训练需要越多核的机器)。

    • iter 语料库的迭代次数。从Word2Vec中继承得到的默认是5,但在已经发布的‘Paragraph Vector’中,设为10或者20是很正常的。

    • hs 如果为1 (默认),分层采样将被用于模型训练(否则设为0)。

    • negative 如果 > 0,将使用负采样,它的值决定干扰词的个数(通常为5-20)。

    • dm_mean 如果为0(默认),使用上下文词向量的和;如果为1,使用均值。(仅在dm被用在非拼接模型时使用)

    • dm_concat 如果为1,使用上下文词向量的拼接,默认是0。注意,拼接的结果是一个更大的模型,输入的大小不再是一个词向量(采样或算术结合),而是标签和上下文中所有词结合在一起的大小。

    • dm_tag_count 每个文件期望的文本标签数,在使用dm_concat模式时默认为1。

    • dbow_words 如果设为1,训练word-vectors (in skip-gram fashion) 的同时训练 DBOW doc-vector。默认是0 (仅训练doc-vectors时更快)。

    • trim_rule 词汇表修建规则,用来指定某个词是否要被留下来。被删去或者作默认处理 (如果词的频数< min_count则删去)。可以设为None (将使用min_count),或者是随时可调参 (word, count, min_count) 并返回util.RULE_DISCARD,util.RULE_KEEP ,util.RULE_DEFAULT之一。注意:这个规则只是在build_vocab()中用来修剪词汇表,而且没被保存。

    参考资料:

    1、基于社交媒体的海南旅游景区评价数据集:http://www.sciencedb.cn/dataSet/handle/714
    2、博客: https://yq.aliyun.com/articles/623606?spm=a2c4e.11153940.0.0.91a74a54EwRIda
    3、gensim 官网: https://radimrehurek.com/gensim/models/doc2vec.html
    4、论文《Distributed representations of sentences and documents 》

    展开全文
  • word2vecdoc2vec的区别: 两者从字面意思上就可以大致判断出区别来,word2vec主要针对与单词,而doc2vec主要针对于文本: 顾名思义,Word2Vec是在单个单词上训练的,而Doc2vec是在可变长度的文本上训练的,...
  • Doc2Vec实践

    千次阅读 2018-05-30 11:35:46
    最近由于要开发一款项目,就想用doc2vec来实现其中的推荐功能,根据用户输入的问题利用doc2vec返回相似的问题。 以下是整个Demo的实现过程,具体的详细代码请参考我的Git:...
  • 关于word2vecdoc2vec

    2019-05-15 16:43:54
    word2vecdoc2vec背景知识word2vecCBOWskip-gram 从使用词向量的第一天就很烦躁word2vecdoc2vec,就很想写个这两个的异同理解,奈何实力太菜。但感觉不开始写永远都开始不起来,于是乎先来占个坑后面慢慢更新吧。...
  • word2vecdoc2vec

    千次阅读 2017-09-05 21:02:01
    word2vecdoc2vec的区别 例子加载google训练的模型并输出单词good的向量 参考文献word2vecdoc2vec的区别不管是词向量还是句向量都是一个训练模型的副产品。 所谓副产品,就是说,模型的设计原则是训练一个预测...
  • 训练Doc2Vec

    2019-12-12 10:56:10
    将文本数据表示成list of list的形式: 对每一条文本进行分词操作,可能的话,去除停用词,加上自定义词...训练Doc2Vec,其中参数dm=1表示DM模型,dm=0表示DBOW模型。(此处没有写,dm参数放在Doc2Vec()函数中) ...
  • doc2vec的java实现

    2018-09-15 21:55:55
    DOC2vec,是为一群用来产生词向量的相关模型。这些模型为浅而双层的神经网络,用来训练以重新建构语言学之词文本。
  • 今天在这两个模型的理解上出现了疑问,现在先贴上这些资料解释,后面把代码...Word2vecDoc2vec原理理解并结合代码分析 word2vecdoc2vec Word2Vec&Doc2Vec总结 【译】word2vec&doc2vec做文本情感分析 ...
  • doc2vec的一些操作

    2020-02-27 11:19:43
    1,从doc2vec模型中提取出word2vec向量表,代码如下: from gensim.test.utils import common_texts from gensim.models.doc2vec import Doc2Vec, TaggedDocument documents = [TaggedDocument(doc, [i]) for i, ...
  • doc2vec 在word2vec后出现,针对词和句子(或者词和段落,或者词和文章),粒度自定义,大量文本训练,与word2vec统一水平,借鉴了word2vec的训练思想 sentence2vec 三个模型中出现最晚,针对句子,粒度是自然句子,...
  • 情感分类 doc2vec vs. word2vec本文用gensim实践doc2vec,并与word2vec均值得到的词向量 在IMDB数据集情感分类任务中进行比较。完整代码见 https://github.com/FlyingLittlePigJoy/word_embedding由分析结果可知:在...
  • Doc2Vec模型介绍及使用

    万次阅读 2018-01-07 16:35:31
    Doc2Vec模型Doc2Vec模型 摘要 背景 段落向量 PV-DM模型 PV-DBOW模型 gensim实现Doc2Vec 说明 参考文献摘要通过本文,你将了解到: Doc2Vec模型是如何产生的 Doc2Vec模型细节 Doc2Vec模型的特点 Doc2Vec的使用及代码...
  • gensim训练word2vecdoc2vec

    千次阅读 2018-04-03 00:03:57
    word2vecdoc2vec是做NLP过程中经常使用的方法。用向量表示词汇这种做法由来已久,最早使用的是one-hot向量,即只有一个维度为1,其余维度都为0,但这种做法有很多缺陷,过多的维度会导致数据处理的困难,而且这种...
  • gensim doc2vec选译

    千次阅读 2017-07-25 14:33:30
    Gensim doc2vec 文档选译为了防止自己忘记doc2vec的使用再去花大时间看英文原文,这里挑官网的重点翻译http://radimrehurek.com/gensim/models/doc2vec.htmlInitialize a model with e.g.: 用样例初始化: >>> ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,034
精华内容 3,213
关键字:

doc2vec