gpt4 book ai didi

python - 我得到的向量多于我的文档大小 - gensim doc2vec

转载 作者:行者123 更新时间:2023-12-01 08:22:44 24 4
gpt4 key购买 nike

我有蛋白质序列并想做 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)

打印(len(标记))

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

最佳答案

标签数量a Doc2Vec模型将学习的数量等于您提供的唯一标签的数量。您提供了1612个不同的r.id值,以及 30 个不同的 r.label值,因此标签总数大于文档计数。

(我怀疑你的 r.id 值是普通整数,但从 1 开始。如果你使用普通整数而不是字符串作为标签,那么 Doc2Vec 将使用这些整数作为其内部向量数组的索引直接。因此小于您使用的数字的 int 索引(例如 0)也将被分配。因此,您的已知标签总数为 1612 + 30 + 1,因为它还为标签 0 分配了空间。)

因此,这解释了您的标签计数,并且不一定有问题。但要注意:

  • 您的数据集非常小:大多数已发表的作品使用数十万到数百万个文档。有时您仍然可以通过使用较小的向量或更多的训练周期来勉强获得有用的向量,但主要是 Doc2Vec类似的算法需要更多的数据才能发挥最佳效果。 (仍然:矢量 size=5 非常小!)

  • 特别是对于小数据,简单的 PV-DBOW 模式 ( dm=0 ) 通常是快速训练的最佳表现。 (但请注意:它不会使用上下文窗口训练单词向量,除非您添加 dbow_words=1 选项,这又会因额外的单词向量训练而减慢速度。)

  • 您是否应该使用标签作为文档标签并不确定 - Doc2Vec 的经典用法只需给每个文档一个唯一的 ID,然后让下游步骤了解与其他事物的关系。混合已知的其他文档级标签有时会有所帮助或有害,具体取决于您的数据和最终目标。 (更多的标签在某种程度上可以“稀释”通过更大的模型学到的任何东西。)

  • 至少在自然语言中,保留仅出现一次或几次的单词通常可能会损害整体向量质量。出现的次数太少,无法很好地对它们进行建模,而且根据齐普夫定律,这样的单词会很多,它们最终可能会严重干扰其他实体的训练。所以默认min_count=5 (或者对于更大的数据集甚至更高)通常有助于整体质量,并且您不应该假设简单地保留更多数据, min_count=0 ,必然有帮助。

关于python - 我得到的向量多于我的文档大小 - gensim doc2vec,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54521323/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com