只需阅读gensim页面上的doc2vec命令即可.
我很好奇命令"intersect_word2vec_format".
我对这个命令的理解是它允许我将预训练的word2vec模型中的矢量值注入我的doc2vec模型,然后使用预训练的word2vec值训练我的doc2vec模型,而不是从我的文档语料库中生成单词矢量值.结果是我获得了更准确的doc2vec模型,因为我使用的是预训练的w2v值,这是从我相对较小的文档语料库中生成的更大的数据库中生成的.
我对这个命令的理解是正确还是不正确?;-)
我知道要使用doc2vec中的给定标签获取文档向量print(model.docvecs['recipe__11'])。
我的文档向量是食谱(标签以开头recipe__),报纸(标签以开头news__)或配料(标签以开头ingre__)
现在,我想检索配方的所有文档向量。我的配方文件的格式是recipe__<some number>(例如,配方__23,配方__34)。我想知道是否有可能使用一种模式(例如,以开头的标签recipe__)获得多个文档向量
请帮我!
我想上手word2vec和doc2vec使用优秀的教程,在这里和这里,并试图使用代码样本.我只添加了line_clean()删除标点符号,停用词等的方法.
但是我line_clean()在训练迭代中调用的方法遇到了麻烦.我理解对全局方法的调用搞砸了,但我不知道如何解决这个问题.
Iteration 1
Traceback (most recent call last):
File "/Users/santino/Dev/doc2vec_exp/doc2vec_exp_app/doc2vec/untitled.py", line 96, in <module>
train()
File "/Users/santino/Dev/doc2vec_exp/doc2vec_exp_app/doc2vec/untitled.py", line 91, in train
model.train(sentences.sentences_perm(),total_examples=model.corpus_count,epochs=model.iter)
File "/Users/santino/Dev/doc2vec_exp/doc2vec_exp_app/doc2vec/untitled.py", line 61, in sentences_perm
shuffled = list(self.sentences)
AttributeError: 'TaggedLineSentence' object has no attribute 'sentences'
Run Code Online (Sandbox Code Playgroud)
我的代码如下:
import gensim
from gensim import utils
from gensim.models.doc2vec import TaggedDocument
from gensim.models import Doc2Vec
import os
import random
import numpy
from sklearn.linear_model import LogisticRegression
import logging
import sys …Run Code Online (Sandbox Code Playgroud) 我已经训练了400万条记录的doc2vec模型.我想从我的数据中找到一个新句子,但是我的结果非常糟糕.
数据样本:
Xolo Era (Black, 8 GB)(1 GB RAM).
Sugar C6 (White, 16 GB)(2 GB RAM).
Celkon Star 4G+ (Black & Dark Blue, 4 GB)(512 MB RAM).
Panasonic Eluga I2 (Metallic Grey, 16 GB)(2 GB RAM).
Itel IT 5311(Champagne Gold).
Itel A44 Pro (Champagne, 16 GB)(2 GB RAM).
Nokia 2 (Pewter/ Black, 8 GB)(1 GB RAM).
InFocus Snap 4 (Midnight Black, 64 GB)(4 GB RAM).
Panasonic P91 (Black, 16 GB)(1 GB RAM).
Run Code Online (Sandbox Code Playgroud)
在传递这些数据之前,我已经完成了预处理,包括1)停止删除单词.2)特殊字符和数值删除.3)小写数据.我也在测试过程中执行了相同的步骤.
我用于培训的代码:
sentences=doc2vec.TaggedLineDocument('training_data.csv') # i have used TaggedLineDocument …Run Code Online (Sandbox Code Playgroud) 我已经应用 Doc2vec 将文档转换为向量。之后,我在聚类中使用向量并找出与每个集群的质心最近/最相似的 5 个文档。现在我需要找到这些文档中最主要或最重要的术语,以便我可以弄清楚每个集群的特征。我的问题是有什么方法可以找出 Doc2vec 中文档的最主导或最相似的术语/单词。我正在使用 python 的 gensim 包来实现 Doc2vec
我在使用 Gensim 的 Doc2Vec 模型中的 most_similar 方法时遇到了麻烦。当我运行 most_similar 时,我只得到前 10 个标记文档的相似性(基于它们的标签——总是从 0-9)。对于此代码,我有 topn=5,但我使用了 topn=len(documents) 并且我仍然只获得前 10 个文档的相似度
标记文件:
tokenizer = RegexpTokenizer(r'\w+')
taggeddoc=[]
for index,wod in enumerate(model_data):
wordslist=[]
tagslist=[]
tokens = tokenizer.tokenize(wod)
td = TaggedDocument(gensim.utils.to_unicode(str.encode(' '.join(tokens))).split(), str(index))
taggeddoc.append(td)
documents=taggeddoc
Run Code Online (Sandbox Code Playgroud)
实例化模型:
model=gensim.models.Doc2Vec(documents, dm=0, dbow_words=1, iter=1, alpha=0.025, min_alpha=0.025, min_count=10)
Run Code Online (Sandbox Code Playgroud)
训练模型:
for epoch in range(100):
if epoch % 10 == 0:
print("Training epoch {}".format(epoch))
model.train(documents, total_examples=model.corpus_count, epochs=model.iter)
model.alpha -= 0.002
model.min_alpha = model.alpha
Run Code Online (Sandbox Code Playgroud)
问题在这里(我认为):
new = model_data[100].split()
new_vector = model.infer_vector(new)
sims = model.docvecs.most_similar([new_vector], topn=5) …Run Code Online (Sandbox Code Playgroud) 我想标记一个文档列表 by Gensim TaggedDocument(),然后将这些文档作为Doc2Vec().
我已阅读有关TaggedDocument 此处的文档,但我不明白参数words和tags.
我试过了:
texts = [[word for word in document.lower().split()]
for document in X.values]
texts = [[token for token in text]
for text in texts]
model = gensim.models.Doc2Vec(texts, vector_size=200)
model.train(texts, total_examples=len(texts), epochs=10)
Run Code Online (Sandbox Code Playgroud)
但我得到了错误'list' object has no attribute 'words'。