Machine learning doc2vec能在人造设备上工作吗;文本“;?

Machine learning doc2vec能在人造设备上工作吗;文本“;?,machine-learning,nlp,gensim,word2vec,doc2vec,Machine Learning,Nlp,Gensim,Word2vec,Doc2vec,我创建了一个人工语料库(包含52624个文档)。每个文档都是对象列表(共有461个对象) 因此,一种可能是:[“椅子”、“椅子”、“椅子”、“椅子”、“椅子”、“桌子”、“桌子”] 这是词汇表的条形图(对数刻度) 我就是这样定义模型的: model = gensim.models.doc2vec.Doc2Vec(vector_size=8, workers=4, min_count=1,epochs=40, dm=0) 观察地点: model.wv.最相似的cosmul(正=[“椅子]) 我

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

因此,一种可能是:
[“椅子”、“椅子”、“椅子”、“椅子”、“椅子”、“桌子”、“桌子”]

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

我就是这样定义模型的:

model = gensim.models.doc2vec.Doc2Vec(vector_size=8, workers=4, min_count=1,epochs=40, dm=0)
观察地点:
model.wv.最相似的cosmul(正=[“椅子])

我看到一些无关的词

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

inferred_vector = model.infer_vector(["chair"])
model.docvecs.most_similar([inferred_vector])
我的模型在哪里失败了

更新

有以下数据(JSON文件):


是的,
Doc2Vec
Word2Vec
经常在合成数据上尝试,并且很有用。但是,如果数据没有反映出与这些算法最初开发所基于的自然语言相同的相关性/分布,那么它们是否有效可能需要更多的修补和非典型参数

首先也是最重要的是,您使用的是
dm=0
模式。这是原始“段落向量”论文的
PV-DBOW
模式,具体来说根本不训练单词向量,只训练文档向量。因此,如果您通过查看单词向量来测试这样的模型,您的结果将只反映任何单词向量的随机、未经训练的初始化值

检查
model.docvecs
,查看您在数据中指定的任何文档标记之间的相似性,以及它们之间可能更有用的关系

(如果你想让你的
Doc2Vec
模型也学习单词——这并不一定重要,尤其是对于一个小数据集或者你主要感兴趣的文档向量——你必须使用
dm=1
模式,或者将
dbow_words=1
添加到
dm=0
中,这样模型就可以添加交错的skip gram训练注意:单词向量训练可能是弱的/无意义的/有害的,因为数据看起来只是重复标记的排序运行,就像您的
['chair'、'chair'、'chair'、'chair'、'chair'、'table']
示例项一样。)


另外,在这样的模型中,使用非常低的
min_count=1
通常是一个坏主意,因为这种具有任意特质的非代表性外观的代币对周围更常见代币的连贯性造成的破坏比它们的帮助更大。

非常感谢!
min_conut=1
的想法是我不想失去任何类型的obj发射型计算机断层扫描仪(这不像是一种真正的语言,你不想忽略深奥的单词。我认为
dm=0
更合适,因为单词的顺序在这里是不相关的。单词向量实际上对我来说并不重要,如果顺序不合适,
dm=0
很有意义,但是你应该只比较经过训练的
>标记
,而不是单词(或者,如果有其他原因尝试dm=1,则对每个文本进行洗牌,以阻止由无关紧要但可能受格式影响的排序所创建的任何人工关系,或者使用大量的
窗口
,以便本质上每个单词都在其他单词的上下文中。)即使数据不是真实的自然语言,但非常罕见的标记比它们的价值更麻烦这一观点仍然适用。在许多领域,从单个第一个/特殊的示例过度概括通常比认为它是中性的更糟糕。同样,对于经典设置中的文档向量,每个文档都有自己的唯一ID:when文本中没有其他示例包含唯一的单词,DBOW训练可能会过度强调该单词(没有抵消示例),或者DM训练可能会将该单词的向量注入您希望在文档向量中具有的一些“预测能力”。