在gensim中,当我提供一个字符串作为训练doc2vec模型的输入时,我收到此错误:
TypeError('不知道如何处理uri%s'%repr(uri))
我提到了这个问题Doc2vec:TaggedLineDocument() 但仍然对输入格式有疑问.
documents = TaggedLineDocument('myfile.txt')
myFile.txt是否应该将令牌作为列表列表,或者每个文档或字符串的每行中都有单独的列表?
For eg - 我有2份文件.
Doc 1:机器学习是从模式识别研究演变而来的计算机科学的一个子领域.
Doc 2:Arthur Samuel将机器学习定义为"让计算机具备学习能力的研究领域".
那么,它应该是myFile.txt什么样的?
案例1:每行中每个文档的简单文本
机器学习是从模式识别研究演变而来的计算机科学的一个子领域
Arthur Samuel将机器学习定义为一个让计算机具备学习能力的研究领域
案例2:列表中包含每个文档的标记
[ ["Machine", "learning", "is", "a", "subfield", "of", "computer", "science", "that", "evolved", "from", "the", "study", "of", "pattern", "recognition"],
["Arthur", "Samuel", "defined", "machine", "learning", "as", "a", "Field", "of", "study", "that", "gives", "computers" ,"the", "ability", "to", "learn"] ]
Run Code Online (Sandbox Code Playgroud)
案例3:单独行中每个文档的标记列表
["Machine", "learning", "is", "a", "subfield", "of", "computer", "science", "that", "evolved", "from", "the", "study", "of", "pattern", "recognition"]
["Arthur", …Run Code Online (Sandbox Code Playgroud) 我想使用doc2vec表示和scikit-learn模型对文本文档进行分类.
我的问题是我迷失了如何开始.有人可以解释通常使用doc2vec与scikit-learn采取的一般步骤吗?
如果我想使用本网站https://github.com/jhlau/doc2vec 中预先训练的 doc2vec 模型,有谁知道我应该使用哪个函数?
我知道我们可以使用Keyvectors.load_word2vec_format()来加载来自预训练的 word2vec 模型的词向量,但是我们是否有类似的功能来加载预训练的 doc2vec 模型以及在 gensim 中?
非常感谢。
我尝试将句子映射到向量,以使句子相互比较。为了测试 gensim 的 Doc2Vec 模型,我下载了 sklearn 的新闻组数据集并在其上训练模型。
为了比较两个句子,我使用 model.infer_vector() 并且我想知道为什么使用同一句子的两个调用会为我提供不同的向量:
model = Doc2Vec(vector_size=100, window=8, min_count=5, workers=6)
model.build_vocab(documents)
epochs=10
for epoch in range(epochs):
print("Training epoch %d" % (epoch+1))
model.train(documents, total_examples=len(documents), epochs=epochs)
v1 = model.infer_vector("I feel good")
v2 = model.infer_vector("I feel good")
print(np.linalg.norm(v1-v2))
Run Code Online (Sandbox Code Playgroud)
输出:
训练时期 1
0.41606528
训练时期 2
0.43440753
训练纪元 3
0.3203116
训练纪元 4
0.3039317
训练纪元 5
0.68224543
训练时期 6
0.5862567
训练纪元 7
0.5424634
训练纪元 8
0.7618142
训练纪元 9
0.8170159
训练纪元 10
0.6028216
如果我设置 alpha 和 min_alpha = 0,我会得到“我感觉很好”和“我感觉很好”的一致向量,但模型在每个时期都给我相同的向量,所以它似乎没有学到任何东西:
训练时期 1 …
我正在使用 gensim 的 doc2vec 实现,并且我有几千个标有四个标签的文档。
yield TaggedDocument(text_tokens, [labels])
Run Code Online (Sandbox Code Playgroud)
我正在训练一个带有这些TaggedDocument列表的 Doc2Vec 模型。但是,我不确定如何推断训练期间未看到的文档的标签。我看到有一个 infer_vector 方法可以返回嵌入向量。但是我怎样才能从中得到最有可能的标签呢?
一个想法是推断我拥有的每个标签的向量,然后计算这些向量与我想要分类的新文档的向量之间的余弦相似度。这是要走的路吗?如果是这样,我怎样才能获得四个标签中每一个的向量?
我已经训练了Doc2Vec模型,试图获得预测。
我用
test_data = word_tokenize("????? ?????? ???????? ?.?.".lower())
model = Doc2Vec.load(model_path)
v1 = model.infer_vector(test_data)
sims = model.docvecs.most_similar([v1])
print(sims)
Run Code Online (Sandbox Code Playgroud)
退货
[('624319', 0.7534812092781067), ('566511', 0.7333904504776001), ('517382', 0.7264763116836548), ('523368', 0.7254455089569092), ('494248', 0.7212602496147156), ('382920', 0.7092794179916382), ('530910', 0.7086726427078247), ('513421', 0.6893941760063171), ('196931', 0.6776881814002991), ('196947', 0.6705600023269653)]
Run Code Online (Sandbox Code Playgroud)
接下来我试图知道,这个数字是什么文字
model.docvecs['624319']
Run Code Online (Sandbox Code Playgroud)
但是它只返回矢量表示形式
array([ 0.36298314, -0.8048847 , -1.4890883 , -0.3737898 , -0.00292279,
-0.6606688 , -0.12611026, -0.14547637, 0.78830665, 0.6172428 ,
-0.04928801, 0.36754376, -0.54034036, 0.04631123, 0.24066721,
0.22503968, 0.02870891, 0.28329515, 0.05591608, 0.00457001],
dtype=float32)
Run Code Online (Sandbox Code Playgroud)
那么,有什么方法可以从模型中获取该标签的文本吗?加载火车数据集需要很多时间,因此我尝试寻找另一种方法。
我有大约 20k 个包含 60 - 150 个单词的文档。在这 20K 份文档中,有 400 份文档的相似文档是已知的。这400个文档作为我的测试数据。
目前我正在删除这 400 个文档,并使用剩余的 19600 个文档来训练 doc2vec。然后我提取训练数据和测试数据的向量。现在,对于每个测试数据文档,我找到它与所有 19600 个训练文档的余弦距离,并选择余弦距离最小的前 5 个。如果标记的相似文档出现在前 5 个文档中,则认为它是准确的。准确率% = 准确记录数/记录总数。
我找到类似文档的另一种方法是使用 doc2Vec 最相似的方法。然后使用上面的公式计算准确度。
上面两个精度不匹配。随着每个时期,一个增加,另一个减少。
我正在使用此处给出的代码:https ://medium.com/scaleabout/a-gentle-introduction-to-doc2vec-db3e8c0cce5e 。用于训练 Doc2Vec。
我想知道如何调整超参数,以便我可以使用上述公式获得准确度。我应该使用余弦距离来查找最相似的文档还是应该使用 gensim 的最相似函数?
我有不同酒店的评论数据集。我试图通过酒店的评论找到类似的酒店。所以,我正在使用一种Doc2vec算法来实现这一目标。
Doc2Vec有没有什么方法可以使用 来衡量模型的准确性Gensim,而不是使用 的most_similar()函数来评估结果Gensim?
我正在Doc2Vec使用以下代码训练模型,其中tagged_data是TaggedDocument我之前设置的实例列表:
max_epochs = 40
model = Doc2Vec(alpha=0.025,
min_alpha=0.001)
model.build_vocab(tagged_data)
for epoch in range(max_epochs):
print('iteration {0}'.format(epoch))
model.train(tagged_data,
total_examples=model.corpus_count,
epochs=model.iter)
# decrease the learning rate
model.alpha -= 0.001
# fix the learning rate, no decay
model.min_alpha = model.alpha
model.save("d2v.model")
print("Model Saved")
Run Code Online (Sandbox Code Playgroud)
当我后来检查模型结果时,它们并不好。可能出了什么问题?
在 Python 3.9.2 中训练 Top2Vec 模型时,出现以下错误:
AttributeError Traceback (most recent call last)
<ipython-input-17-edc5d3cec713> in <module>
----> 1 model = Top2Vec(documents=data, speed="learn", workers=12)
~/opt/anaconda3/envs/py39/lib/python3.9/site-packages/top2vec/Top2Vec.py in __init__(self, documents, min_count, embedding_model, embedding_model_path, speed, use_corpus_file, document_ids, keep_documents, workers, tokenizer, use_embedding_model_tokenizer, umap_args, hdbscan_args, verbose)
353 'metric': 'cosine'}
354
--> 355 umap_model = umap.UMAP(**umap_args).fit(self._get_document_vectors(norm=False))
356
357 # find dense areas of document vectors
~/opt/anaconda3/envs/py39/lib/python3.9/site-packages/top2vec/Top2Vec.py in _get_document_vectors(self, norm)
545 return self.model.docvecs.vectors_docs_norm
546 else:
--> 547 return self.model.docvecs.vectors_docs
548 else:
549 return self.document_vectors
AttributeError: 'KeyedVectors' object has no …Run Code Online (Sandbox Code Playgroud)