有没有办法在python中强制两个单词之间的相似性?



我尝试使用word2vec,但我想改变两个单词之间的相似性。最好不要手动一个接一个。我正在考虑的另一个选择是创建一个语料库来强制执行正确的相似性,但我不知道该怎么做。谢谢你的任何建议。

为什么?Word2Vec 使用大量真实世界的用法数据来创建对某些事情有用的词向量,因为它们准确地反映了训练文本中的关系。

从某种意义上说,改变任何向量的位置都是微不足道的:只需将数组修改为您想要的任何值,将它们的所有维度都设为零!所有100.0!无论什么!

例如,如果您希望单词'apple''orange'具有相同的向量,从而 ~1.0相似性,则很容易将一个更改为另一个。假设你已经使用流行的Python Gensim库将Word2Vec模型训练成my_w2v_model

my_wv = my_w2v_model.wv
print(my_wv.similarity('apple', 'orange'))
my_wv['apple'] = my_wv['orange']
print(my_wv.similarity('apple', 'orange'))

但是,现在模型已经失去了苹果/橙子区别的任何概念,'apple'向量现在除了作为'orange'的确切同义词之外没有邻居或值。

因此,由于这些变化首先会破坏使用词向量的原因,因此重要的是要知道您正在寻求什么样的变化以及希望获得的好处。

也许你想直接破坏最终值,或者稍微轻推一下单词,或者其他什么。特别是,如果您主要希望单词保留与其他单词的关系,则需要进行更微妙的更改。

在某些情况下,更改或扩展训练数据,将模型训练转移到所需的相似性可能是最有意义的。作为一个粗略的快速示例,您可以考虑对数据进行预处理,以'apple'出现的每个文本,并以 50% 的概率将'apple'替换为'orange'('orange'反之亦然)。这往往会在训练文本中混淆两者,从而导致高度相似的末端向量,每个向量(通过未更改文本的影响)也非常类似于原始单词/单词邻居。

(有了目标的更多详细信息,可能会有更具体的建议。

最新更新