我有蛋白质序列,并希望做doc2vec。我的目标是为每个句子/序列的一个载体。
我有1612句/序列和30类,这样的标签是不是唯一的,许多文件共享相同的标签。
所以,当我第一次尝试doc2vec,它给我的只是30向量这是独一无二的标签数量。于是我决定多个标签以获得每个句子的向量。
当我这样做,我结束了比我更多的句子载体。任何解释什么可能出现了问题?
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)
标签一Doc2Vec
模型将学习的数量等于您所提供的独特标签的数量。您提供的1612个不同r.id
值,以及30个不同的r.label
值,因此的不仅仅是您的文档数量较大的标签总数。
(我怀疑你的r.id
值是普通整数,但在1开始。如果你使用纯整数,而不是字符串,如标签,然后Doc2Vec
将直接使用这些整数为指标,其内置矢量阵列。并由此INT指标是不到您使用的号码,如0,也将被分配。对标签0。因此,你的1612个+ 30 + 1共知的标签数,因为它还分配的空间)
所以,这说明你的标签数,并没有什么一定是错误的。但是请注意:
Doc2Vec
和类似的算法需要更多的数据来效果最好。 (静像:矢量size=5
是相当微小的!)dm=0
)往往是一个快速培训顶级表演。 (但是请注意:它不使用上下文窗口,除非你加dbow_words=1
选项,然后再减慢它与另外一个词 - 矢量训练训练字向量。)Doc2Vec
的只是给每个文档一个唯一的ID - 然后让下游步骤学习关系到其他事情。在已知的其他文档级标签混合有时可以帮助或伤害,取决于您的数据和最终目标。 (更多标签可以在一定程度,“稀释”无论是在较大的模型学习。)min_count=5
(或甚至更大的数据集更高)往往有助于整体素质,你不应该假设,仅仅保留更多数据,以min_count=0
,一定帮助。