在创建模型时,没有更多具有扩展完成的模型
.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)
哪一部分我错了?
doc2vec在不同大小的数据集上训练时如何执行?在原始语料库中没有提到数据集大小,所以我想知道从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) 我一直在使用gensim 的库来训练 doc2Vec 模型。在尝试了不同的数据集进行训练后,我对 doc2Vec 模型的理想训练数据大小应该是多少感到困惑?
我将在这里分享我的理解。请随时纠正我/建议更改-
但是在这两种情况下,用于训练的单词数量是多少?
一般而言,当误差图达到“肘点”时,我们停止训练 ML 模型,在此进一步训练不会显着降低误差。有没有朝这个方向进行任何研究 - doc2Vec 模型的训练在到达肘部后停止的地方?
我使用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?
我正在尝试获取带有标点符号的文本,因为在我的 doc2vec 模型中考虑后者很重要。然而,维基语料库只检索文本。在网上搜索后,我找到了这些页面:
我决定使用第 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) 我已经训练了 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
我可以按值比较特征向量值,如果它们更接近 => 文本更相似吗?
我已经训练了大约 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可以帮助完成此任务?
在此先感谢您的时间。
我只是在玩来自 gensim 的 Doc2Vec,分析堆栈交换转储以分析问题的语义相似性以识别重复项。
Doc2Vec-Tutorial上的教程似乎将输入描述为带标签的句子。
但是原始论文:Doc2Vec-Paper声称该方法可用于推断段落/文档的固定长度向量。
有人可以解释在这种情况下句子和文档之间的区别,以及我将如何推断段落向量。
由于一个问题有时可以跨越多个句子,我想,在训练期间,我会给来自同一个问题的句子使用相同的标签,但是我将如何在看不见的问题上对 infer_vector 执行此操作?
这个笔记本:Doc2Vec-Notebook
似乎是关于 TRAIN 和 TEST 文档的训练向量,有人可以解释这背后的基本原理吗,我也应该这样做吗?
我很好奇使用 GPT-2 是否可以为文档向量(长度变化很大)带来更高的准确性(它会超越现有技术吗?)
事实上,我最感兴趣的是尽可能准确的文档嵌入。我想知道使用 GPT-2 是否会得到比段落向量更准确的结果。
我听说为了从 GPT-2 获取向量“你可以在其隐藏层(通常是最后几个隐藏层)使用向量输出的加权和和/或串联作为其相应单词甚至“含义”的表示整个文本的内容,尽管对于这个角色,BERT 使用得更频繁,因为它是双向的,并且考虑了前向和后向上下文。”
作为一名机器学习和 NLP 初学者,我很想知道如何进行此操作,或者希望获得正确的方向以了解有关如何在 Python 中尝试此操作的更多信息。
我之前尝试过微调 GPT-2,但我不知道如何从中提取文本向量。