我得到比我的文档大小的详细矢量 - gensim doc2vec

问题描述 投票:0回答:1

我有蛋白质序列,并希望做doc2vec。我的目标是为每个句子/序列的一个载体。

我有1612句/序列和30类,这样的标签是不是唯一的,许多文件共享相同的标签。

所以,当我第一次尝试doc2vec,它给我的只是30向量这是独一无二的标签数量。于是我决定多个标签以获得每个句子的向量。

当我这样做,我结束了比我更多的句子载体。任何解释什么可能出现了问题?

Screenshot of my data

Screenshot of corpus

tagged = data.apply(lambda r: TaggedDocument(words=(r["A"]), tags=[r.label,r.id]), axis=1)

print(len(tagged))

1612

sents = tagged.values

model = Doc2Vec(sents, size=5, window=5, iter=20, min_count = 0)

sents.shape

(1612,)

model.docvecs.vectors_docs.shape

(1643,5)

Screenshot of my data

python tags gensim doc2vec
1个回答
0
投票

标签一Doc2Vec模型将学习的数量等于您所提供的独特标签的数量。您提供的1612个不同r.id值,以及30个不同的r.label值,因此的不仅仅是您的文档数量较大的标签总数。

(我怀疑你的r.id值是普通整数,但在1开始。如果你使用纯整数,而不是字符串,如标签,然后Doc2Vec将直接使用这些整数为指标,其内置矢量阵列。并由此INT指标是不到您使用的号码,如0,也将被分配。对标签0。因此,你的1612个+ 30 + 1共知的标签数,因为它还分配的空间)

所以,这说明你的标签数,并没有什么一定是错误的。但是请注意:

  • 您的数据集非常小:最发表的作品采用10S-的-十万到数百万个文档。有时你可以仍然使用较小的载体或更多的训练时期勉强维持有用的载体,但主要是Doc2Vec和类似的算法需要更多的数据来效果最好。 (静像:矢量size=5是相当微小的!)
  • 数据量小,尤其是简单的PV-DBOW模式(dm=0)往往是一个快速培训顶级表演。 (但是请注意:它不使用上下文窗口,除非你加dbow_words=1选项,然后再减慢它与另外一个词 - 矢量训练训练字向量。)
  • 无论你应该使用标签的所有文档的标签是不肯定的 - 经典使用Doc2Vec的只是给每个文档一个唯一的ID - 然后让下游步骤学习关系到其他事情。在已知的其他文档级标签混合有时可以帮助或伤害,取决于您的数据和最终目标。 (更多标签可以在一定程度,“稀释”无论是在较大的模型学习。)
  • 至少在自然语言,保留,仅出现一次或几次往往可能是有害的整体矢量质量的话。有太少的出现对他们好模型,以后还会有,由齐普夫定律,有很多这样的话,他们可以拉闸干扰很多机智其他entitites的培训。所以默认min_count=5(或甚至更大的数据集更高)往往有助于整体素质,你不应该假设,仅仅保留更多数据,以min_count=0,一定帮助。
© www.soinside.com 2019 - 2024. All rights reserved.