标签: doc2vec

创建word2vec模型syn1neg.npy扩展名

在创建模型时,没有更多具有扩展完成的模型

.syn1neg.npy

syn0.npy

我的代码如下:

corpus= x+y
tok_corp= [nltk.word_tokenize(sent.decode('utf-8')) for sent in corpus]
model = gensim.models.Word2Vec(tok_corp, min_count=1, size = 32)
model.save('/home/Desktop/test_model')

model = gensim.models.Word2Vec.load('/home/kafein/Desktop/chatbot/test_model')
Run Code Online (Sandbox Code Playgroud)

只有一个模型文件

test_model
Run Code Online (Sandbox Code Playgroud)

哪一部分我错了?

python python-3.x word2vec deep-learning doc2vec

6
推荐指数
1
解决办法
2977
查看次数

使用doc2vec获得良好性能所需的最小数据集大小是多少?

doc2vec在不同大小的数据集上训练时如何执行?在原始语料库中没有提到数据集大小,所以我想知道从doc2vec获得良好性能所需的最小大小是多少.

nlp doc2vec

6
推荐指数
1
解决办法
1819
查看次数

改进Gensim Doc2vec结果

我尝试在600000行句子上应用doc2vec:代码如下:

from gensim import models
model = models.Doc2Vec(alpha=.025, min_alpha=.025, min_count=1, workers = 5)
model.build_vocab(res)
token_count = sum([len(sentence) for sentence in res])
token_count

%%time
for epoch in range(100):
    #print ('iteration:'+str(epoch+1))
    #model.train(sentences)
    model.train(res, total_examples = token_count,epochs = model.iter)
    model.alpha -= 0.0001  # decrease the learning rate`
    model.min_alpha = model.alpha  # fix the learning rate, no decay
Run Code Online (Sandbox Code Playgroud)

通过上述实现,我的结果非常糟糕.我从教程中建议的更改改变了以下行:

  model.train(sentences)
Run Code Online (Sandbox Code Playgroud)

如:

 token_count = sum([len(sentence) for sentence in res])
model.train(res, total_examples = token_count,epochs = model.iter)
Run Code Online (Sandbox Code Playgroud)

python nlp gensim doc2vec

6
推荐指数
1
解决办法
3028
查看次数

训练一个 doc2Vec 模型实际需要多少数据?

我一直在使用gensim 的库来训练 doc2Vec 模型。在尝试了不同的数据集进行训练后,我对 doc2Vec 模型的理想训练数据大小应该是多少感到困惑?

我将在这里分享我的理解。请随时纠正我/建议更改-

  1. 通用数据集上训练——如果我想使用在通用数据集上训练的模型,在特定用例中,我需要对大量数据进行训练。
  2. 在上下文相关数据集上进行训练 - 如果我想在与我的用例具有相同上下文的数据上对其进行训练,通常训练数据的大小可以更小。

但是在这两种情况下,用于训练的单词数量是多少?

一般而言,当误差图达到“肘点”时,我们停止训练 ML 模型,在此进一步训练不会显着降低误差。有没有朝这个方向进行任何研究 - doc2Vec 模型的训练在到达肘部后停止的地方?

neural-network gensim doc2vec

6
推荐指数
1
解决办法
2202
查看次数

Doc2vec:gensim doc2vec模型中只有10个docvecs?

我使用gensim拟合doc2vec模型,标记文档(长度> 10)作为训练数据.目标是获取所有训练文档的doc向量,但在model.docvecs中只能找到10个向量.

训练数据的例子(长度> 10)

docs = ['This is a sentence', 'This is another sentence', ....]
Run Code Online (Sandbox Code Playgroud)

有一些预处理

doc_=[d.strip().split(" ") for d in doc]
doc_tagged = []
for i in range(len(doc_)):
  tagd = TaggedDocument(doc_[i],str(i))
  doc_tagged.append(tagd)
Run Code Online (Sandbox Code Playgroud)

标记的文档

TaggedDocument(words=array(['a', 'b', 'c', ..., ],
  dtype='<U32'), tags='117')
Run Code Online (Sandbox Code Playgroud)

适合doc2vec模型

model = Doc2Vec(min_count=1, window=10, size=100, sample=1e-4, negative=5, workers=8)
model.build_vocab(doc_tagged)
model.train(doc_tagged, total_examples= model.corpus_count, epochs= model.iter)
Run Code Online (Sandbox Code Playgroud)

然后我得到了最终的模型

len(model.docvecs)
Run Code Online (Sandbox Code Playgroud)

结果是10 ...

我尝试了其他数据集(长度> 100,1000)并得到了相同的结果len(model.docvecs).所以,我的问题是:如何使用model.docvecs来获取完整的向量?(不使用model.infer_vector)model.docvecs旨在提供所有培训docvecs?

nlp machine-learning gensim word2vec doc2vec

6
推荐指数
1
解决办法
588
查看次数

如何使用 gensim wikicorpus 获取带有标点符号的维基百科语料库文本?

我正在尝试获取带有标点符号的文本,因为在我的 doc2vec 模型中考虑后者很重要。然而,维基语料库只检索文本。在网上搜索后,我找到了这些页面:

  1. 来自 gensim github 问题部分的页面。这是某个人提出的问题,答案是对 WikiCorpus 进行子类化(由 Piskvorky 回答)。幸运的是,在同一页面中,有一个代表建议的“子类”解决方案的代码。代码由 Rhazegh 提供。(链接
  2. 来自 stackoverflow 的页面,标题为:“在解析 wiki 语料库时禁用 Gensim 删除标点符号等”。但是,没有提供明确的答案,并在 spaCy 的上下文中进行了处理。(链接

我决定使用第 1 页中提供的代码。我当前的代码 (mywikicorpus.py):

import sys
import os
sys.path.append('C:\\Users\\Ghaliamus\\Anaconda2\\envs\\wiki\\Lib\\site-packages\\gensim\\corpora\\')

from wikicorpus import *

def tokenize(content):
    # override original method in wikicorpus.py
    return [token.encode('utf8') for token in utils.tokenize(content, lower=True, errors='ignore')
        if len(token) <= 15 and not token.startswith('_')]

def process_article(args):
   # override original method in wikicorpus.py
    text, lemmatize, title, pageid = args
    text = filter_wiki(text)
    if …
Run Code Online (Sandbox Code Playgroud)

python nlp gensim doc2vec

6
推荐指数
1
解决办法
2415
查看次数

使用 Doc2Vec 测量两个文档之间的相似性

我已经训练了 gensim doc2Vec 模型,它可以找到与未知文档最相似的文档。

现在我需要找到两个未知文档之间的相似度值(它们不在训练数据中,所以它们不能被 doc id 引用)

d2v_model = doc2vec.Doc2Vec.load(model_file)

string1 = 'this is some random paragraph'
string2 = 'this is another random paragraph'

vec1 = d2v_model.infer_vector(string1.split())
vec2 = d2v_model.infer_vector(string2.split())
Run Code Online (Sandbox Code Playgroud)

在上面的代码中 vec1 和 vec2 被成功初始化为一些值和大小 - 'vector_size'

现在查看 gensim api 和示例,我找不到适合我的方法,他们都期待 TaggedDocument

我可以按值比较特征向量值,如果它们更接近 => 文本更相似吗?

python nlp machine-learning gensim doc2vec

6
推荐指数
1
解决办法
6214
查看次数

doc2vec - 如何更快地推断文档向量?

我已经训练了大约 2300 个段落(每个段落在 2000-12000 个单词之间)的段落向量,每个段落的向量大小为 300。现在,我需要推断大约 100,000 个句子的段落向量,我将这些句子视为段落(每个句子大约 10-30 个)每个单词对应于之前已训练的 2300 个段落)。

所以,我正在使用

model.infer_vector(sentence)

但是,问题是它花费的时间太长,并且它不接受任何参数,例如“ workers”。!有没有办法可以通过线程或其他方式加速该过程?我使用的是带有 8GB 内存的机器,当我使用以下命令检查可用核心时

cores = multiprocessing.cpu_count()
Run Code Online (Sandbox Code Playgroud)

结果是8。

我需要这个来回答多项选择题。另外,是否还有其他库/模型doc2vec可以帮助完成此任务?

在此先感谢您的时间。

python gensim word2vec doc2vec

5
推荐指数
1
解决办法
3012
查看次数

Doc2Vec:区分句子和文档

我只是在玩来自 gensim 的 Doc2Vec,分析堆栈交换转储以分析问题的语义相似性以识别重复项。

Doc2Vec-Tutorial的教程似乎将输入描述为带标签的句子。

但是原始论文:Doc2Vec-Paper声称该方法可用于推断段落/文档的固定长度向量。

有人可以解释在这种情况下句子和文档之间的区别,以及我将如何推断段落向量。

由于一个问题有时可以跨越多个句子,我想,在训练期间,我会给来自同一个问题的句子使用相同的标签,但是我将如何在看不见的问题上对 infer_vector 执行此操作?

这个笔记本:Doc2Vec-Notebook

似乎是关于 TRAIN 和 TEST 文档的训练向量,有人可以解释这背后的基本原理吗,我也应该这样做吗?

python gensim doc2vec

5
推荐指数
1
解决办法
2051
查看次数

如何使用 GPT-2 获取文档嵌入?

我很好奇使用 GPT-2 是否可以为文档向量(长度变化很大)带来更高的准确性(它会超越现有技术吗?)

事实上,我最感兴趣的是尽可能准确的文档嵌入。我想知道使用 GPT-2 是否会得到比段落向量更准确的结果。

我听说为了从 GPT-2 获取向量“你可以在其隐藏层(通常是最后几个隐藏层)使用向量输出的加权和和/或串联作为其相应单词甚至“含义”的表示整个文本的内容,尽管对于这个角色,BERT 使用得更频繁,因为它是双向的,并且考虑了前向和后向上下文。”

作为一名机器学习和 NLP 初学者,我很想知道如何进行此操作,或者希望获得正确的方向以了解有关如何在 Python 中尝试此操作的更多信息。

我之前尝试过微调 GPT-2,但我不知道如何从中提取文本向量。

python nlp artificial-intelligence machine-learning doc2vec

5
推荐指数
0
解决办法
1528
查看次数