我们是否使用我们自己的数据正确更新了现有的 gemsim 模型?

问题描述

目的:我们正在探索使用 word2vec 模型对我们的数据进行聚类。我们正在寻找适合我们需求的理想模型,并且一直在使用 (1) 通过 Spacy 和 Gensim 提供的现有模型(仅在互联网数据上训练),(2)使用 Gensim 创建我们自己的自定义模型(在我们的技术上训练)仅数据)和 (3) 现在正在考虑创建混合模型,将我们的技术数据添加到现有模型(在互联网上训练 + 我们的数据)。

以下是我们如何创建将数据添加到现有 Gensim 模型的混合模型:

model = api.load("word2vec-google-news-300")
model = Word2Vec(size=300,min_count =1)
model.build_vocab(our_data)
model.train(our_data,total_examples=2,epochs =1)
model.wv.vocab

问题:就我们的意图而言,我们是否正确地做了一个在互联网上训练并与我们的数据分层的模型?

关注点:我们想知道我们的数据是否真的被添加到模型中。当使用最相似的函数时,我们看到与这个模型的更一般的词有非常高的相关性。我们的自定义模型与更多技术词汇的相关性要低得多。请参阅下面的输出

Most Similar results for 'Python'

This model (internet + our data):
'technicians' = .99
'system'      = .99
'working'     = .99

Custom model (just our data):
'scripting'   = .65
'perl'        = .63
'julia'       = .58

解决方法

否:您的代码不适用于您的意图。

当您执行该行时...

model = Word2Vec(size=300,min_count=1)

...您已经创建了一个全新的空 Word2Vec 对象,并将其分配给 model 变量,该变量会丢弃任何已经存在的内容。因此,预先加载的数据将不起作用。你只是在你的(小)数据上训练一个新模型。

此外,您加载的对象不是完整的 Word2Vec 模型。 Google 在 2013 年发布的“GoogleNews”向量只是向量,而不是完整模型。没有直接且可靠的方法来继续训练该对象,因为它缺少真正完整模型应具有的大量信息(包括词频和模型的内部权重)。

有一些先进的方法可以尝试使用这些值为您自己的模型建立种子 - 但与仅训练您的模型相比,它们涉及许多模糊的权衡和文档不足的步骤,以便最终结果具有任何价值自己的模型基于您自己的足够数据。在 Gensim 中没有正式记录/支持的方法。