Gensim预训练模型相似度

时间:2019-01-16 10:52:02

标签: python vector nlp gensim word2vec

问题:

我使用带有矢量的手套预训练模型来重新训练具有特定领域的模型,例如#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)]

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

谢谢

2 个答案:

答案 0 :(得分:1)

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

您可以做的是使用“嵌入”层,用GloVe“知识”填充它,然后继续使用语料库进行训练,以便该层将学习单词并将其适合您的特定领域。您可以在Keras blog

中了解更多信息

答案 1 :(得分:1)

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

您可以尝试使用混合加权:将与'spacious''cars'的相似性相结合,并以该组合返回最重要的结果–这可能会有所帮助。

positive方法中提供多个most_similar()字可能会与此近似。如果您确定干扰/重叠的主要来源,甚至可以使用negative单词示例,类似于word2vec查找类推候选答案的方式(尽管这也可能会压制合法相关的有用结果)到两个域,例如'roomy')。例如:

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

(代替使用“汽车”或“房屋”之类的单个词,您还可以尝试使用由定义域的许多词组合而成的向量。)

但是一个明显的区别听起来像是一个研究项目,而不是使用现成的库/向量轻松实现的事情–可能需要更复杂的方法和数据集。

您还可以尝试使用一组仅对来自感兴趣领域的文本数据集进行训练的向量,从而确保单词的词汇和感觉都在该领域内。