我创建了一个人工语料库(包含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文件):
答案 0 :(得分:2)
是的,Doc2Vec
和Word2Vec
在合成数据上经常被尝试并且非常有用。但是,如果数据不能反映出与第一次开发这些算法时所用的自然语言相同的关联/分布,那么它们是否起作用可能需要更多的修改和非典型参数。
首先要进行的设置是使用dm=0
模式。这就是原始“段落向量”论文的PV-DBOW
模式,具体来说,完全不训练单词向量 ,仅训练文档向量。因此,如果您通过查看词向量来测试这种模型,则结果将仅反映任何词向量的随机,未经训练的初始化值。
请改为检查model.docvecs
,以确保您在数据中指定的任何文档标签之间的相似性,以及它们之间可能更有用的关系。
(如果您也想让Doc2Vec
模型学习单词–不一定很重要,尤其是在数据集较小或文档向量是主要兴趣的情况下–您必须使用{ {1}}模式,或将dm=1
添加到dbow_words=1
,以便该模型添加交错的跳过语法训练,但请注意,单词向量训练可能对数据的影响很弱/无意义/有害。和您的dm=0
示例项目一样,对重复令牌进行排序。)
另外,在这样的模型中使用非常低的['chair', 'chair', 'chair', 'chair', 'chair', 'table', 'table']
通常不是一个好主意-因为具有任意特质非代表性外观的此类令牌对周围更常见的令牌的连贯性的损害更大,而无济于事。