Gensim 预训练模型相似度

Gensim pretrained model similarity

问题:

我正在使用带向量的手套预训练模型,用特定领域重新训练我的模型,比如#cars,训练后我想在我的领域中找到相似的词,但我得到的词不在我的领域语料库中,我相信它是来自手套的载体。

model_2.most_similar(positive=['spacious'],    topn=10)

[('bedrooms', 0.6275501251220703),
 ('roomy', 0.6149100065231323),
 ('luxurious', 0.6105825901031494),
 ('rooms', 0.5935696363449097),
 ('furnished', 0.5897485613822937),
 ('cramped', 0.5892841219902039),
 ('courtyard', 0.5721820592880249),
 ('bathrooms', 0.5618442893028259),
 ('opulent', 0.5592212677001953),
 ('expansive', 0.555268406867981)]

在这里,我期待域语料库中提到的腿部空间、汽车宽敞的功能。我们如何在具有相似向量的同时排除手套向量?

谢谢

您不能从已训练的模型中排除单词。我不知道你在哪个框架上工作,但我会给你 Keras 的例子,因为它很容易理解意图。

你可以做的是使用嵌入层,用 GloVe "knowledge" 填充它,然后用你的语料库恢复训练,这样该层就会学习单词并使它们适合你的特定领域。您可以在 Keras blog

中阅读更多相关信息

一组简单的通用词向量中可能没有足够的信息来按使用领域过滤邻居。

您可以尝试使用混合权重:将与 'spacious''cars' 和 return 的相似之处结合起来,在该组合中排名靠前的结果——这可能有助于小的。

most_similar() 方法提供一个以上的 positive 词可能会近似于此。如果您确定 interference/overlap 的一些主要来源,您甚至可以使用 negative 单词示例,类似于 word2vec 如何找到类比的候选答案(尽管这也可能会抑制有用的结果与这两个域合法相关,例如 'roomy')。例如:

candidates = vec_model.most_similar(positive=['spacious', 'car'], 
                                    negative=['house'])

(除了使用像 'car' 或 'house' 这样的单个词,您还可以尝试使用由定义域的许多词组合而成的向量。)

但明显的区别听起来像是一个研究项目,而不是现成的 libraries/vectors 很容易实现的东西 – 并且可能需要更复杂的方法和数据集。

您也可以尝试使用仅在感兴趣领域的文本数据集上训练的一组向量——从而确保单词的词汇和意义都在该领域。