Doc2Vec:获取标签的文本
Doc2Vec: get text of the label
我已经训练了 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)
returns
[('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)]
接下来我想知道,这个号码的文字是什么
model.docvecs['624319']
但它returns我只是矢量表示
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)
那么,有什么方法可以从模型中获取此标签的文本吗?
加载火车数据集需要很多时间,所以我尝试找出另一种方法。
无法将 doc 向量直接转换回原始文本(有关词序等信息在减少文本 --> 向量的过程中丢失)。
但是,您可以在创建TaggedDocument
s for Doc2Vec()
. Let's say you had a corpus of sentences/documents that are contained in a list called texts
. Use enumerate()
时通过在语料库列表中标记每个文档来检索原始文本以生成唯一的每个句子的索引 i
,并将其作为 TaggedDocument
的 tags
参数传递:
tagged_data = []
for i, t in enumerate(texts):
tagged_data.append(TaggedDocument(words=word_tokenize(c.lower()), tags=[str(i)]))
model = Doc2Vec(vector_size=VEC_SIZE,
window=WINDOW_SIZE,
min_count=MIN_COUNT,
workers=NUM_WORKERS)
model.build_vocab(tagged_data)
然后在训练之后,当您从 model.docvecs.most_similar()
得到结果时,每个元组中的第一个数字将是您原始语料库文本列表的索引。例如,如果您 运行 model.docvecs.most_similar([some_vector])
并得到:
[('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)]
... 然后您可以通过索引到您的初始语料库列表来检索第一个结果 ('624319', 0.7534812092781067)
的原始文档:texts[624319]
.
或者,如果您想遍历并获取所有最相似的文本,您可以这样做:
most_similar_docs = []
for d in model.docvecs.most_similar([some_vector]):
most_similar_docs.append(texts[d[0]])
我已经训练了 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)
returns
[('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)]
接下来我想知道,这个号码的文字是什么
model.docvecs['624319']
但它returns我只是矢量表示
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)
那么,有什么方法可以从模型中获取此标签的文本吗? 加载火车数据集需要很多时间,所以我尝试找出另一种方法。
无法将 doc 向量直接转换回原始文本(有关词序等信息在减少文本 --> 向量的过程中丢失)。
但是,您可以在创建TaggedDocument
s for Doc2Vec()
. Let's say you had a corpus of sentences/documents that are contained in a list called texts
. Use enumerate()
时通过在语料库列表中标记每个文档来检索原始文本以生成唯一的每个句子的索引 i
,并将其作为 TaggedDocument
的 tags
参数传递:
tagged_data = []
for i, t in enumerate(texts):
tagged_data.append(TaggedDocument(words=word_tokenize(c.lower()), tags=[str(i)]))
model = Doc2Vec(vector_size=VEC_SIZE,
window=WINDOW_SIZE,
min_count=MIN_COUNT,
workers=NUM_WORKERS)
model.build_vocab(tagged_data)
然后在训练之后,当您从 model.docvecs.most_similar()
得到结果时,每个元组中的第一个数字将是您原始语料库文本列表的索引。例如,如果您 运行 model.docvecs.most_similar([some_vector])
并得到:
[('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)]
... 然后您可以通过索引到您的初始语料库列表来检索第一个结果 ('624319', 0.7534812092781067)
的原始文档:texts[624319]
.
或者,如果您想遍历并获取所有最相似的文本,您可以这样做:
most_similar_docs = []
for d in model.docvecs.most_similar([some_vector]):
most_similar_docs.append(texts[d[0]])