DOC2VEC:获取标签的文本



我已经训练了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)

返回

[('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']

,但它仅返回我的矢量表示

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向量直接转换回原始文本(有关单词顺序的信息等,在减少文本的过程中丢失了 ->向量)。<<<<<<<<

但是,当您为Doc2Vec()创建TaggedDocument s时,您 can can 通过标记每个文档的索引来检索原始文本。假设您有一个名为texts的列表中包含的句子/文档语料库。使用这样的enumerate()为每个句子生成唯一的索引i,并将其作为tags的CC_7参数传递:

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]])

最新更新