doc2vec 可以在人工 "text" 上工作吗?

Can doc2vec work on an artificial "text"?

我创建了一个人工语料库(包含 52624 个文档)。每个文档都是一个对象列表(其中有 461 个)。

所以一种可能是:['chair', 'chair', 'chair', 'chair', 'chair', 'table', 'table']

这是词汇表的条形图(对数刻度)。

这就是我定义模型的方式:

model = gensim.models.doc2vec.Doc2Vec(vector_size=8, workers=4, min_count=1,epochs=40, dm=0)

观察地点: model.wv.most_similar_cosmul(positive = ["chair"])

我看到不相关的词

在我看来,以下的效果也很差:

inferred_vector = model.infer_vector(["chair"])
model.docvecs.most_similar([inferred_vector])

我的模型哪里出错了?

更新

有数据(JSON个文件):

https://gofile.io/d/bZDcPX

是的,Doc2VecWord2Vec 经常在合成数据上尝试并且有用。但是它们是否有效可能需要更多的修补和非典型参数,当数据没有反映出与这些算法最初开发的 natural-language 相同的 correlations/distributions 类型时。

首先,您使用的是 dm=0 模式。那是原始“段落向量”论文的 PV-DBOW 模式,具体来说 根本 不训练 word-vectors ,只有 doc-vectors。因此,如果您通过查看 word-vectors 来测试此类模型,您的结果将仅反映任何 word-vectors.

的随机、未经训练的初始化值

改为检查 model.docvecs,了解您在数据中指定的任何 doc-tags 之间的相似性,它们可能是更有用的关系。

(如果你想让你的 Doc2Vec 模型也学习单词——这不一定重要,尤其是对于一个小数据集或者 doc-vectors 是你的主要兴趣所在——你会使用 dm=1 模式,或将 dbow_words=1 添加到 dm=0 以便模型添加交错 skip-gram 训练。但请注意 word-vector 训练可能 weak/meaningless/harmful 的数据看起来只是重复标记的排序运行,就像您的 ['chair', 'chair', 'chair', 'chair', 'chair', 'table', 'table'] 示例项目一样。)

另外,在此类模型中使用 very-low min_count=1 通常不是一个好主意 - 因为具有任意特质 non-representative 外观的标记会对周围 more-common 令牌比他们帮助。