标签: doc2vec

导入错误:无法从“sklearn.externals”导入名称“joblib”

我正在尝试使用 joblib 从 s3 加载我保存的模型

import pandas as pd 
import numpy as np
import json
import subprocess
import sqlalchemy
from sklearn.externals import joblib

ENV = 'dev'
model_d2v = load_d2v('model_d2v_version_002', ENV)

def load_d2v(fname, env):
    model_name = fname
    if env == 'dev':
        try: 
            model=joblib.load(model_name)
        except:
            s3_base_path='s3://sd-flikku/datalake/doc2vec_model'
            path = s3_base_path+'/'+model_name
            command = "aws s3 cp {} {}".format(path,model_name).split()
            print('loading...'+model_name)
            subprocess.call(command)
            model=joblib.load(model_name)
    else:
        s3_base_path='s3://sd-flikku/datalake/doc2vec_model'
        path = s3_base_path+'/'+model_name
        command = "aws s3 cp {} {}".format(path,model_name).split()
        print('loading...'+model_name)
        subprocess.call(command)
        model=joblib.load(model_name)
    return model
Run Code Online (Sandbox Code Playgroud)

但我正面临这个错误:

    from sklearn.externals import joblib
ImportError: …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services python-3.x joblib doc2vec

66
推荐指数
5
解决办法
11万
查看次数

gensim Doc2Vec vs tensorflow Doc2Vec

我正在尝试比较我的Doc2Vec(通过tf)和gensims实现的实现.从视觉上看,gensim的表现更好.

我运行以下代码来训练gensim模型和下面的那个用于tensorflow模型.我的问题如下:

  1. 我的Doc2Vec实现是否正确.基本上它应该是连接单词向量和文档向量来预测某个上下文中的中间单词吗?
  2. window=5gensim中的参数是否意味着我在两边使用两个词来预测中间的一个?或者两边都是5.事情是有相当多的文件小于长度10.
  3. 关于为什么Gensim表现更好的任何见解?我的模型与他们如何实现它有什么不同吗?
  4. 考虑到这实际上是一个矩阵分解问题,为什么TF模型甚至得到答案?由于它是一个排名不足的问题,因此有无限的解决方案.< - 最后一个问题只是奖金.

Gensim

model = Doc2Vec(dm=1, dm_concat=1, size=100, window=5, negative=10, hs=0, min_count=2, workers=cores)
model.build_vocab(corpus)
epochs = 100
for i in range(epochs):
    model.train(corpus)
Run Code Online (Sandbox Code Playgroud)

TF

batch_size = 512
embedding_size = 100 # Dimension of the embedding vector.
num_sampled = 10 # Number of negative examples to sample.


graph = tf.Graph()

with graph.as_default(), tf.device('/cpu:0'):
    # Input data.
    train_word_dataset = tf.placeholder(tf.int32, shape=[batch_size])
    train_doc_dataset = tf.placeholder(tf.int32, shape=[batch_size/context_window])
    train_labels = tf.placeholder(tf.int32, shape=[batch_size/context_window, 1])

    # The variables   
    word_embeddings =  tf.Variable(tf.random_uniform([vocabulary_size,embedding_size],-1.0,1.0)) …
Run Code Online (Sandbox Code Playgroud)

python nlp gensim tensorflow doc2vec

45
推荐指数
1
解决办法
1万
查看次数

Doc2Vec获取最相似的文档

我正在尝试构建一个文档检索模型,该模型返回按查询或搜索字符串的相关性排序的大多数文档.为此,我使用gensim中的模型训练了一个doc2vec模型Doc2Vec.我的数据集采用pandas数据集的形式,每个文档都将每个文档存储为字符串.这是我到目前为止的代码

import gensim, re
import pandas as pd

# TOKENIZER
def tokenizer(input_string):
    return re.findall(r"[\w']+", input_string)

# IMPORT DATA
data = pd.read_csv('mp_1002_prepd.txt')
data.columns = ['merged']
data.loc[:, 'tokens'] = data.merged.apply(tokenizer)
sentences= []
for item_no, line in enumerate(data['tokens'].values.tolist()):
    sentences.append(LabeledSentence(line,[item_no]))

# MODEL PARAMETERS
dm = 1 # 1 for distributed memory(default); 0 for dbow 
cores = multiprocessing.cpu_count()
size = 300
context_window = 50
seed = 42
min_count = 1
alpha = 0.5
max_iter = 200

# BUILD MODEL
model = gensim.models.doc2vec.Doc2Vec(documents = …
Run Code Online (Sandbox Code Playgroud)

python nlp gensim doc2vec

32
推荐指数
1
解决办法
3万
查看次数

如何将对话数据分成对(Context,Response)

我正在使用Gensim Doc2Vec模型,尝试集中部分客户支持对话.我的目标是为支持团队提供自动回复建议.

图1:显示了在下一个对话行中回答用户问题的示例对话,从而可以轻松提取数据:

图1

在谈话期间,"你好""我们的办公室位于纽约市"应该被建议


图2:描述了问题和答案不同步的对话

图2

在谈话期间,"你好""我们的办公室位于纽约市"应该被建议


图3:描述了一个对话,其中答案的上下文是随着时间的推移建立的,并且为了分类目的(我假设),一些行是冗余的.

图3

在对话过程中,"这里是免费试用帐户的链接"应该被建议


每个会话行(简化)我有以下数据:
谁写了行(用户或代理),文本,时间戳

我正在使用以下代码来训练我的模型:

from gensim.models import Doc2Vec
from gensim.models.doc2vec import TaggedLineDocument
import datetime

print('Creating documents',datetime.datetime.now().time())
context = TaggedLineDocument('./test_data/context.csv')

print('Building model',datetime.datetime.now().time())

model = Doc2Vec(context,size = 200, window = 10, min_count = 10, workers=4)
print('Training...',datetime.datetime.now().time())

for epoch in range(10):
    print('Run number :',epoch)
    model.train(context)

model.save('./test_data/model')
Run Code Online (Sandbox Code Playgroud)

:我应该如何构建我的训练数据以及可以应用哪些启发式方法从原始数据中提取它?

python text-mining gensym doc2vec

14
推荐指数
1
解决办法
725
查看次数

gensim如何计算doc2vec段落向量

我要去看这篇论文http://cs.stanford.edu/~quocle/paragraph_vector.pdf

它说明了这一点

"对图矢量和单词矢量进行平均或连接以预测上下文中的下一个单词.在实验中,我们使用连接作为组合矢量的方法."

连接或平均如何工作?

示例(如果第1段包含word1和word2):

word1 vector =[0.1,0.2,0.3]
word2 vector =[0.4,0.5,0.6]

concat method 
does paragraph vector = [0.1+0.4,0.2+0.5,0.3+0.6] ?

Average method 
does paragraph vector = [(0.1+0.4)/2,(0.2+0.5)/2,(0.3+0.6)/2] ?
Run Code Online (Sandbox Code Playgroud)

也是从这张图片:

据说:

段落标记可以被认为是另一个单词.它充当记忆,记住当前上下文中缺少的内容 - 或段落的主题.出于这个原因,我们经常将此模型称为段落向量的分布式存储模型(PV-DM).

段落标记是否等于段落向量等于on

在此输入图像描述

nlp vectorization gensim word2vec doc2vec

14
推荐指数
1
解决办法
1923
查看次数

gensim LabeledSentence和TaggedDocument之间有什么区别?

请帮助我了解如何之差TaggedDocumentLabeledSentencegensim作品.我的最终目标是使用Doc2Vec模型和任何分类器进行文本分类.我关注这个博客!

class MyLabeledSentences(object):
    def __init__(self, dirname, dataDct={}, sentList=[]):
        self.dirname = dirname
        self.dataDct = {}
        self.sentList = []
    def ToArray(self):       
        for fname in os.listdir(self.dirname):            
            with open(os.path.join(self.dirname, fname)) as fin:
                for item_no, sentence in enumerate(fin):
                    self.sentList.append(LabeledSentence([w for w in sentence.lower().split() if w in stopwords.words('english')], [fname.split('.')[0].strip() + '_%s' % item_no]))
        return sentList


class MyTaggedDocument(object):
    def __init__(self, dirname, dataDct={}, sentList=[]):
        self.dirname = dirname
        self.dataDct = {}
        self.sentList = []
    def ToArray(self):       
        for fname in …
Run Code Online (Sandbox Code Playgroud)

gensim text-classification word2vec doc2vec

8
推荐指数
1
解决办法
3108
查看次数

如何在gensim中使用TaggedDocument?

我有两个目录,我想从中读取他们的文本文件并标记它们,但我不知道如何通过它TaggedDocument.我认为它可以用作TaggedDocument([Strings],[Labels]),但这显然不起作用.

这是我的代码:

from gensim import models
from gensim.models.doc2vec import TaggedDocument
import utilities as util
import os
from sklearn import svm
from nltk.tokenize import sent_tokenize
CogPath = "./FixedCog/"
NotCogPath = "./FixedNotCog/"
SamplePath ="./Sample/"
docs = []
tags = []
CogList = [p for p in os.listdir(CogPath) if p.endswith('.txt')]
NotCogList = [p for p in os.listdir(NotCogPath) if p.endswith('.txt')]
SampleList = [p for p in os.listdir(SamplePath) if p.endswith('.txt')]
for doc in CogList:
     str = open(CogPath+doc,'r').read().decode("utf-8")
     docs.append(str)
     print docs
     tags.append(doc)
     print "###########" …
Run Code Online (Sandbox Code Playgroud)

python nltk gensim word2vec doc2vec

8
推荐指数
2
解决办法
1万
查看次数

Doc2Vec.infer_vector每次都会在特定的训练模型上保持不同的结果

我正在尝试遵循这里提到的官方Doc2Vec Gensim教程 - https://github.com/RaRe-Technologies/gensim/blob/develop/docs/notebooks/doc2vec-lee.ipynb

我修改了第10行中的代码以确定给定查询的最佳匹配文档,每次运行时,我得到一个完全不同的结果集.我在笔记本第10行的新代码是:

inferred_vector = model.infer_vector(['only', 'you', 'can', 'prevent', 'forest', 'fires']) sims = model.docvecs.most_similar([inferred_vector], topn=len(model.docvecs)) rank = [docid for docid, sim in sims] print(rank)

每次运行这段代码时,我都会获得与此查询匹配的不同文档集:"只有您可以防止森林火灾".差别很明显,似乎并不匹配.

Doc2Vec不适合查询和信息提取吗?还是有bug?

nlp gensim word2vec doc2vec

8
推荐指数
1
解决办法
2290
查看次数

文档相似性:矢量嵌入与Tf-Idf性能?

我有一个文档集合,每个文档都随着时间的推移而快速增长.任务是在任何固定时间找到类似的文件.我有两种可能的方法:

  1. 矢量嵌入(word2vec,GloVe或fasttext),对文档中的单词矢量求平均,并使用余弦相似度.

  2. 词袋:tf-idf或其变体,如BM25.

其中一个会产生明显更好的结果吗?是否有人对文件相似性进行了tf-idf与平均word2vec的定量比较?

是否有另一种方法,允许在添加更多文本时动态优化文档的向量?

nlp machine-learning tf-idf word2vec doc2vec

7
推荐指数
2
解决办法
6253
查看次数

是否有预先训练的doc2vec模型?

是否有一个预先训练的,具有大数据集的doc2vec模型,例如Wikipedia或类似模型?

gensim doc2vec

7
推荐指数
2
解决办法
4722
查看次数