标签: doc2vec

Gensim Doc2Vec为模型生成巨大的文件

我正在尝试从gensim包运行doc2vec库。我的问题是,当我训练并保存模型时,模型文件很大(2.5 GB),我尝试使用此行:

model.estimate_memory()
Run Code Online (Sandbox Code Playgroud)

但这并没有改变任何东西。我也尝试过更改max_vocab_size以减少空间。但是没有运气。有人可以帮我解决这个问题吗?

python gensim word2vec semantics doc2vec

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

什么是doc2vec训练迭代?

我是doc2vec的新手.我最初试图理解doc2vec,下面提到的是我使用Gensim的代码.正如我所希望的,我得到了两个文件的训练模型和文档向量.

但是,我想知道在几个时代重新训练模型的好处以及如何在Gensim中进行训练?我们可以使用iteralpha参数来做,还是我们必须单独训练它for loop?请让我知道如何更改以下代码以训练20个epoches的模型.

此外,我有兴趣知道word2vec模型还需要多次训练迭代.

# Import libraries
from gensim.models import doc2vec
from collections import namedtuple

# Load data
doc1 = ["This is a sentence", "This is another sentence"]

# Transform data
docs = []
analyzedDocument = namedtuple('AnalyzedDocument', 'words tags')
for i, text in enumerate(doc1):
    words = text.lower().split()
    tags = [i]
    docs.append(analyzedDocument(words, tags))

# Train model
model = doc2vec.Doc2Vec(docs, size = 100, window = 300, min_count = 1, workers = 4)

# Get the vectors …
Run Code Online (Sandbox Code Playgroud)

python gensim word2vec deep-learning doc2vec

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

带有负抽样的Doc2vec和word2vec

我目前的doc2vec代码如下.

# Train doc2vec model
model = doc2vec.Doc2Vec(docs, size = 100, window = 300, min_count = 1, workers = 4, iter = 20)
Run Code Online (Sandbox Code Playgroud)

我也有一个word2vec代码如下.

 # Train word2vec model
model = word2vec.Word2Vec(sentences, size=300, sample = 1e-3, sg=1, iter = 20)
Run Code Online (Sandbox Code Playgroud)

我很感兴趣,同时使用DM和DBOW在doc2vec两者跳过克和CBOW在word2vec.

在Gensim中,我找到了下面提到的句子: "通过word2vec的"skip-gram和CBOW模型",使用分层softmax或负抽样,生成具有深度学习的单词向量"

因此,我很困惑使用分层softmax或负抽样.请告诉我这两种方法有什么不同.

另外,我有兴趣知道在dm,DBOW,Skip-gram和CBOW方面需要改变哪些参数才能使用分层softmax和/或负采样

我的应用程序是一个推荐系统:)

python nlp gensim word2vec doc2vec

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

Doc2Vec 和分类 - 结果很差

我有一个包含 6000 个观察值的数据集;其示例如下:

job_id      job_title                                           job_sector
30018141    Secondary Teaching Assistant                        Education
30006499    Legal Sales Assistant / Executive                   Sales
28661197    Private Client Practitioner                         Legal
28585608    Senior hydropower mechanical project manager        Engineering
28583146    Warehouse Stock Checker - Temp / Immediate Start    Transport & Logistics
28542478    Security Architect Contract                         IT & Telecoms
Run Code Online (Sandbox Code Playgroud)

目标是根据职位预测每一行的职位部门。

首先,我对该job_title列应用了一些预处理:

def preprocess(document):
    lemmatizer = WordNetLemmatizer()
    stemmer_1 = PorterStemmer()
    stemmer_2 = LancasterStemmer()
    stemmer_3 = SnowballStemmer(language='english')

    # Remove all the special characters
    document = re.sub(r'\W', ' ', document)

    # …
Run Code Online (Sandbox Code Playgroud)

python classification gensim text-classification doc2vec

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

如何从gensim Doc2Vec获取单词向量?

我训练了一个gensim.models.doc2vec.Doc2Vec模型
d2v_model = Doc2Vec(句子,大小= 100,window = 8,min_count = 5,workers = 4)我可以通过docvec = d2v_model.docvecs [0]获得文档向量

如何从训练有素的模型中获取单词向量?

gensim word2vec doc2vec

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

删除 doc2vec 向量初始化的随机化

我正在使用预先训练的 doc2vec BOW 模型(美联社新闻)。我正在做以下事情:

import gensim.models as g 
start_alpha=0.01
infer_epoch=1000
model="\\apnews_dbow\\doc2vec.bin"
m = g.Doc2Vec.load(model)
text='this is a sample text'
vec=m.infer_vector(text,alpha=start_alpha, steps=infer_epoch)
Run Code Online (Sandbox Code Playgroud)

但是,如果我再次计算相同文本的 vec,那么我会得到相同文本的不同向量表示。为什么会发生这种情况以及我该如何避免这种情况。如果我给出完全相同的文本,我希望返回相同的向量。我尝试关注这篇文章,但似乎没有帮助。

python random gensim doc2vec

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

更新 gensim Doc2Vec 模型的训练文档

我有一个现有的 gensim Doc2Vec 模型,我正在尝试对训练集和模型进行迭代更新。

我接受新文件,并照常执行预处理:

stoplist = nltk.corpus.stopwords.words('english')
train_corpus= []
for i, document in enumerate(corpus_update['body'].values.tolist()):
     train_corpus.append(gensim.models.doc2vec.TaggedDocument([word for word in gensim.utils.simple_preprocess(document) if word not in stoplist], [i]))
Run Code Online (Sandbox Code Playgroud)

然后我加载原始模型,更新词汇表,并重新训练:

#### Original model
## model = gensim.models.doc2vec.Doc2Vec(dm=0, size=300, hs=1, min_count=10, dbow_words= 1, negative=5, workers=cores)

model = Doc2Vec.load('pvdbow_model_6_06_12_17.doc2vec')

model.build_vocab(train_corpus, update=True)

model.train(train_corpus, total_examples=model.corpus_count, epochs=model.iter)
Run Code Online (Sandbox Code Playgroud)

然后我通过附加新数据来更新训练集 Pandas 数据框,并重置索引。

corpus = corpus.append(corpus_update)
corpus = corpus.reset_index(drop=True)
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试将 infer_vector() 与更新的模型一起使用时:

inferred_vector = model1.infer_vector(tokens)
sims = model.docvecs.most_similar([inferred_vector], topn=len(model.docvecs))
Run Code Online (Sandbox Code Playgroud)

结果质量很差,表明模型和训练集数据框的索引不再匹配。

当我将它与未更新的训练集数据框(再次使用更新的模型)进行比较时,结果很好 - 但是,显然我错过了新文档。

无论如何都要更新两者,因为我希望能够在不完全重新训练模型的情况下对模型进行频繁更新?

gensim doc2vec

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

将 dask 数据框中的列转换为 Doc2Vec 的 TaggedDocument

介绍

目前,我正在尝试将 dask 与 gensim 配合使用来进行 NLP 文档计算,并且在将我的语料库转换为“ TaggedDocument ”时遇到问题。

因为我尝试了很多不同的方法来解决这个问题,所以我将列出我的尝试。

每次处理这个问题的尝试都会遇到略有不同的困境。

首先是一些初步的假设。

数据

df.info()
<class 'dask.dataframe.core.DataFrame'>
Columns: 5 entries, claim_no to litigation
dtypes: object(2), int64(3)
Run Code Online (Sandbox Code Playgroud)
  claim_no   claim_txt I                                    CL ICC lit
0 8697278-17 battery comprising interior battery active ele... 106 2 0
Run Code Online (Sandbox Code Playgroud)

所需输出

>>tagged_document[0]
>>TaggedDocument(words=['battery', 'comprising', 'interior', 'battery', 'active', 'elements', 'battery', 'cell', 'casing', 'said', 'cell', 'casing', 'comprising', 'first', 'casing', 'element', 'first', 'contact', 'surface', 'second', 'casing', 'element', 'second', 'contact', 'surface', 'wherein', 'assembled', 'position', 'first', 'second', 'contact', 'surfaces', 'contact', 'first', 'second', …
Run Code Online (Sandbox Code Playgroud)

python gensim dask doc2vec

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

AttributeError:模块“gensim.utils”没有属性“smart_open”

我正在使用 Doc2vec 构建词汇表,但出现错误“AttributeError:模块‘gensim.utils’没有属性‘smart_open’”。我该如何解决这个问题?

这是针对 Databricks 平台上的笔记本,在 Python 3 中运行。过去,我尝试在本地 Jupyter Notebook 上运行代码,但出现了相同的错误。

我还搜索了https://radimrehurek.com/gensim/models/doc2vec.html但找不到与 smart_open 相关的任何内容。

model = Doc2Vec(window=5, min_count=1, size=50, sample=1e-5, negative=5, workers=1)

model.build_vocab(sentences.to_array())
Run Code Online (Sandbox Code Playgroud)

我分别运行了以上几行。第一行工作正常。第二个说: AttributeError: module 'gensim.utils' has no attribute 'smart_open'

python gensim doc2vec databricks

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

如何在生产中使用doc2vec模型?

我想知道如何在生产中部署 doc2vec 模型来创建词向量作为分类器的输入特征。具体来说,doc2vec 模型在语料库上进行如下训练。

dataset['tagged_descriptions'] = datasetf.apply(lambda x: doc2vec.TaggedDocument(
            words=x['text_columns'], tags=[str(x.ID)]), axis=1)

model = doc2vec.Doc2Vec(vector_size=100, min_count=1, epochs=150, workers=cores,
                                window=5, hs=0, negative=5, sample=1e-5, dm_concat=1)

corpus = dataset['tagged_descriptions'].tolist()

model.build_vocab(corpus)

model.train(corpus, total_examples=model.corpus_count, epochs=model.epochs)

Run Code Online (Sandbox Code Playgroud)

然后将其转储到 pickle 文件中。词向量用于训练分类器(例如随机森林)来预测电影情绪。

现在假设在生产中,有一个文档包含一些全新的词汇。话虽如此,他们并不在 doc2vec 模型训练期间在场的人中。我想知道如何处理这样的情况。

作为旁注,我知道更新 gensim Doc2Vec 模型Gensim 的训练文档:如何使用以前的 word2vec 模型重新训练 doc2vec 模型。然而,我希望能对此事有更多的了解。

python nlp gensim doc2vec

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